У меня есть текстовый документ с 5 флажками управления содержимым - они используются, чтобы показать, какие параметры были выбраны (или нет), когда документ распечатан и / или напечатан.Самим им на самом деле ничего не нужно «делать», код мудрый.
У меня есть пользовательская форма, которая имеет 5 флажков, которые соответствуют 5 флажкам в документе.Пользователь может выбрать любой, ни один, или все эти флажки пользовательской формы, и я хочу, чтобы флажки управления содержимым документа Word совпадали.
Ради простоты я назвал флажки управления содержимым такими же, как флажки пользовательской формы, в надежде перебрать код, как только он заработает.
При открытии работает следующеепользовательская форма:
Private Sub UserForm_Initialize()
Dim x As Variant
Dim z As control
On Error GoTo quit
For Each x In Array("ChkA", "ChkB", "ChkC", "ChkD", "ChkE")
For Each z In Me.Controls
If z.Name = x And ActiveDocument.SelectContentControlsByTitle(x).Item(1).Checked = True Then z.Value = True
Next z
Next x
quit:
End Sub
Технически это работает, но немного неуместно, поскольку существует только один экземпляр "ChkA" или "ChkB" и т. д., но этот код проходит по каждому имени для каждогофлажок, означающий, что он выполняет 25 проверок, когда на самом деле это нужно только сделать 5.
Однако, при попытке переместить значения флажка из пользовательской формы обратно в документ Word, «тот же» код выше (но в обратном порядке) не работает, то есть:
Private Sub cmdEnter_Click()
Dim x As Variant
Dim z As control
For Each x In Array("ChkA", "ChkB", "ChkC", "ChkD", "ChkE")
For Each z In Me.Controls
If z.Name = x And z.Value = True Then ActiveDocument.SelectContentControlsByTitle(x).Item(1).Checked = True
Next z
Next x
Unload Me
End Sub
Это приводит к ошибке несоответствия типов в строке "For Each z ...".
То, что я хочу сделать, этообратитесь к моим флажкам userform с именем переменной, чтобы я мог их циклически проходить, что-то вроде следующего, может быть?
Dim x as Variant
Dim y as String
Dim z as control
x = Array("ChkA", "ChkB", "ChkC", "ChkD", "ChkE")
For i = 0 To 4
y = x(i)
Set z = Me.Controls(y)
ActiveDocument.FormFields(y).CheckBox.Value = z.Value
Set z = Nothing
Next i
или что-то подобное?