Почему VBA не позволяет мне объявлять публичный массив в командной кнопке в пользовательской форме? - PullRequest
0 голосов
/ 22 января 2019

Моя задача: У меня есть пользовательская форма с различными флажками. Пользователь должен установить / снять эти флажки и нажать кнопку «Готово» после завершения. Нажатие «Done» должно инициировать массив и заполнить его строковыми значениями в соответствии с кодом. Пока все хорошо.

Моя проблема: Однако, поскольку мне нужен массив в другом модуле, он должен быть общедоступным. Я объявил это публично, как показано ниже в моем коде. Однако это ошибки. Что я делаю не так?

Спасибо!

Option Base 1
Public dimArray(5, 4) As String

Private Sub cmdBtn_Done_Click()

Unload ProductDimension

'1st Dimension
If chk_AbilityOfInteraction = True Then

    dimArray(1, 1) = "Functionality"
    dimArray(1, 2) = "Ability of interaction"

End If

If chk_Performance = True Then

    dimArray(1, 1) = "Functionality"
    dimArray(1, 3) = "Performance"

End If

....
End Sub

1 Ответ

0 голосов
/ 22 января 2019

Поскольку вы хотите получить результат формы пользователя в другом модуле, вы можете использовать приведенный ниже код в стандартном модуле кода. Это функция, которая возвращает нужный вам массив. Итак, в процедуре, где вам нужен массив, вы должны иметь

Dim Arr() As String
Arr = GetArray

и вот функция GetArray: -

Function GetArray() As String()

    ' "UserForm1" must be the name you gave to the UserForm.
    ' It's "UserForm1" by default but you did well if you changed the name.
    Dim MyForm As UserForm1
    Dim Arr(1 To 3) As String

    Set MyForm = New UserForm1              ' this is the actual form's name, too
    With MyForm
        ' although the form isn't visible, you can
        ' set or modify any of its controls:-
        .chk_AbilityOfInteraction.Value = False
        .Show                               ' now MyForm takes over control
                                            ' until "Hide" is encountered in
                                            ' the form's own code.
                                            ' Your "Done" button should trigger
                                            ' this action.
        ' upon "Me.Hide" the code resumes here
        ' The form is only hidden. All it's controls are still in memory.
        Arr(1) = "Functionality"
        If .chk_AbilityOfInteraction.Value = True Then
            Arr(2) = "Ability of Interaction"
        Else
            Arr(3) = "Performance"
        End If
    End With

    Unload MyForm                           ' now the form is killed
                                            ' if not killed you might "Show" it again
                                            ' with all previous values still in it.
    Set MyForm = Nothing
    GetArray = Arr                          ' this sets the function's return value
End Function
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...