Word VBA «Метка не определена», если существует команда «Закладка существует» - PullRequest
0 голосов
/ 02 декабря 2010

Я очень новичок в VBA и только учусь. Вот моя ситуация и проблема:

1) Я создал рабочую форму пользователя с текстом и списками со ссылками на закладки 2) Проблема в том, что он не работает, если некоторые закладки не существуют (и проект потребует этого: форма должна работать на документах, где присутствуют не все закладки) 3) Я хотел бы, чтобы форма перестала давать мне сообщения об ошибках, если там нет закладок, и просто заполните те, которые существуют в этом конкретном документе 4) Вот код:

Private Sub cmdOK_Click()
    Application.ScreenUpdating = False
    With ActiveDocument
          If .Bookmarks.Exists("cboYourName") Then
        .Range.Text = cboYourName.Value
        Else: GoTo 28
    End If
         If .Bookmarks.Exists("cboYourPhone") Then
         .Range.Text = cboYourPhone.Value
         Else: GoTo 32
    End If
        If .Bookmarks.Exists("cboYourFax") Then
        .Range.Text = cboYourFax.Value
        Else: GoTo 36
    End If
         If .Bookmarks.Exists("cboYourEmail") Then
         .Range.Text = cboYourEmail.Value
        Else: GoTo 40
    End If
         If .Bookmarks.Exists("txtContractName") Then
         .Range.Text = txtContractName.Value
         Else: GoTo 44
    End If
          If .Bookmarks.Exists("txtContractNumber") Then
          .Range.Text = txtContractNumber.Value
          Else: End
    End If
    End With
    Application.ScreenUpdating = True
    Unload Me
End Sub

4) Как мне заставить это работать ?????????

1 Ответ

0 голосов
/ 03 декабря 2010

Я думаю, что вы близко. Во-первых, избегайте высказываний Goto. В вашем коде трудно сказать, что вы хотите сделать. Я думаю, что ошибки из заявлений Гото. Его параметром является метка, а не номер строки. Во-вторых, избегайте использования End. Лучше иметь процедуру закрытия. Тем не менее, код работает с любым количеством операторов Exists.

Private Sub cmdOK_Click()
    Application.ScreenUpdating = False
    With ActiveDocument
        If .Bookmarks.Exists("cboYourName") Then
            .Range.Text = "cboYourName text."
        Else
            Debug.Print "Bookmark exists."
        End If

        If .Bookmarks.Exists("cboYourPhone") Then
           .Range.Text = "cboYourPhone text"
        Else
            Debug.Print "Bookmark does not exists."
        End If
    End With

    Application.ScreenUpdating = True
    Unload Me
End Sub

Однако имейте в виду, что каждая найденная закладка полностью заменяет содержание документа, включая впоследствии найденные закладки. Это то, что вы хотите сделать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...