Лично я бы подошел к этому по-другому.
Полезность функции, которая возвращает заголовки и "проверенное" состояние всех элементов управления содержимым типа "ceckbox", ниже, чем функции, которая просто возвращает все элементы управления содержимым определенного типа. Вот почему:
Код, который вызывает функцию, уже знает, что хочет использовать Title
и Checked
, поэтому ничего не теряется, когда он получает массив ContentControl
экземпляров вместо нескольких размерный массив строк и логических значений. Но когда вызывающий код хочет манипулировать флажками, подход «строки и логические значения» терпит неудачу.
При этом предположении мы можем отбросить одно измерение массива и получить функцию, которую можно повторно использовать в другой сценарий ios.
Также нам не нужно передавать массив. Просто создайте массив и верните его:
Function FindControls(Doc As Word.Document, ControlType As WdContentControlType) As Variant
Dim cct As Variant, i As Integer
' figure out how many matching controls there are and allocate an array
For Each cct In Doc.ContentControls
If cct.Type = ControlType Then i = i + 1
Next cct
ReDim cctArray(i - 1)
' save references to matching controls in array
i = 0
For Each cct In Doc.ContentControls
If cct.Type = ControlType Then
Set cctArray(i) = cct
i = i + 1
End If
Next cct
FindControls = cctArray
End Function
Теперь мы можем использовать его в коде вызова вполне естественно:
Dim c As Variant
For Each c In FindControls(ActiveDocument, wdContentControlCheckbox)
Debug.Print c.Title, c.Checked
Next