Worksheet.Activate事件的意外结果

时间:2014-03-15 20:56:46

标签: excel excel-vba vba

我在Windows 7上运行excel 2010。

以下宏执行您期望的操作,即(1)插入新工作表,(2)添加矩形,(3)激活单元格A1。

Sub addSheetAndButton()

    Dim buttonSheet As Worksheet

    Set buttonSheet = ThisWorkbook.Sheets.Add

    buttonSheet.Shapes.AddShape(msoShapeRectangle, 100, 100, 100, 50).Select

    buttonSheet.Range("A1").Activate

End Sub

我的问题是当我尝试使用Worksheet.Activate事件运行它时,例如:

Private Sub Worksheet_Activate()
    Call addSheetAndButton
End Sub

这次(1)未插入新工作表,(2)矩形被添加到与激活事件关联的工作表中,(3)单元格A1未激活,(4)矩形保持激活状态。

我做错了什么?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

非常感谢您尝试这一点。对不起,我花了一段时间才回来,但我一直在试验这个。我发现当我退出并重新启动Excel时,addSheetAndButton宏在Worksheet.Activate事件下按预期工作。但是,我有一个不同的宏使用另一个Worksheet.Activate事件来更新一些图表。在似乎是随机的基础上,这会产生“运行时错误6” - 由于尝试将超出范围的值分配给变量而导致的溢出。

如果我绕过Worksheet.Activate事件/宏并手动运行图表更新宏,我从未遇到此错误。从“运行时错误6”重置VBA / Excel后,addSheetAndButton宏的行为与我在原始帖子中描述的完全相同。解决问题的唯一方法是退出并重新启动Excel。

我认为(希望)我已经将运行时错误的来源追溯到我的图表更新宏中的一行,在我从中选择而不是激活工作表之前从中读取数据 - 尽管我对结果感到惊讶。值得指出的是,一旦Excel进入“未按预期”状态,来自以下两行的屏幕消息就是前一个活动工作表的名称而不是“Sheet1”。

Worksheets(“Sheet1”).Activate
Msgbox ActiveSheet.Name 

同样,解决此问题的唯一明显方法是退出并重新启动Excel。

再次感谢您的帮助。