通过表单中的代码选择后,Excel 无法正确激活单元格

标签 excel userform vba

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

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

要重现问题,您需要:

  • 包含 2 个工作表的工作簿(我的工作簿分别命名为:Book1、Sheet1 和 Sheet2)
  • Sheet1 上的表单控件按钮
  • 带有命令按钮的用户表单(UserForm1 和 CommandButton1)
  • 模块(模块1)

模块1应包含以下内容:

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 上的表单控件按钮。

当单击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 32 位。
我已升级到 Excel 2016,但问题仍然存在。

最佳答案

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

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

关于通过表单中的代码选择后,Excel 无法正确激活单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34365736/

相关文章:

Excel公式获取最后两个逗号之间的文本

java - 在合并两个 Excel 文件期间操作单元格

java - 在android项目中使用apache poi写入excel文件

excel - VBA-检查是否加载了特定的用户表单

vba - 获取 Google 搜索的 URL 结果时出错。

vba - Excel VBA : Selecting Different Ranges in Loop

vba - 如何使用 Google Translate API 翻译 Microsoft Excel 中的文本

vba - 将文本文件输入Excel表格

excel - 如何在使用 Excel VBA 搜索后清除搜索条件和单词

excel - VBA POST 格式问题