У меня есть набор элементов управления ActiveX и переходниками, которые соответствуют друг другу, как это:Изменение имени в ListBox Excel ActiveX
- типов пользователей в ActiveX TextBox,
- TextBox_Click запускает выполнение 3 подлодки.
- Первая субстанция обновляет значение именованного диапазона на листе; на основе этого значения обновленного таблица создается в Excel, используя функцию смещения
- Второй суб копирует диапазон таблицы обновляются в 3 и paste.values в диапазон на листе (для устранения формул)
Вот где он разрушается.
- Когда я устанавливаю лист вверх, я создаю один ListBox (ListBox1). Третий из трех подписчиков, упомянутых в № 2 выше, показывает, существует ли в листе ActiveX ListBox1. Если нет, намерение заключается в том, что код будет определять то, что вызывается ListBox (LB1 или LB2 или LB2 и т. Д.), Изменяет имя на «ListBox1» и вставляет таблицу из № 4 выше в ListBox1. Затем команда ListBox1_Click может запускать уникальный набор кода для выполнения.
Сейчас я просто проверяю переключение между именами ListBox1 и ListBox2.
Идея состоит в том, что, например, пользователь вводит в TextBox1, ListBox1 обновляется при каждом нажатии клавиши. Поэтому введите «g», а в списке отобразится 20 имен, начинающихся с первого «g» в листе базы данных. Затем введите «ge», и в списке показано 20 имен, начинающихся с первого «ge» в листе базы данных и т. Д. И т. Д. Пользователь нажимает на имя, а ListBox1_click делает что-то уникальное. Если пользователь вводил текст в TextBox2, они увидели бы разные данные в ListBox (которые я бы хотел переименовать в ListBox2), и если они нажмут уникальный набор кода, ListBox2_Click.
Проблема в №5 - это ошибка «Я получаю ошибку« Объект не поддерживает это свойство или метод »в первый раз, когда я пытаюсь выполнить. Второй раз это нормально. Если я сделаю что-то еще на листе и вернусь к нему, я снова получу ошибку.
Вот код # 5, который находится в модуле:
Sub PutListInListBox()
Dim OBJ As Object
On Error Resume Next
Set OBJ = ActiveSheet.OLEObjects("ListBox1")
On Error GoTo 0
If OBJ Is Nothing Then
ActiveSheet.ListBox2.Name = "ListBox1"
End If
ActiveSheet.ListBox1.Clear
ActiveSheet.ListBox1.List = Sheets("Search Criteria Control").Range("G1:G21").Value
End Sub
Я понятия не имею, что я делаю не так, и любая помощь приветствуется.
Надеюсь, я проясню это.
UPATED КОД У меня есть куча ActiveX Lables и текстовых полей, так что я использовал первую форму вы предложили для поиска конкретных случаев имен. Я читал об этом и не вижу, что у меня здесь не так. После ввода в TB5 LB не обновляется. Я перехожу обратно в режим разработки и вижу, что имя по-прежнему является ListBox2.
Любые идеи?
Private Sub TextBox5_Change()
Call UpdateValues(TextBox5.Value)
Call CopyTable
Dim OLEOBJ As OLEObject
For Each OLEOBJ In ActiveSheet.OLEObjects
Select Case OLEOBJ.Name
Case "ListBox1", "ListBox2", "ListBox3"
OLEOBJ.Name = "ListBox1"
OLEOBJ.ListFillRange = Sheets("Search Criteria Control").Range("G1:G21").Address(external:=True)
End Select
Exit For
Next
End Sub
Можете ли вы показать остальные коды? – Davesexcel
Конечно, добавлено выше. Дайте мне знать, если вас больше интересует. Спасибо, что заинтересованы в этом. – mchac
Примечание. Я просто работаю с двумя ТБ и двумя LB, пока я тестирую, как он может работать. – mchac