Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 工作簿_opensub-won';当我打开工作簿时是否不运行?_Excel_Vba - Fatal编程技术网

Excel 工作簿_opensub-won';当我打开工作簿时是否不运行?

Excel 工作簿_opensub-won';当我打开工作簿时是否不运行?,excel,vba,Excel,Vba,这个程序应该创建一个按钮,用户可以按下该按钮来激活不同的sub。从我的在线搜索来看,在打开工作簿时,下面的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,

这个程序应该创建一个按钮,用户可以按下该按钮来激活不同的sub。从我的在线搜索来看,在打开工作簿时,下面的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

确保您的专用子工作簿_Open()子例程粘贴在此工作簿对象的内部,而不是在模块、表单或工作表对象中。

。 2009年描述了与要打开的图纸的条件格式冲突,如中所示

excel中似乎仍然存在此错误,并阻止触发
workbook\u open
事件。 我有一个工作簿(旧的XLS二进制格式),在Excel2003和2007中不会触发事件,但在2013年会触发。我删除了第一张工作表中的所有条件格式,但仍然无法在旧版Excel中运行
workbook\u open
过程

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

“”
'私有变量
私有wbOpenEventRun作为布尔值
''
'工作簿打开时excel调用的过程
私有子工作簿_Open()
wBONEVENTRUN=真
“执行任务
端接头
''
'选择更改事件通常会激发。
"表现不减,
私有子工作簿\u Sheet SelectionChange(ByVal Sh作为对象,ByVal目标作为范围)
如果不是WBOpenVentRun,则工作簿\u打开
'如果需要,根据选择更改事件执行任务
端接头

我知道这篇文章已经休眠了一段时间,但我只是挣扎了几个小时来解决这个问题。这是最奇怪的事情,但我终于注意到我的一张工作表在“页面视图”中。。。当我把它放到“正常”状态时,我的工作簿_Open()函数又开始正常工作了。非常奇怪-肯定是Excel错误。。。很高兴我终于解决了。。。希望它能帮助某人…

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

Sub EventRestore()

    Application.EnableEvents = True

End Sub
类似于,我发现了以下修复:

修复 关闭所有excel工作簿和VBA窗口并重新打开带有
工作簿的窗口。\u Open()
解决了此问题。
(很可能是由于类似于上述Nazim解决方案的事件)

问题经验 在调试和中止执行时,我在中止之前禁用了运行代码中的事件。我一开始并没有注意到这种情况,甚至在关闭/重新打开工作簿后,它也不起作用

可能原因
…另一个打开的excel工作簿或某个全局实例不知何故“记住”了重新打开的工作簿的事件已被关闭。

我的解决方案有点模糊,现在我甚至不记得为什么我会想到它是一个潜在的解决方案。我创建的工作簿_Open()宏无法运行的文件,最初是通过以下步骤创建的:

  • 在相关文件夹中单击鼠标右键,单击“新建”,单击“Microsoft Excel工作表”
  • 将文件命名为“工作簿_1
  • 已打开工作簿\u 1
  • 文件,另存为,将文件类型更改为启用Excel宏的工作簿(*.xlsm),保存
  • 编写了VBA代码,包括嵌套在此工作簿中的工作簿\u Open()
  • 无论出于何种原因,我想知道我的问题是否与文件“开始时”是标准的.xlsx有关。所以我只是:

  • 在Excel中打开新的空白工作簿(Book1
  • 文件,另存为,输入工作簿2,将文件类型更改为启用Excel宏的工作簿(*.xlsm),保存
  • 从原始工作簿\u 1复制了VBA代码和结构

  • 与原始的工作簿\u 1不同,新的工作簿\u 2在打开时成功运行了工作簿\u Open()子项。此问题的潜在原因可能与文件的类型历史记录有关(即,如果文件在某个点上是无法运行宏的类型)。或者干脆用一个新文件再试一次就解决了这个问题。无论哪种方式,这都可能适用于其他解决方案不适用的任何人。

    是否将此模块放置在VBE中的
    ThisWorkbook
    对象中,而不是模块或工作表对象中?因为当我这么做的时候,它对我起了作用。要触发工作簿事件,代码必须存在于
    thiswoolk
    模块中。对于工作表级别的事件也是如此,代码需要位于VBE中每个工作表的对象中。@Scott,我认为您应该将注释更改为答案。那么您能将我标记为正确答案吗?:)(我试图回答问题以获得对该网站的完全访问!)肮脏的黑客。。。表达敬意!这个解决方案似乎有效!!我也有同样的问题,但这似乎解决了它!非常感谢。