2015-02-06 53 views
0

我目前正在嘗試編寫一個宏(Word中的VBA),它可以將文檔集合中的信息編譯爲單個文檔。使用循環讀取複選框值(Microsoft Word VBA)

我要做到這一點我有一個約20個複選框的列表,這些複選框將決定我想在編譯中包含哪些文檔。我的問題是,在編寫宏時,我無法找出一種方法來檢查列表中每個複選框的狀態,而不用重寫相同的代碼塊20次,只更改複選框的名稱。例如每次CB1到CB2,CB3 CB4等。

這是有問題的代碼塊。如果我多次重寫它的變化複選框數它的工作,但我寧願它在一個循環,使代碼更緊湊和堅固的:

If ThisDocument.CB1.Value = True Then 

Documents.Open(directory).Activate 
Selection.WholeStory 
Selection.Copy 
Documents(NewFile).Activate 
Selection.Paste 
Documents("file.docx").Close 

End If 

理想我想有複選框命名的東西像CBn,其中n是我可以在每個循環結束時重新定義的變量。

回答

0

有直接提到它的名字控制任何選項 - 你可以用,最多的功能,但:

Sub Tester() 
    Dim x As Long, cb As Object 
    For x = 1 To 3 
     'find the checkbox 
     Set cb = ControlByName("CB" & x, ThisDocument) 
     'check we got something back 
     If Not cb Is Nothing Then 
      Debug.Print "CB" & x & " is " & cb.Value 
     End If 
    Next x 
End Sub 

Function ControlByName(sName, doc As Document) As Object 
    Dim obj 
    For Each obj In doc.InlineShapes 
     If obj.OLEFormat.Object.Name = sName Then 
      Set ControlByName = obj.OLEFormat.Object 
      Exit Function 
     End If 
    Next obj 
End Function