VBA' ERS,
我会切入追逐。我有一个带有所有铃声和口哨的用户表单(标签,文本框,列表框,标签等)。目前我有三个潜艇。
这是我的代码。我知道人们只是要求初始化用户形式,但看到所有这些可能有助于找到问题。
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),无论userform是否填充列表框,都会触发硬币。标签已正确初始化,但列表框未显示任何文本。如果我继续运行并停止宏,它最终会正常工作。
这是内存问题吗?我没有正确激活用户表单吗?或者这是由于草率编码?
任何建议都将不胜感激。
答案 0 :(得分:1)
由于我们看不到完整的Userform_Initialize()
,我假设您只将列表填充到列表框中。
如果您希望列表框在显示时选择某个内容,则需要调用ListBox1.ListIndex = 0
之类的内容或默认值的索引。这必须在填充列表之后。
<强>更新强>
谢谢,我相信当它不起作用时,这是因为活动表不是列表项的位置。无论是输入完整的公式地址还是范围名称,我的测试工作簿都是“Test.xlsm”:
ListBox1.RowSource = "[Test.xlsm]Sheet1!B2:B11"
'更改工作簿和工作表名称以适合您的
或
ListBox1.RowSource = "Test.xlsm!MyListItems"
'更改工作簿名称,创建并更改包含列表项的范围的名称。