Не удается получить доступ к ComboBox в VBA - PullRequest
0 голосов
/ 13 апреля 2020

Я создал комбинированный список в листе Excel и назвал его «GraphChoice». Он находится на листе с именем «Выбрать график»

. В VBA я пытаюсь заполнить его данными, используя этот код:

Sub Choose_graph_and_date()

Dim Graph As Worksheet
Dim FormInfo As Worksheet
Set Graph = Worksheets("Choose Graph")
Set FormInfo = Worksheets("Forminfo")
Graph.Activate

Graph.GraphChoice.List = FormInfo.Range("A1:A3").Value

End Sub

Я получаю сообщение об ошибке «Не могу найти метод» , Я также пытался.

GraphChoice.List = FormInfo.Range("A1:A3").Value

Затем я получаю ошибку 424. Требуется объект.

Код находится в модуле ThisWorkbook, так как я хочу, чтобы он загружался каждый раз, когда вы открываете книгу.

Кто-нибудь знает, что не так?

Ответы [ 2 ]

3 голосов
/ 13 апреля 2020

Для элемента управления формы вы можете использовать коллекцию DropDowns ...

Graph.DropDowns("GraphChoice").List = FormInfo.Range("A1:A3").Value

Или вы можете использовать коллекцию Shapes ...

Graph.Shapes("GraphChoice").ControlFormat.List = FormInfo.Range("A1:A3").Value

Для элемента управления ActiveX , вы можете ссылаться на него с помощью коллекции OleObjects ...

Graph.OLEObjects("GraphChoice").Object.List = FormInfo.Range("A1:A3").Value

Или вы можете использовать коллекцию Shapes ...

Graph.Shapes("GraphChoice").OLEFormat.Object.Object.List = FormInfo.Range("A1:A3").Value

На самом деле, вы также можете обратиться к ней используя кодовое имя для вашего листа. Так, например, предположим, что кодовое имя для вашего листа - Sheet2, вы можете сделать следующее ...

Sheet2.GraphChoice.List = FormInfo.Range("A1:A3").Value
0 голосов
/ 13 апреля 2020

Насколько я понимаю, эта проблема существует, поскольку элементы управления ActiveX имеют другой тип отношения (следовательно, ссылки), чем другие общие объекты (например, ячейки), к листам. Вы можете решить свою проблему, используя:

Sheets("Choose Graph").GraphChoice.List = FormInfo.Range("A1:A3").Value

или изменив свойства объекта листа с графиком, например, myGraphSheet , а затем используя:

 myGraphSheet.GraphChoice.List = FormInfo.Range("A1:A3").Value

Кроме того, если вы хотите, чтобы ComboBox заполнялся каждый раз, когда вы открываете его, вам нужно поместить свой код в ThisWorkbook-Module (как вы это сделали) и в подпрограмму со следующим именем Workbook_Open () :

Sub Workbook_Open()
   'code executed when opened
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...