Первая публикация здесь на 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=
синим цветом и выдает ошибку компиляции.
Код отлично работает в шаблонной книге с веб-сайта, но я просто не могу понять, почему он не работает в моей.
Большое вам спасибо за вашу помощь, я пытаюсь решить эту проблему часами!