Я разрабатываю пользовательскую форму в Excel 2016 с использованием VBA.
У меня есть 2 элемента управления RefEdit в пользовательской форме.Как только пользователь делает выбор в одном из элементов управления RefEdit, а затем вводит другой элемент управления RefEdit, чтобы сделать следующий выбор, я бы хотел, чтобы электронная таблица «привязывалась» к вершине выделения, указанного в другом RefEdit (это делаетбольшая разница в удобстве использования при длинном выборе).
Примечание: я предпочитаю НЕ менять активную ячейку на рабочем листе при привязке к вершине.
Ниже приведен рабочий код с некоторымииз подходов, которые я попробовал (все, кроме одного, закомментированы).Подход Application.Goto, похоже, является именно тем, что я ищу, однако в настоящее время он работает неправильно.
Private Sub RefEdit1_Enter()
If Len(Trim(RefEdit1.value)) = 0 And Len(Trim(RefEdit2.value)) > 0 Then
Application.Goto Reference:=Range(RefEdit2).Offset(0, 1), Scroll:=True
'Range(RefEdit2).Offset(0, 1).Select
'Range(RefEdit2).Cells(1, 1).Select
'SendKeys "{ESC}"
'Application.CutCopyMode = False
End If
End Sub
Private Sub RefEdit2_Enter()
If Len(Trim(RefEdit2.value)) = 0 And Len(Trim(RefEdit1.value)) > 0 Then
Application.Goto Reference:=Range(RefEdit1).Offset(0, 1), Scroll:=True
'Range(RefEdit1).Offset(0, 1).Select
'Range(RefEdit1).Cells(1, 1).Select
'SendKeys "{ESC}"
'Application.CutCopyMode = False
End If
End Sub
Этот код не создает никаких сообщений об ошибках, он просто не работает должным образом.Может быть, это связано с отсутствием свойства листа, связанного со спецификацией Range (RefEdit i )?Если это так, что будет хорошим способом захвата активной рабочей таблицы, связанной с выбором RefEdit?
====================================================
Я попытался захватить активную книгу / лист с помощью этого кода, но это сделало пользовательскую формуисчезнуть:
Private Sub RefEdit1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Set WBData = Application.ActiveWorkbook
Set WSData = Application.ActiveWorksheet
End Sub
Private Sub RefEdit2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Set WBData = Application.ActiveWorkbook
Set WSData = Application.ActiveWorksheet
End Sub
Связана ли проблема исчезновения пользовательской формы с разрешением вопроса о фоновых действиях?