Как «привязаться» к началу выделения RefEdit - PullRequest
0 голосов
/ 27 декабря 2018

Я разрабатываю пользовательскую форму в 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

Связана ли проблема исчезновения пользовательской формы с разрешением вопроса о фоновых действиях?

1 Ответ

0 голосов
/ 27 декабря 2018

пример квалификаций, включая немодальный вызов для пользовательской формы:

public ws as worksheet

sub launch_userform()
    set ws = activesheet
    userform1.show vbmodeless
end sub

важно отметить, что он вызывается перед пользовательской формой, так как нет «активного» листа, когда форма использования находится в фокусе.


edit1: Дадим более сильный пример ...

в модуле с именем "moo":

Option Explicit

Public ws As Worksheet

Sub fdsa()
    Set ws = ActiveSheet
    Application.Run ("cat.mouse")
End Sub

в модуле "cat":

Option Explicit

Private Sub mouse()
    ws.Cells(1, 1).Value = 2
End Sub
...