如何“对齐”到RefEdit选择的顶部

时间:2018-12-27 19:02:04

标签: excel vba events userform

我正在使用VBA在Excel 2016中开发用户表单。

我在用户窗体上有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 :(得分:0)

资格示例,包括对用户表单的无模式调用:

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