2016-11-25 3 views
0

Как получить связанное текстовое значение с элементом формы элемента документа MS Word. Я могу извлечь значение флажка. Я попробовал с закладкой и свойствами имени и обнаружил, что нет значения, связанного с закладкой, помещенной в этот флажок. Я получил следующий результат. Есть предположения?Как получить поля формы MS Word Установите связанный текст и их значение с помощью VBA?

поля формы:

form

Код:

Sub Test() 
    Dim strCheckBoxName As String 
    Dim strCheckBoxValue As String 
    For i = 1 To ActiveDocument.FormFields.Count 
     If ActiveDocument.FormFields(i).CheckBox Then 
      strCheckBoxName = ActiveDocument.FormFields(i).Name 
      strCheckBoxValue = ActiveDocument.FormFields(i).CheckBox.Value 
      Debug.Print strCheckBoxName & " = " & strCheckBoxValue 
     End If 
    Next 
End Sub 

Выход:

Check1 = True 
Check1 = True 
Check1 = True 
Check1 = False 
Check1 = False 
Check1 = False 

Решение ищет:

A = True 
B = True 
C = True 
D = False 
E = False 
F = False 
+0

может быть, вы должны использовать strCheckBoxName = ActiveDocument.FormFields (I) .CheckBox.Name, так как имя поля является одинаковым для всех. –

+0

Я попробовал. Но не повезло. Он бросает нуль. –

ответ

0

EDIT:

По умолчанию, когда добавляется поле формы Check Box, он имеет Закладку (имя) Check# где # не является последовательным, начиная с 1 до n , Копирование и вставка ваши друзья с поля форм, так что одна из двух вещей может произойти, если вы идете, что маршрут, чтобы получить, скажем, ваши 1000 поля форм:

  • 1: Если вы не изменить значение закладки (например, по умолчанию для Check1) и скопируйте и вставьте, скажем 1000 раз, вы получите 1000 FormFields закладки Check1.
  • 2: Если вы измените значение закладки (например, на A) и скопируете и прошептали 1000 раз, только первый FormField сохранит закладку A, а остальная часть - Пустое.

Вы можете изменить значение закладки Флажок по умолчанию (в данном случае Check1 в результате от копирования и вставки снова и снова) к последовательному значению, такой как А1, А2, А3, А4 или Check1, Check2, Check3 и т.д ... с помощью следующих действий:

Sub Test() 
    Dim strCheckBoxName As String 
    Dim strCheckBoxValue As String 
    For i = 1 To ActiveDocument.formFields.Count 
     If ActiveDocument.formFields(i).CheckBox Then 
      strCheckBoxName = ActiveDocument.formFields(i).Name 
      strCheckBoxValue = ActiveDocument.formFields(i).CheckBox.Value 
      Debug.Print strCheckBoxName & " = " & strCheckBoxValue 
     End If 
    Next 
End Sub 

Sub RenameCheckBox() 
    Dim oFields As formFields 
    Dim oVar As Variant 
    Dim i As Long 
    Dim x As Long 

    x = 0 
    i = 0 

    If ActiveDocument.ProtectionType <> wdNoProtection Then 
     ActiveDocument.Unprotect 
    End If 
    Set oFields = ActiveDocument.formFields 
    For x = 1 To oFields.Count 
     oFields(x).Select 
     Select Case oFields(x).Type 
      Case wdFieldFormCheckBox 
       oVar = oFields(x).CheckBox.Value 
       i = i + 1 
       With Dialogs(wdDialogFormFieldOptions) 
        .Name = "Check" & i 
        .Execute 
       End With 
       oFields(x).CheckBox.Value = oVar 
      Case Else 
       'Do Nothing 
     End Select 
    Next x 
    ActiveDocument.Protect Type:=wdAllowOnlyFormFields, NoReset:=True 

    Call Test 

End Sub 
+0

Спасибо за ваш ответ. Но документ защищен значениями, а также документ более 1000. –

+0

Если есть более 1000 таких полей поля формы, каково их соглашение об именах? – pstatix

+0

«Я попробовал с закладкой и свойствами имени и обнаружил, что не существует значения, связанного с закладкой, помещенной в поле». Как вы отметили свойство закладки? Использование VBA или вы сняли защиту с документа? – pstatix

Смежные вопросы