我有一个用户表单和一个列表框,我使用列表框作为活动备忘录,我开发了一个用于更新该列表框的子程序以及一个表单中的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"
答案 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
我希望这能让你前进,你没有提及有关你代码的其他细节。
所以我没有检查并假设它应该有效。