如何“捕捉”到RefEdit选择的顶部

问题描述 投票:0回答:1

我正在使用VBA在Excel 2016中开发用户窗体。

我在userform上有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(RefEditi)规范相关联的工作表属性?如果是这样,那么捕获与RefEdit选择相关联的活动工作表的好方法是什么?

===============================================

我尝试使用此代码捕获活动的工作簿/表,但它使userform消失:

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

用户形式的问题是否与背景活动允许问题相关?

excel vba events userform
1个回答
0
投票

资格的例子,包括用户形式的无模式调用:

public ws as worksheet

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

重要的是要注意这是在userform之前调用的,因为当useform是焦点时没有“活动”表。


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
© www.soinside.com 2019 - 2024. All rights reserved.