Как добавить значение текстового поля в переменную из пользовательской формы? - PullRequest
1 голос
/ 10 июля 2019

Я создал пользовательскую форму с именем UIAutotestHeader и текстовое поле с именем pypath. И при нажатии кнопки я пытаюсь передать значение переменной, но получаю runtime error 424. Любая помощь, пожалуйста.

Sub LoopThroughFiles()
   Dim Path As String    
   UIAutotestHeader.Show
   Path = pypath.Value
   If pypath.Value = "" Then
       MsgBox "Please add a path having .py files."
   End If
End sub

Код нажатия кнопки:

Private Sub CommandButton1_Click()
    UIAutotestHeader.Hide
End Sub

Ответы [ 2 ]

1 голос
/ 10 июля 2019

Во-первых, посмотрите этот полезный Блог RubberDuck о работе с пользовательскими формами, очень полезный и применимый.Это то, на чем я основываю свой ответ.


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

Обратите внимание, что в этом случае вам не нужно хранить переменные, поскольку у вас все еще есть доступ к ним в вашем экземпляре пользовательской формы.Вот пример ниже.

Sub LoopThroughFiles()
   With New UIAutotestHeader
        .Show
        If Not .IsCancelled Then
            If .PyPath = "" Then
                MsgBox "Please add a path having .py files."
            End If
        End If
    End With
End Sub

В вашей пользовательской форме вы можете предоставить свойства, к которым вы хотите иметь доступ.Я также добавил метод IsCancelled, чтобы пользователь не нажимал кнопку отмены.

Option Explicit

Private cancelled As Boolean

Public Property Get PyPath() As String
    PyPath = pypath.Value
End Property

Public Property Get IsCancelled() As Boolean
    IsCancelled = cancelled
End Property

Private Sub CommandButton1_Click()
    Hide
End Sub

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    If CloseMode = VbQueryClose.vbFormControlMenu Then
        Cancel = True
        OnCancel
    End If
End Sub

Private Sub OnCancel()
    cancelled = True
    Hide
End Sub
0 голосов
/ 10 июля 2019

Попробуйте этот код

'In Standard Module
'------------------
Public sPath As String

Sub LoopThroughFiles()
Load UIAutotestHeader
sPath = UIAutotestHeader.pypath.Value
UIAutotestHeader.Show
End Sub

'In UserForm Module
Private Sub pypath_AfterUpdate()
If sPath = "" Then
    MsgBox "Please add a path having .py files."
End If
End Sub

Private Sub CommandButton1_Click()
If sPath <> "" Then MsgBox sPath
sPath = ""
Unload UIAutotestHeader
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...