我对DBA还是很陌生,所以这可能是一个平庸的错误,但是我环顾四周,但没有发现任何可以帮助我的东西。 我正在尝试使用链接到按钮的宏使用列的内容(在这种情况下为“ A”列)动态填充组合框。如果分析的单元格为空,则一切顺利,并且消息“完成!”出现,但是如果单元格中有任何数据,则会出现错误“ 424对象需要访问”。 我不知道这是否有帮助:我从这段youtube视频https://www.youtube.com/watch?v=x8O59GtatH8中获取了代码,并对其进行了修改(刚刚删除了listox),完整代码为5.35
我可能误解了一些非常基本的东西。我猜想组合框的声明。
Sub prova_stessa_scheda()
row_review = 1
Dim TheSheet As Worksheet
Set TheSheet = Sheets("Listino_prezzi")
Do
DoEvents
row_review = row_revieew + 1
item_in_review = TheSheet.Range("A" & row_review)
If Len(item_in_review) > 0 Then ComboProva_Change.AddItem (item_in_review) 'this is the command that gives the error
Loop Until item_in_review = ""
MsgBox "Done!"
End Sub
我希望,当宏被触发时,组合框会填充写入列“ A”的单元格中的值,而不是错误424。
答案 0 :(得分:0)
如果将代码放入放置组合框的工作表的“工作表”模块中,则VBA假定您要访问该工作表的元素CombProva
(这是在视频中完成的操作,仅名称不同。)
但是,如果将代码放入常规模块中,则VBA不知道CombProva
是什么。您必须告诉VBA您要从特定工作表访问它。有几种方法可以做到:
(1)使用
With ThisWorkbook.Sheets("Listino_prezzi")
.ComboProva.AddItem (item_in_review)
End With
请注意,以下代码将引发编译器错误。这是因为TheSheet
的类型为Worksheet
,因此它可以是任何工作表,并且工作表中没有任何名为ComboProva
的东西。
Dim TheSheet As Worksheet
Set TheSheet = Sheets("Listino_prezzi")
With TheSheet
.ComboProva.AddItem (item_in_review) ' <-- Compiler error
End With
(2)您还可以通过其 CodeName 访问工作表。如果您观看视频:工作表本身已重命名为Admin Site
,但CodeName仍为Sheet1
(只能在“属性”窗口的VBA编辑器中更改CodeName)。所以你可以写
With Sheet1
.ComboProva.AddItem (item_in_review)
End With
(3)您可以从工作表的Shapes
集合中按名称访问组合框(基本上,放在工作表上但不在单元格内的所有内容都是{{ 1}})。但是,在处理Shape
-控件时,这有点难看。
ActiveX