如何使用子过程更新列表框

时间:2018-02-14 22:22:41

标签: vba excel-vba listbox excel

我有一个用户表单和一个列表框,我使用列表框作为活动备忘录,我开发了一个用于更新该列表框的子程序以及一个表单中的listobject作为其库。 (列表框只有当前会话日志,但列表对象具有所有记录)。我无法将列表框控件传递给sub。我在模块和userform代码部分尝试过它,但我不能引用列表框名称(不是字符串也不是列表框控件)。你对此有什么想法或解决方案吗? 这是我的代码。

Public Sub memoadd(ByVal txt As String, ByVal tablename As String, ByVal listbox As String)
    Dim lrow As ListRow, lobj As ListObject, lstbox As listbox

    Set lobj = log.ListObjects(tablename)
    Set lrow = lobj.ListRows.Add(1, True)
    Set lstbox = Me.Controls(listbox)
    lstbox.AddItem txt & " @ " & Format(Time, "hh:mm"), "0"

    With lrow
       lrow.Range(1, 1) = lobj.ListRows.Count
       lrow.Range(1, 2) = Now
       lrow.Range(1, 3) = lstbox.List(0)
       lrow.Range(1, 4) = Environ$("Computername")
       lrow.Range(1, 5) = Environ$("username")
    End With

    lstbox.ListIndex = 0
End Sub

以下是我在程序中使用它的方法。

memoadd "master file of A/C: " & ac & " is opened", "Logs", "ListBox2"

1 个答案:

答案 0 :(得分:1)

首先,您必须(确保)在运行时访问ListBox 这意味着当您致电Userform时,Sub已经加载。

Sub中的另一个建议,而不是将ListBox作为String传递,将其作为MSForms.ListBox对象传递。像这样:

Public Sub memoadd(ByVal txt As String, _
                   ByVal tablename As String, _
                   ByVal listbox As MSForms.ListBox) 

listbox.AddItem txt & " @ " & Format(Time, "hh:mm"), "0"
'/* no need to set lobj here, you can use listbox directly */
'/* rest of your code */

End Sub

我希望这能让你前进,你没有提及有关你代码的其他细节。
所以我没有检查并假设它应该有效。