用列内容动态填充组合框-时间错误424

时间:2018-12-20 08:27:55

标签: excel vba

我对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。

1 个答案:

答案 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