Ошибка компиляции с кодом Excel VBA UserForm с SelectionChange - PullRequest
0 голосов
/ 15 мая 2019

Первая публикация здесь на stackoverflow (так что я надеюсь, что я следую всем правилам). Я просмотрел очень много постов здесь (и Google в целом), чтобы найти ответ, но ничего, что я пробовал, не сработало.

Фон на моем файле: У меня есть лист (sheet1) со списком проектов (для примера рассмотрим Apple, Banana, Orange и т. Д.). Они находятся в столбце A (точнее A2: A77).

Теперь на Листе 2 мне бы хотелось, чтобы при нажатии на определенные ячейки всплывала пользовательская форма (скажем, A2: A50 на листе 2). Когда появляется пользовательская форма, появляется один выпадающий список с доступным для поиска списком (комбинированный список) и одна кнопка (в основном, где вы «принимаете» выбор, который затем добавляется в выбранную ячейку). Я нашел шаблон на этом сайте (http://boisgontierjacques.free.fr/pages_site/listes_cascade.htm#ListeIntuitiveForm), который делает именно то, что я хочу. Сайт на французском языке, но в основном это ссылка на шаблон под названием "Recherche Intuitive TextBox ListBox Form".

Как уже упоминалось выше, я скопировал код в точности так, как он есть из шаблона. Я удостоверился, что названия одинаковы, назвали диапазон и т. Д., Но ничего не получалось. Я попытался изменить часть кодов (установка диапазона, настройка переменной и т. Д., Но всегда получаю ошибку).

Вот код, который у меня есть на Листе 2 (где вы нажимаете на ячейки для всплывающей пользовательской формы):

Private Sub WorkSheet_SelectionChange(ByVal Target as Range)
If Not Intersect ([A2:A50]), Target) Is Nothing And Target.Count = 1 Then
    UserForm4.Left = Target.Left + 150
    UserForm4.Top = Target.Top + 90 - Cells(ActiveWindow.ScrollRow, 1).Top
    UserForm.Show
End If
End Sub

Это код, который у меня есть для пользовательской формы (я уже дважды проверил именование объектов, они одинаковы):

Dim a()
Private Sub UserForm_Initialize()
  Set a = [Liste]
  Me.ComboBox1.List = a
End Sub

Private Sub ComboBox1_Change()
  Set d1 = CreateObject("Scripting.Dictionary")
  tmp = UCase(Me.ComboBox1) & "*"
  For Each c In a
    If UCase(c) Like tmp Then d1(c) = ""
  Next c
  Me.ComboBox1.List = d1.keys
  Me.ComboBox1.DropDown
End Sub

Private Sub CommandButton1_Click()
  ActiveCell = Me.ComboBox1
  Unload Me
End Sub

Private Sub ComboBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
  If KeyCode = 13 Then ActiveCell = Me.ComboBox1: Unload Me
End Sub

Шаблон, упомянутый выше, включает в себя код, пользовательскую форму, список и т. Д., Но по какой-то причине, когда я пытаюсь повторить его, он выдает мне ошибки. Это началось с ошибки 424 (я справился с этим), затем с ошибкой 91 (также справился с этим), но теперь выдает ошибку «Ошибка компиляции: невозможно назначить массиву».

Когда я пытаюсь отладить (F8), он выделяет эту часть кода:

Private Sub UserForm_Initialize() - выделено желтым цветом

a = [Liste].Value (это оригинальная версия и выдает ошибку 424;

, когда я изменяю его на Set a = [Liste] (одна из рекомендаций, которые я нашел в Интернете), он выделяет a= синим цветом и выдает ошибку компиляции.

Код отлично работает в шаблонной книге с веб-сайта, но я просто не могу понять, почему он не работает в моей.

Большое вам спасибо за вашу помощь, я пытаюсь решить эту проблему часами!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...