第一次打开时VBA Userform未被填充(可能的内存问题)

VBA'ers,

我会切入正题。 我有一个用户表单与所有的花里胡哨(标签,文本框,列表框,tabtrip等)。 目前我有三个潜艇。

这是我的代码。 我知道人们只要求用户表单初始化,但看到所有这些可能有助于find问题。

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)它的硬币翻转是否用户窗体填充列表框。 标签正确初始化,但列表框显示没有文字。 如果我继续运行并停止macros,它将最终工作正常。

这是一个记忆问题? 我没有正确地激活用户窗体? 或者这是由于马虎编码?

任何build议,将不胜感激。

由于我们无法看到完整的Userform_Initialize() ,我假设您只将列表填充到列表框中。

如果你想要一个列表框来select它显示的东西,你需要调用像ListBox1.ListIndex = 0或你的默认值的索引。 这必须在列表填充之后。

更新:

谢谢,我相信当它不起作用,这是因为activesheet不是你有列表项的地方。 要么填写公式地址或范围名称我的testing工作簿是“Test.xlsm”:

ListBox1.RowSource = "[Test.xlsm]Sheet1!B2:B11" '更改工作簿和工作表名称以适应您的

要么

ListBox1.RowSource = "Test.xlsm!MyListItems" “更改工作簿名称,创build并更改包含列表项目的范围的名称。