我有一组ActiveX控件和子组合在一起像这样:
-
用户键入ActiveX TextBox,
-
TextBox_Click触发3个子的执行 .
-
第一个子更新工作表上命名范围的值;基于该更新值,使用偏移函数在excel中创建表
-
第二个子副本将3中更新的表格范围和paste.values复制到工作表上的范围内(以消除公式)
这是它崩溃的地方 .
- 当我设置表单时,我创建了一个ListBox(ListBox1) . 上面#2中提到的三个子中的第三个测试用于查看工作表中是否存在ActiveX 'ListBox1' . 如果没有,意图是代码将确定ListBox被调用的内容(LB1或LB2或LB2等),将名称更改为'ListBox1',并将上面#4中的表粘贴到ListBox1中 . 然后,ListBox1_Click命令可以触发一组唯一的代码来执行 .
现在我只是测试名称ListBox1和ListBox2之间的切换 .
这个想法是,当用户键入TextBox1时,ListBox1会在每次击键时更新 . 因此,键入“g”,列表显示数据库表中第一个“g”开头的20个名称 . 然后键入“ge”,列表显示20个名称,从数据库表中的第一个“ge”开始等 . 用户单击一个名称,ListBox1_click执行一些独特的操作 . 如果用户在TextBox2中键入,他们会在ListBox中看到不同的数据(我想将其重命名为ListBox2),如果他们单击一组唯一的代码则由ListBox2_Click执行 .
#5中的问题是我第一次尝试执行时得到错误'对象不支持此属性或方法' . 第二次没问题 . 如果我在工作表上做了其他事情并回到它,我再次收到错误 .
以下是模块中#5的代码:
Sub PutListInListBox()
Dim OBJ As Object
On Error Resume Next
Set OBJ = ActiveSheet.OLEObjects("ListBox1")
On Error GoTo 0
If OBJ Is Nothing Then
ActiveSheet.ListBox2.Name = "ListBox1"
End If
ActiveSheet.ListBox1.Clear
ActiveSheet.ListBox1.List = Sheets("Search Criteria Control").Range("G1:G21").Value
End Sub
我不知道我做错了什么,感谢任何帮助 .
我希望我明白这一点 .
UPATED CODE 我有一堆ActiveX Lables和Text box,所以我使用了你建议搜索特定名称Case的第一个表单 . 我在这里看到我的错误 . 输入TB5后,LB不会更新 . 我点击返回设计模式,可以看到名称仍然是ListBox2 .
有任何想法吗?
Private Sub TextBox5_Change()
Call UpdateValues(TextBox5.Value)
Call CopyTable
Dim OLEOBJ As OLEObject
For Each OLEOBJ In ActiveSheet.OLEObjects
Select Case OLEOBJ.Name
Case "ListBox1", "ListBox2", "ListBox3"
OLEOBJ.Name = "ListBox1"
OLEOBJ.ListFillRange = Sheets("Search Criteria Control").Range("G1:G21").Address(external:=True)
End Select
Exit For
Next
End Sub
1 回答
我会专注于你的Code#5 .
首先,如果要更改
ListBox Object
的名称,最好迭代它所属的Object Collection
,因为您不确定它的名称 . 像这样的东西:如果您只想更改现有
ListBox
的名称,请跳过检查 .现在,要为其指定值或列表,您可以在更改其名称后使用
ListFillRange Property
直接指定源范围 .请注意,您无需清除以前的列表 . 它会自动更新 .
因为我'm not sure what you want to achieve entirely, I'将停在这里 . 虽然HTH .