当基于用户窗体选择单元格时会出现此问题,该用户窗体由分配给工作表上的窗体控件(按钮)的宏调用。
选择工作表和单元格后,数据不会输入到选定的单元格中(最初),并且当选择不同的单元格(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/