Если вы поместите свой код в модуль «Рабочий лист» листа, на котором размещен комбинированный список, 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
(CodeName можно изменить только в редакторе VBA в окне свойств).Таким образом, вы можете написать
With Sheet1
.ComboProva.AddItem (item_in_review)
End With
(3) Вы можете получить доступ к комбинированному списку по имени из коллекции Shapes
листа (в основном все, что помещено на лист, но невнутри клетки находится Shape
).Однако, поскольку вы имеете дело с ActiveX
-контролями, это немного уродливо.
Dim sh as Shape
Set sh = TheSheet.Shapes("ComboProva")
With sh.DrawingObject.Object
Call .AddItem("Variante x")
End With