Функция или процедура для навигации по пользовательским формам - PullRequest
0 голосов
/ 11 июня 2018

Я использую версию Word для Office365.У меня есть несколько пользовательских форм VBA, которые я хотел бы создать функцию или процедуру для навигации.В настоящее время существует 40 объектов форм с именами Form01, Form02, Form03 и т. Д., И пользователь должен последовательно перемещаться по ним.Я поместил код в каждый из них, чтобы перемещаться вперед и назад.

Private Sub btnContinue_Click()
    Form02.Hide
    Form03.Show
End Sub

Private Sub btnBack_Click()
    Form02.Hide
    Form01.Show
End Sub

Однако, если мне когда-либо понадобится изменить имена форм, будет предпринята попытка исправить каждую ссылку на кнопку.Я также попытался встроить ссылку на страницу в свой код, а затем использовать функцию для вычисления следующей или предыдущей страницы, но я не могу найти способ превратить ее из строкового значения обратно в ссылку на объект.Чего мне не хватает?

1 Ответ

0 голосов
/ 11 июня 2018

Вы можете сделать что-то вроде этого: В общем, общем модуле:

Public Sub showNextForm(currentFormName As String)
    nextFormName = "Form" & Format((CInt(Right(currentFormName, 2)) + 1), "00")

    For Each uForm In VBA.UserForms 'Loop through all loaded userforms
        If uForm.Name = currentFormName Then uForm.Hide
        If uForm.Name = nextFormName Then
            uForm.Show
            nextFormLoaded = True
        End If
    Next uForm

    If Not nextFormLoaded Then
        Set nextForm = UserForms.Add(nextFormName) 'Load next userform if it's not already loaded
        nextForm.Show
    End If
End Sub

Public Sub showPreviousForm(currentFormName As String)
    prevFormName = "Form" & Format((CInt(Right(currentFormName, 2)) - 1), "00")

    For Each uForm In VBA.UserForms 'Loop through all loaded userforms, and hide current one
        If uForm.Name = currentFormName Then uForm.Hide
        If uForm.Name = prevFormName Then
            uForm.Show
            prevFormLoaded = True
        End If
    Next uForm

    If Not prevFormLoaded Then
        Set prevForm = UserForms.Add(prevFormName) 'Load previous userform if it's not already loaded
        prevForm.Show
    End If
End Sub

Затем в каждой пользовательской форме вы получите кнопку «Назад», вызывающую

showPreviousForm Me.Name

И кнопка «Далее» вызывает

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