2014-10-09 108 views
0

希望是一個容易。 我有一個Word文檔散佈着複選框。有什麼方法可以訪問這些複選框作爲一個集合,我可以循環和檢查/設置屬性,如ID和值?Word 2010 VBA複選框

作爲參考,我已經嘗試過ActiveDocument.ContentControls集合;它是空的。 我也試過ActiveDocument.Fields。這實際上包含與頁面上相同數量的複選框,但我無法將其轉換到複選框以訪問我需要的屬性。

最後一個問題,是否可以動態地指派一個事件處理程序到點擊?

預先感謝您

+0

您使用的是什麼版本的Word?此外,複選框是「正常」的還是ActiveX對象? – 2014-10-09 14:56:24

+0

Word 2010.我不確定,您知道快速檢查的方法嗎? 如果有幫助,它的類型是Microsoft Forms 2.0 CheckBox – Ryuu 2014-10-09 15:00:12

+0

右鍵單擊一個對象並查看是否在上下文菜單中有條目「格式控制...」。如果是,那麼是一個ActiveX。如果不是普通的複選框,或者是傳統的複選框(順便說一下,該文檔有多大?)。建議:把Word版本發佈給大家看。 – 2014-10-09 15:06:50

回答

0

嵌入文檔中的所有ActiveX領域的集合(假設它的名字是ThisDocument)是集ThisDocument.Fields。此集合的項目是類Field的對象。

查詢這個集合中的對象的價值,你會用線沿線的東西:

ThisDocument.Fields.Item(1).OLEFormat.Object.Value 

要代碼添加到事件處理程序,只是在ActiveX控件單擊鼠標右鍵,並然後從上下文菜單中選擇「查看代碼」。你會得到的Click事件處理程序:

Private Sub CheckBox1_Click() 
    ' empty if event handler not set, VBA code otherwise ' 
End Sub 

插入代碼動態,你需要直接操縱代碼模塊,並通過行添加事件處理程序行。這可能會非常棘手,但基本上,你會做這樣的事情:

ThisDocument _ 
    .VBProject _ 
    .VBComponents(ThisDocument.CodeName) _ 
    .CodeModule _ 
    .InsertLines(<<Line>>, <<String>>) 

其中<<Line>>是要插入(數量),並且<<String>>是要插入的文本。注意不要插入現有的Sub,Function或自定義類型定義(顯然)的中間。

+0

是否有可能爲它動態設置一個onclick事件處理程序? – Ryuu 2014-10-09 15:26:36

+0

有趣的是,正如你發佈的那樣,我設法通過反覆使用google和head-desking來找到非常相似的代碼。當然,你的代碼更具信息性,更清潔一些。現在要弄清楚如何只做一次動態代碼插入。只是一個簡單的問題,是否這是分配複選框的On_Click處理程序的唯一方法? – Ryuu 2014-10-09 15:52:00

+0

@Ryuu號正如我所說的,還有*手冊*方式:您右鍵單擊所有控件,然後鍵入/粘貼代碼。這並不像通過程序來添加它們那麼有趣,但是你肯定會有更少的麻煩。 :-) – 2014-10-09 15:55:46