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