Excel在表单中的代码选择后未正确激活单元格

当基于UserForm选择单元格时会出现问题,该用户窗体由分配给工作表上的窗体控件(按钮)的宏调用 .

选择工作表和单元格后,数据不会在所选单元格中输入(最初),并且在选择不同单元格时会消失(Tab,Return,箭头键),鼠标在不同单元格中单击会停止效果 .

要重现您需要的问题:

  • 一张2张工作簿(我的名字分别为:Book1,Sheet1和Sheet2)

  • Sheet1上的表单控件按钮

  • 带有命令按钮的用户表单(UserForm1和CommandButton1)

  • A模块(Module1)

Module1应包含以下内容:

Sub ShowForm()
    UserForm1.Show
End Sub

UserForm1应包含以下内容:

Private Sub CommandButton1_Click()
    With ThisWorkbook.Worksheets(2)
        .Activate
        .Cells(5, 5).Select
    End With
    Unload Me
End Sub

将ShowForm宏指定给sheet1上的Form控件按钮 .

单击sheet1上的按钮时,会发生以下情况 . 带按钮的表单将显示 . 如果单击表单上的按钮,则激活Sheet2并选择单元格E5并卸载表单 .

如果此时您尝试输入似乎被选中的sheet2单元格E5,您可能会注意到文本出现在sheet1上最后选择的单元格中,并在使用Tab键,Enter键,箭头键选择另一个单元格时消失(再次鼠标单击以选择另一个单元格,而光标在前一个单元格中停止效果) . 此外,如果您随后在Sheet2上选择不同的单元格,则在选择其他单元格时文本将消失 . 此效果将持续到手动选择不同的纸张 . 您会注意到您在sheet2上输入的数据实际上是在sheet1中 .

如果从宏列表中运行ShowForm宏,您可以在功能区上的开发人员选项卡上的宏按钮下找到该宏,则不会出现上述问题 .

此外,如果您在Sheet1上放置ActiveX CommandButton并将下面的代码添加到按钮,也没有问题 .

Private Sub CommandButton1_Click()
    call ShowForm
End Sub

为什么代码适用于ActiveX控件,而不适用于Form控件?

我在Windows 8.1 64位上使用Excel 2013 32bit .
我已升级到Excel 2016,问题仍然存在 .

回答(1)

2 years ago

我不知道问题是否已解决,但您可以尝试 screenupdating=False

Private Sub CommandButton1_Click()
    With ThisWorkbook.Worksheets(2)
        .Activate
        .Cells(5, 5).Select
    End With
    Unload Me
    Application.ScreenUpdating = False
End Sub