Вместо того, чтобы использовать фактическое пространство рабочего листа для этой задачи, вы можете просто создать пользовательскую форму.
Создание пользовательской формы
- В VBE щелкните правой кнопкой мыши свой проект> Вставить> Форма пользователя
- Добавьте 3 текстовых поля для представления столбцов данных и добавьте метки
- В моем примере я добавил 4-е текстовое поле, чтобы указать номер строки. Вы можете использовать это текстовое поле, чтобы изменить строку #, не нажимая на лист при желании
- Добавьте две командные кнопки, одна из которых будет обновлять лист в соответствии с любым текстом, который вы внесли, а другая - выйти из формы.
- Назовите объекты чем-то значимым
- Я назвал форму пользователя
ufDataViewer
- Это можно сделать в окне просмотра свойств в
(Name)
![enter image description here](https://i.stack.imgur.com/AhzHC.png)
- Назовите кнопку Обновить
btnUpdate
- Назовите кнопку Отмена на
btnCancel
- Назовите текстовое поле ID на
tbID
- Назовите поле № строки в
tbRow
- Назовите текстовое поле на английском языке
tbEnglish
- И, наконец, назовите окончательное текстовое поле
tbJapanese
Пример созданной пользовательской формы:
![enter image description here](https://i.stack.imgur.com/dKXpw.png)
Обнаружение изменений выбора
В модуле кода рабочего листа вы можете использовать событие Worksheet_SelectionChange()
для автоматического обновления текста в вашей пользовательской форме. В VBE выберите конкретный лист, который вы хотите наблюдать за этими изменениями, и добавьте следующий блок кода:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
With ufDataViewer
.tbID.Value = Me.Cells(Target.Row, "A").Value
.tbRow.Value = Target.Row
.tbEnglish.Value = Me.Cells(Target.Row, "B").Value
.tbJapanese.Value = Me.Cells(Target.Row, "C").Value
End With
End Sub
Вышеупомянутый блок автоматически обновляет вашу пользовательскую форму данными, которые вы выбираете вручную, щелкая внутри строки.
Способ отображения формы
Нам нужно добавить код, чтобы показать форму пользователя. У нас есть несколько способов справиться с этим, и вы можете смешивать и сочетать любые из этих методов (Вам не нужно делать все это!) .
Показать пользовательскую форму при открытии рабочей книги
В обозревателе проектов VBE дважды щелкните ThisWorkbook
и добавьте следующий блок кода:
Private Sub Workbook_Open()
ufDataViewer.Show vbModeless
End Sub
Для следующих двух методов вам сначала необходимо создать процедуру в общедоступном модуле, которая будет показывать форму пользователя. В проводнике проекта щелкните правой кнопкой мыши свой проект и вставьте Module
. Добавьте этот код к этому модулю:
Sub showUserform()
ufDataViewer.Show vbModeless
End Sub
Использовать диалоговое окно макроса
Вы можете просто запустить вышеуказанный код, одновременно нажимая клавиши Alt F8 и выбирая showUserform
и нажимая Выполнить .
Показ пользовательской формы с помощью кнопки команды рабочего листа
Добавьте командную кнопку, перейдя к рабочему листу и перейдя к Developer Tab
(Если это не видно, вот шаги для его активации .)
Когда вы видите эту вкладку, нажмите Вставить и под Элементы управления формой , нажмите Button
.
Теперь вы можете перетащить кнопку на рабочий лист. Вы можете выбрать местоположение и размер этого элемента управления. После того, как вы закончите рисовать свою кнопку, появится диалоговое окно. Выберите название кода, который вы только что добавили: showUserForm
Кодирование пользовательской формы
Щелкните правой кнопкой мыши свою пользовательскую форму в Project Explorer и выберите View Code
. Здесь мы собираемся назначить различные функции для вашей пользовательской формы. Во-первых, давайте добавим переменную области модуля, которая будет ссылаться на ваш рабочий лист. Вверху модуля кода введите следующие две строки:
Option Explicit
Private ws As Worksheet
Далее мы добавим некоторый код, который будет определять, что произойдет при инициализации вашей формы. Во-первых, мы хотим установить переменную ws
, которая была только что создана выше, на лист, на котором вы будете использовать эту форму. Поскольку вы не указали имя листа в своем вопросе, мы будем использовать имя листа Sheet1
(не стесняйтесь обновлять имя ws здесь).
Мы также хотим продолжить и автоматически заполнить текстовые поля в пользовательской форме. Это будет выглядеть поразительно похоже на код, который мы ввели в модуле кода Sheet выше.
Private Sub UserForm_Initialize()
Dim Target As Range
Set ws = ThisWorkbook.Worksheets("Sheet1")
ws.Activate
Set Target = ActiveCell
Me.tbID.Value = ws.Cells(Target.Row, "A").Value
Me.tbRow.Value = Target.Row
Me.tbEnglish.Value = ws.Cells(Target.Row, "B").Value
Me.tbJapanese.Value = ws.Cells(Target.Row, "C").Value
End Sub
Обнаружение изменений в текстовом поле tbRow
для автоматического заполнения пользовательской формы при изменении этого значения:
Private Sub tbRow_Change()
If IsNumeric(tbRow.Value) Then
Me.tbID.Value = ws.Cells(tbRow.Value, "A").Value
Me.tbEnglish.Value = ws.Cells(tbRow.Value, "B").Value
Me.tbJapanese.Value = ws.Cells(tbRow.Value, "C").Value
ws.Cells(tbRow.Value, 1).Select 'Optional if you want to see row's raw data
End If
End Sub
Фу, так что теперь мы разрешили вашей пользовательской форме автоматически заполняться либо путем изменения выбора, либо путем обновления текстового поля в самой пользовательской форме. Далее нам нужен метод для изменения значений ячеек на вашем листе. Мы сделаем это с помощью вашей кнопки «Обновить». Вот код:
Private Sub btnUpdate_Click()
If IsNumeric(tbRow.Value) Then
ws.Cells(tbRow.Value, 1) = tbID.Value
ws.Cells(tbRow.Value, 2) = tbEnglish.Value
ws.Cells(tbRow.Value, 3) = tbJapanese.Value
Else
MsgBox "Please enter a numeric value in the Row # textbox or reselect the row!"
End If
End Sub
Наконец, когда нужен способ закрыть форму, как только вы закончите. Мы можем использовать событие click для вашей кнопки отмены, чтобы сделать это. Вот код этого события:
Private Sub btnCancel_Click()
Unload Me
End Sub
Предварительный просмотр
![enter image description here](https://i.stack.imgur.com/QBeKN.gif)