フォームに次のボタンがあります。
_Private Sub CommandButton1_Click()
Dim pass As String
pass = UserForm1.TextBox1
Unload UserForm1
End Sub
_
次に、Module1というモジュールがあります。
_ Public Sub Login()
...
UserForm1.Show
driver.findElementByName("PASSWORD").SendKeys pass
...
End Sub
_
ユーザーが入力ボックスに入力したパスワードは、変数pass
に割り当てられます。しかし、私が問題を抱えているのは、pass
をUserForm1からModule1のLoginサブに渡すことです。
アンロードする前にフォームにModule1.Login (pass)
のようなものを追加することはうまくいくと考えましたが、それは何もパスしないようです。どんな助けでも大歓迎です。ありがとう。
ユーザーフォームで変数を宣言しないでください。モジュールでPublic
として宣言します。
Public pass As String
ユーザーフォーム内
Private Sub CommandButton1_Click()
pass = UserForm1.TextBox1
Unload UserForm1
End Sub
モジュール内
Public pass As String
Public Sub Login()
'
'~~> Rest of the code
'
UserForm1.Show
driver.findElementByName("PASSWORD").SendKeys pass
'
'~~> Rest of the code
'
End Sub
driver.find...
行を呼び出す直前に追加のチェックを追加することもできますか?
If Len(Trim(pass)) <> 0 Then
これにより、空の文字列が渡されなくなります。
Siddharthの答えはNiceですが、グローバルスコープの変数に依存しています。より良い、よりOOPフレンドリーな方法があります。
UserFormは他のクラスモジュールと同じです-唯一の違いは、非表示のVB_PredeclaredId
属性はTrue
に設定され、VB=クラスにちなんで命名されたグローバルスコープオブジェクト変数を作成します-これがUserForm1.Show
クラスの新しいインスタンスを作成せずに。
これから離れて、フォームを代わりにオブジェクトとして扱います-Property Get
メンバーとフォームのコントロールを抽象化します-呼び出しコードはcontrolsを気にしません:
Option Explicit
Private cancelling As Boolean
Public Property Get UserId() As String
UserId = txtUserId.Text
End Property
Public Property Get Password() As String
Password = txtPassword.Text
End Property
Public Property Get IsCancelled() As Boolean
IsCancelled = cancelling
End Property
Private Sub OkButton_Click()
Me.Hide
End Sub
Private Sub CancelButton_Click()
cancelling = True
Me.Hide
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode = VbQueryClose.vbFormControlMenu Then
cancelling = True
Me.Hide
End If
End Sub
これで、呼び出しコードでこれを行うことができます(ユーザーフォームの名前がLoginPrompt
であると仮定):
With New LoginPrompt
.Show vbModal
If .IsCancelled Then Exit Sub
DoSomething .UserId, .Password
End With
DoSomething
は、2つの文字列パラメーターを必要とするプロシージャです。
Private Sub DoSomething(ByVal uid As String, ByVal pwd As String)
'work with the parameter values, regardless of where they came from
End Sub