Привязка текстового поля из коллекции элементов управления ActiveX к ячейке в Excel с помощью свойства LinkedCell или кода VBA.
Текстовые поля ActiveX часто используются в Excel для создания интерактивных форм, панелей ввода данных и пользовательских интерфейсов прямо на рабочем листе. В процессе автоматизации может потребоваться привязка текстового поля к какой-либо ячейке для получения следующего эффекта: всё, что пользователь вводит в поле, автоматически сохраняется в указанной ячейке, и наоборот.
Привязка через свойство LinkedCell
Самый простой способ привязки текстового поля ActiveX к ячейке в Excel заключается в использовании свойства текстового поля LinkedCell. Он обеспечивает двустороннюю синхронизацию между полем и ячейкой без написания кода.
- Включите режим конструктора
На вкладке «Разработчик» (Developer) нажмите кнопку «Режим конструктора» (Design Mode). - Добавьте поле
НажмитеВставить -> Элементы ActiveX -> Текстовое поле (TextBox). Нарисуйте поле на листе. - Откройте свойства
Убедитесь, что поле выделено, и нажмите кнопку «Свойства» (Properties) на той же вкладке «Разработчик» (или щёлкните правой кнопкой мыши по текстовому полю и выберите «Свойства»). - Найдите параметр LinkedCell
В открывшемся окне свойств найдите строкуLinkedCell. - Введите адрес ячейки
НапротивLinkedCellсправа напишите адрес, например:A1(если привязка идёт к ячейке на том же листе),МойЛист!A1или'Мой Лист'!A1(если привязка идёт к ячейке на другом листе). - Выйдите из режима конструктора
Нажмите «Режим конструктора», чтобы отключить его.
Теперь текст, введённый в поле, мгновенно появляется в ячейке A1, а изменение значения в A1 обновляет содержимое текстового поля.
Примечания:
• Имя листа в адресе ячейки — это имя на ярлычке.
• Если имя листа содержит пробелы, заключите его в апострофы (‘Новый Лист’).
• Если в режиме конструктора вы вставите курсор в поле формул, выйти из процесса редактирования поля формул как обычно не получится. Для выхода нажмите клавишу «Esc».
Привязка с помощью VBA Excel
Код VBA Excel можно использовать для привязки текстового поля ActiveX к ячейке, чтобы связь была односторонней: только ввод данных в поле перезаписывает значение ячейки или, наоборот, только ввод данных в ячейку меняет значение текстового поля.
Запись значения поля в ячейку:
|
1 2 3 4 |
Private Sub TextBox1_Change() ' При изменении текста в поле записываем значение в ячейку A1 Range("A1").Value = Me.TextBox1.Value End Sub |
Запись значения ячейки в поле:
|
1 2 3 4 5 6 |
Private Sub Worksheet_Change(ByVal Target As Range) ' При изменении ячейки A1 обновляем текстовое поле If Not Intersect(Target, Range("A1")) Is Nothing Then Me.TextBox1.Value = Target.Value End If End Sub |
Эти процедуры размещаются в модуле листа.
Если разместить в модуле листа обе процедуры — это будет соответствовать использованию свойства LinkedCell.