当基于用户窗体选择单元格时会出现此问题,该用户窗体由分配给工作表上的表单控件(按钮)的宏调用。
选择工作表和单元格后,数据不会输入到所选单元格中(最初),并且当选择不同的单元格(Tab、Return、箭头键)时数据会消失,鼠标单击不同的单元格会停止效果。
要重现您需要的问题:
模块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
使用此代码。我认为它有效。
Private Sub CommandButton1_Click()
Sheets("Sheet2").Select
ActiveSheet.Range("E5").Select
Unload Me
Application.ScreenUpdating = False
End Sub