Sheet.Activate更改工作表,但继续编辑上一页的数据

我有一个对话框中的几个button,启动macros激活和更改为不同的工作表。

我遇到的问题是我点击button后,macros激活新的工作表,我看到它。 但是,当我去删除数据,添加数据或尝试删除一行“没有任何反应”屏幕上的数据仍然存在。 如果我回到上一张纸上,我想要删除的单元格和行在该表中被删除。 这是非常奇怪的,从来没有见过这样的事情。 看来,我的macros代码是注意做足够的实际改变到新的工作表。 我没有这个问题,如果我点击不同的工作表选项卡来改变它。 或者,如果我点击对话框button去新的工作表,并快速做一个ctrl-pgDown和Ctrl-PgUp从另一个选项卡更改,似乎解决了问题。

这是我正在使用的macros中的代码,尝试更改为所需的选项卡。

Private Sub Report1Button_Click() On Error GoTo Handler Sheets("Report1").Activate If StayOpenBox.Value = False Then Unload MainMenu End If Exit Sub Handler: MsgBox "Sheet 'Report1' not found or renamed" End Sub 

感谢您的任何帮助或build议

更新:

这里是我用来调用对话框的代码。 在另一个分配给这个macros的表单上有一个形状来打开对话框

 Sub ShowMainMenu() With UserForm1 .Show End With End Sub 

也没有进一步的代码来编辑新的工作表。 我的button点击只是切换到另一张表,当我尝试手动进行编辑时,他们实际上是在前面的表单上,而不是我目前正在查看的。 所以我所做的任何事情,粗体文本,删除文本,删除行等等,都不是在我正在查看的当前工作表上完成的,但是当我返回到上一个工作表时,在那里进行了更改。 我在Excel 2013中,我已经在2个单独的文件中再现了这个问题,但是我会尝试在不同的计算机上和旧版本的Excel中。 我的情况截图如下。

代码的屏幕截图

更新2:我用xls 2007在第二台计算机上运行这个xlsm文件,并没有问题。 所以我在第三台也有Excel 2013的计算机上运行了这个macros,并且遇到了同样的问题。 所以这不是计算机的具体情况,似乎是在XLS 2013年,但在XLS 2007年的问题。我会尝试find一台计算机与Excel 2010以testing,但有关此代码是在2013年导致问题,但不是老版本的Excel。

当您运行VBA代码时,如果您未定义工作表,则将默认使用ActiveSheet 。 当你想要在特定工作表上执行对象/方法时,应该始终指定! 你可以通过以下两种方法

 Sheets("Report1").[Object].[Method] 'or Sheets("Report1").[Method] 

或者您可以将Sheet名称传递给一个variables并将其用于较短的代码

 Dim Report1 As Worksheet Set Report1 = Sheets("Report1") Report1.[Object].[Method] 'or Report1.[Method] 

尝试改变代码中的行的顺序。 我有类似的情况,事实certificate,我已经在从sheet1到sheet2复制数据的命令之间插入“删除表”代码。 当我在完成复印纸张后放置删除线(命令)时,所有东西都开始正常工作。 许多命令在执行时激活一张纸张,并立即取消激活另一张纸张。 所以,如果你使用了“ActiveSheet”,可能会被错误地理解 – 命令可能不是在你的意思表单上执行的。

只需使用您想要操作的范围的完整地址,例如,而不是:

 Sheets("mySheet").Activate Range("A1:B10").Cut Sheets("myOtherSheet").Activate Range("A1:B10").Paste 

使用:

 Sheets("mySheet").Range("A1:A10").Cut Destination:=Sheets("myOtherSheet").Range("A1:B10") 

我也遇到了同样的问题,在Excel 2013中也是这样。所以即使线程已经超过9个月的不活动,我也想分享我的解决scheme,以防有人通过Googlesearch来到这里。

解决scheme非常简单。 用以下方式调用用户窗体:

 UserForm1.show vbModeless