VBAの皆さん、
本題に入ります。私はすべてのベルとホイッスル(ラベル、テキストボックス、リストボックス、タブストリップなど)を備えたユーザーフォームを持っています。現在サブは3人います。
これが私のコードです。人々がユーザーフォームの初期化のみを要求したことは知っていますが、すべてを見ると問題を見つけるのに役立つ場合があります。
Private x As Single
Private y As Single
'------------------------------------------
Private Sub CommandButton1_Click()
Unload Me
End Sub
'------------------------------------------
Private Sub ListBox1_Click()
x = 2
y = 2
name = ListBox1.Value
'Loop to match names
Do Until name = Cells(x, y)
x = x + 1
Loop
'Changes lables on click <- I realize I can handle this better with listbox.values
Label2.Caption = Sheet2.Cells(x, 2) 'Name
Label5.Caption = Sheet2.Cells(x, 3) 'Current Positions
Label7.Caption = Sheet2.Cells(x, 4) 'Previous Positions
Label9.Caption = Sheet2.Cells(x, 5) 'DOB
Label11.Caption = Sheet2.Cells(x, 6) 'POB
Label13.Caption = Sheet2.Cells(x, 7) 'Party Affiliation
'Changes tab strip accordingly
Call TabStrip1_Change
'Handles Picture
If Cells(x, 8) <> "" Then
Image1.Picture = LoadPicture(ThisWorkbook.Path & Cells(x, 8))
Else
Image1.Picture = LoadPicture(ThisWorkbook.Path & "..\pics\nophoto.jpg")
End If
End Sub
'------------------------------------------
Private Sub TabStrip1_Change()
'Handle Tab Strip
If TabStrip1.Value = 0 Then
TextBox1.Value = Cells(x, 9)
ElseIf TabStrip1.Value = 1 Then
TextBox1.Value = Cells(x, 10)
Else
TextBox1.Value = Cells(x, 11)
End If
End Sub
'------------------------------------------
Private Sub UserForm_Initialize()
'Initialize global variables
x = 2
'Initialize lists within userform.
ListBox1.RowSource = "B2:B11"
'Set tab strip to first tab.
TabStrip1.Value = 0
TextBox1.Value = Sheet2.Cells(2, 9)
'Grab photo if path is in cell
If Cells(2, 8) <> "" Then
Image1.Picture = LoadPicture(ThisWorkbook.Path & Cells(2, 8))
Else
Image1.Picture = LoadPicture(ThisWorkbook.Path & "..\pics\nophoto.jpg")
End If
End Sub
問題は、vba または commandButton (Userform1.show) を介してコードを実行すると、ユーザーフォームがリストボックスにデータを入力するかどうかでコインが反転することです。ラベルは正しく初期化されていますが、リスト ボックスにはテキストが表示されません。マクロを実行して停止し続けると、最終的には正常に動作します。
これはメモリの問題ですか?ユーザーフォームを適切にアクティブ化していませんか? それとも、ずさんなコーディングが原因ですか?
任意の提案をいただければ幸いです。