Динамическое заполнение Combobox содержанием столбца - ошибка времени 424 - PullRequest
0 голосов
/ 20 декабря 2018

Я очень плохо знаком с DBA, так что, возможно, это банальная ошибка, но я оглянулся и не нашел ничего, что могло бы мне помочь.Я пытаюсь заполнить комбинированный список динамически, используя содержимое столбца (столбец «А» в данном конкретном случае), используя макрос, связанный с кнопкой.Если проанализированные ячейки пусты, все идет гладко и появляется сообщение «Готово!»появляется, но если в ячейках есть какие-либо данные, я получаю ошибку «Требуется доступ к объекту 424».Я не знаю, поможет ли это: я взял код из этого видео на YouTube https://www.youtube.com/watch?v=x8O59GtatH8 и адаптировал его (только что удалил листок), полный код на 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

Я ожидал, что при запуске макроса комбинированный список заполняется значением, записанным в ячейках столбца «А», вместо этого я получил ошибку 424.

1 Ответ

0 голосов
/ 20 декабря 2018

Если вы поместите свой код в модуль «Рабочий лист» листа, на котором размещен комбинированный список, 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...