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

时间:2015-01-14 21:27:59

标签: excel vba excel-vba excel-2013

我有一个带有几个按钮的对话框,可以启动宏来激活和更改为不同的工作表。

我遇到的问题是在我点击按钮后,宏会激活新工作表并且我看到它。但是当我去删除数据,添加数据或尝试删除一行“没有任何反应”时,屏幕上的数据仍然存在。如果我回到上一张表格,我打算删除的单元格和行将在该表格中删除。它非常奇怪,从未见过这样的东西。看来我的宏代码是做足以实际更改为新工作表的注释。如果我单击其他工作表标签以更改它,我没有这个问题。或者,如果我单击对话框按钮转到新工作表并快速执行ctrl-pgDown和Ctrl-PgUp以从另一个选项卡更改并返回,这似乎可以解决问题。

这是我用来尝试更改所需标签的宏中的代码。

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

感谢您的任何帮助或建议

更新:

这是我用来调用对话框的代码。我在另一个工作表上有一个形状,分配给此宏以打开对话框

Sub ShowMainMenu()

With UserForm1
  .Show
End With
End Sub

此外,没有其他代码可以对新工作表进行编辑。我的按钮单击只是切换到另一张纸,当我尝试手动编辑时,它们实际上是在上一张纸上完成的,而不是我当前正在查看的纸张。因此,我所做的任何事情,粗体文本,删除文本,删除行等都没有在我正在查看的当前工作表上完成,但是当我返回到上一个工作表时所做的更改。我在Excel 2013上,我已经在2个单独的文件中重现了这个问题,但我将尝试使用不同的计算机和旧版本的Excel。我的情况截图如下。

Screenshot of Code

更新2: 我在Xls 2007的第二台计算机上运行这个xlsm文件并没有遇到问题。所以我在第三台也有Excel 2013的计算机上运行宏,它遇到了同样的问题。所以它不是特定于计算机的,并且在XLS 2013中似乎是一个问题,但在XLS 2007中似乎没有。我将尝试找到一台带有Excel 2010的计算机进行测试,但有关此代码的一些问题导致2013年出现问题,但不是旧版本的Excel。

4 个答案:

答案 0 :(得分:1)

当您运行VBA代码时,如果您没有定义工作表,则默认使用ActiveSheet。如果要在特定工作表上执行对象/方法,则应始终指定!您可以采取以下两种方式之一:

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

或者您可以将Sheet名称传递给变量并将其用于更短的代码

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

答案 1 :(得分:0)

尝试更改代码中的行序列。我有类似的情况,事实证明我在将数据从sheet1复制到sheet2的命令之间插入了“删除工作表”代码。当我完成复制表单后删除行(命令)时,一切都开始正常工作。许多命令在执行时激活一张纸,这会立即停用另一张纸。因此,如果你在某处使用“ActiveSheet”sommand,它可能被错误地理解 - 命令可能不会在你想要的工作表上执行。

答案 2 :(得分:0)

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

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")

答案 3 :(得分:0)

我也遇到了同样的问题,也是Excel 2013.所以即使该帖子超过9个月无效,我想分享我的解决方案以防有人通过谷歌搜索到达这里。

解决方案非常简单。使用以下命令调用userform:

$http.get($rootScope.baseurl + 'api/hotels/', {
        params: {
            page_size: $scope.page_size,
            page: $scope.page,
            goingTo: goingTo,
            ordering: $scope.sortBy,
            price__lte: $scope.max_price_filter,
            price__gte: $scope.min_price_filter,
            star: $scope.filter.star,
            discount: 0

        }