2012-07-06 93 views
11

这个程序应该创建一个按钮,用户可以按下来激活不同的子。在我的在线搜索中,似乎应该在打开工作簿时激活下面的子菜单,但它不是?当我打开工作簿时,Workbook_Open sub不会运行?

我在做什么错?

Option Explicit 
Private Sub Workbook_Open() 
Dim btn As Button 
Dim rng As Range 
With Worksheets("Sheet1") 
    Set rng = .Range("B2:C2") 
     Set btn = .Buttons.Add(rng.Left, rng.Top, rng.Width, rng.Height) 
    With btn 
     .Caption = "To begin the program, please click this button" 
     .AutoSize = True 
     .OnAction = "TableCreation1" 
    End With 
End With 
End Sub 
+12

您是否将此模块放置在VBE中的ThisWorkbook对象中,而不是模块或工作表对象?因为当我这样做,它为我工作。为了使工作簿事件触发,代码必须存在于'ThisWorkbook'模块中。代码需要位于VBE中的每个工作表的对象中。 – 2012-07-06 21:26:22

+7

@Scott,我认为你应该改变你的评论为答案。 – 2012-07-06 21:44:54

回答

23

确保您私人小组Workbook_Open()子程序的该工作簿对象,而不是内部粘贴在一个模块,表格,或表对象。

+0

谢谢!有效! :) – TheTreeMan 2012-07-09 14:57:29

+1

你能把我标记为正确答案吗? :) (我试图回答问题,以获得完全访问该网站!) – danielpiestrak 2012-07-09 15:05:45

3

有趣。 2009年,描述了与要打开表单的条件格式冲突,如 vbforum post

看来这个bug在excel中依然存在,并且阻止了workbook_open事件被触发。 我有一个工作簿(旧的XLS-二进制格式),它不会在Excel 2003和2007中触发事件,而是在2013年。我删除了第一张工作表中的所有条件格式,但仍然无法使workbook_open过程在老人中运行Excel的版本。

一种变通方法,我在分布式工作簿使用是使用局部变量和第二个事件在工作簿如下:

'' 
' private variable 
Private wbOpenEventRun as Boolean 

'' 
' procedure to be called by excel when workbook opens 
Private Sub Workbook_Open() 
    wbOpenEventRun = true 
    ' perform tasks 
End Sub 

'' 
' the selection change event fires usually. 
' performance is not reduced 
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) 
    If Not wbOpenEventRun Then Workbook_Open 
    ' perform tasks in reaction of selection change events, if required 
End Sub 
2

我知道这个职位一直蛰伏了一段时间,但我只是挣扎几个小时才能解决这个问题。这是最奇怪的事情,但我终于注意到我的工作表之一是在“页面视图”中......并且一旦我将它放入“普通”,我的Workbook_Open()函数就再次正常工作。非常奇怪 - 绝对是一个Excel错误...只是很高兴我终于解决了它...希望它可以帮助别人...

1

我找到的解决方案是运行下面的代码,然后“打开”事件工作。

Sub EventRestore() 

    Application.EnableEvents = True 

End Sub 
相关问题