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

时间:2013-09-18 03:18:09

标签: excel vba excel-vba memory-leaks userform

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是否填充列表框,都会触发硬币。标签已正确初始化,但列表框未显示任何文本。如果我继续运行并停止宏,它最终会正常工作。

这是内存问题吗?我没有正确激活用户表单吗?或者这是由于草率编码?

任何建议都将不胜感激。

1 个答案:

答案 0 :(得分:1)

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

如果您希望列表框在显示时选择某个内容,则需要调用ListBox1.ListIndex = 0之类的内容或默认值的索引。这必须在填充列表之后。

<强>更新

谢谢,我相信当它不起作用时,这是因为活动表不是列表项的位置。无论是输入完整的公式地址还是范围名称,我的测试工作簿都是“Test.xlsm”:

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

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