Excel VBAには、次のようなユーザーフォームがあり、ユーザーがID番号を入力すると、詳細がユーザーフォームに表示されます。
Private Sub btnIDNo_Click()
Dim IDNo As Long
If txtIDNo.Text <> "" Then
If IsNumeric(txtIDNo.Text) = True Then
lblError.Caption = ""
IDNo = txtIDNo.Text
Worksheets("Details").Activate
Range("B4").Select
While ActiveCell.Value <> "" And ActiveCell.Value <> IDNo
ActiveCell.Offset(1, 0).Select
Wend
If ActiveCell.Value = IDNo Then
txtName.Value = ActiveCell.Offset(0, 1).Value
txtPhone.Value = ActiveCell.Offset(0, 2).Value
Else
lblError.Caption = "Cannot find ID nummber"
End If
Else
lblError.Caption = "Please enter the ID Number in numeric form"
End If
End If
End Sub
詳細ユーザーフォームに[編集]ボタンがあります。 [編集]ボタンをクリックすると別のユーザーフォームが開き、ユーザーはそのID番号の詳細を変更できますが、ID番号自体は変更できません。これを行うには、詳細ユーザーフォームからユーザー編集フォームにID番号を渡す必要があります。これを行う方法はありますか?
「ユーザーの編集」フォームを開くための「詳細ユーザーの表示」フォームの下部は、次のようになります。
Private Sub CommandButton1_Click()
Dim IDNo As Long
If txtIDNo.Text <> "" Then
If IsNumeric(txtIDNo.Text) = True Then
lblError.Caption = ""
IDNo= txtIDNo.Text
ufmEditDetails.Show
ufmShowDetails.Hide
Else
lblError.Caption = "Please enter the ID Number in numeric form"
End If
Range("B4").Select
End If
End Sub
私はすでに以下のリンクを見ましたが、それらは役に立たないようです:
http://gregmaxey.mvps.org/Word_tip_pages/userform_pass_data.html
多くの方法があります...ここにいくつかあります...
方法1
Public
変数を宣言するUserform1内
Private Sub CommandButton1_Click()
MyVal = "Sid"
UserForm2.Show
End Sub
Userform2
Private Sub CommandButton1_Click()
MsgBox MyVal
End Sub
モジュール内
Public MyVal
方法2
使用 .Tag
ユーザーフォームのプロパティ
Userform1内
Private Sub CommandButton1_Click()
UserForm2.Tag = "Sid"
UserForm2.Show
End Sub
Userform2
Private Sub CommandButton1_Click()
MsgBox Me.Tag
End Sub
方法
Userform2にLabel
を追加し、その可視プロパティをFalse
に設定します
Userform1内
Private Sub CommandButton1_Click()
UserForm2.Label1.Caption = "Sid"
UserForm2.Show
End Sub
Userform2
Private Sub CommandButton1_Click()
MsgBox Label1.Caption
End Sub
この問題を解決する方法はいくつかあります。私が使用するものは、モジュールでグローバル変数またはパブリック変数を宣言することです
例:
Public commonVariable As String
次に、ユーザーフォームで、この変数に値を割り当てたり、値を取得したりできます。たとえば、userform1の場合:
Private Sub btnIDNo_Click()
commonVariable = "UserId"
End Sub
userForm2の場合:
Private Sub CommandButton1_Click()
me.txtIDNo.Text = commonVariable
End Sub
最も簡単な方法は次のとおりです。
UserForm2.TxtIDNo.Text = UserForm1.txtIDNo.Text