Данные VBA UserForm для модуля - PullRequest
       11

Данные VBA UserForm для модуля

0 голосов
/ 12 октября 2019

Я пытаюсь выяснить, как используются userfords. В основном я пытаюсь использовать пользовательскую форму для отправки автоматических электронных писем. Я разобрался с модулем автоматической электронной почты, но мне не повезло передать данные из пользовательской формы в модуль. Поэтому я создал еще один небольшой модуль, чтобы посмотреть, что может сработать для меня, но без удачи. Итак, первая пользовательская форма выглядит следующим образом:

Private Sub CommandButtonCancel_Click()


Unload Me

End Sub

Public Sub CommandButtonOK_Click()

mailfromfor = mailtobeused.Text
smtpservername = smtpserver.Text
passmailfromform = mailpassword.Text

Me.Hide

End Sub

, что ничего особенного. Пользовательская форма с тремя полями и кнопками ОК и Отмена.

Следующим является проверка возможности передачи данных из формы в модуль. Поэтому я создал кнопку с кодом:

Sub testvalue()


MsgBox mailfromfor
MsgBox smtpservername
MsgBox passmailfromform

End Sub

, но, похоже, ничего не работает. MsgBoxes дают мне пробелы. По сути, я понятия не имею, как работают пользовательские формы. Каковы принципы, лежащие в основе кода. Любая помощь?

Ответы [ 2 ]

0 голосов
/ 13 октября 2019

правильный способ будет получить их из полей пользовательской формы перед его удалением, как показано ниже:

Sub testvalue()

    With New UserForm1 ' instantiate and reference an object of your Userfom class (change "UserForm1" to your actual Userform class
        .Show

        MsgBox .mailtobeused.Text ' get referenced userform 'mailtobeused' textbox value
        MsgBox .smtpserver.Text ' get referenced userform 'smtpserver' textbox value
        MsgBox .mailpassword.Text ' get referenced userform 'mailpassword' textbox value
    End With

End Sub

таким образом, вам даже не нужны эти переменные mailfromfor, smtpservername и passmailfromformв вашем модуле Userfom

Другим способом может быть использование Public переменных, которые я бы посоветовал против

0 голосов
/ 12 октября 2019

Лучше всего передать значения, используя byval или byref, в подпрограмму, в которой вы хотите использовать переменные. Пример ниже:

    Public Sub CommandButtonOK_Click()

    mailfromfor = mailtobeused.Text
    smtpservername = smtpserver.Text
    passmailfromform = mailpassword.Text

    testvalue mailfromfor, smtpservername, passmailfromform 'pass the values to the sub

    Unload Me

    End Sub

    Sub testvalue(ByVal mailfromfor As String, ByVal smtpservername As String, ByVal passmailfromform As String) 'set the values as byval

    MsgBox mailfromfor
    MsgBox smtpservername
    MsgBox passmailfromform

    End Sub
...