2016-11-10 185 views
1

当我使用加载项时,我无法获取工作簿的名称。Excel加载项 - 获取“本工作簿”的工作簿名称

我正在尝试开发每次打开Excel并读取打开文件的文件名时运行的加载项。

如果文件名是XCFIL.SKV然后做一些事情......

此代码应该这样做,但事实并非如此。我错过了什么?
代码停止,如果我调试并按F8它工作正常,但它不会运行它自己。

Private Sub Workbook_Open() 
    If ThisWorkbook.Name = "XCFIL.SKV" Then 
     MsgBox "y" 
    End If 

End Sub 
+3

[VBA中Thisworkbook.name和Activeworkbook.name之间的区别](http://stackoverflow.com/questions/35426907/difference-between-thisworkbook-name-and-activeworkbook-name-in-vba/35426954) –

+0

不解决问题。获取错误91.说一些关于阻止,不知道如何将其翻译成英语 – Andreas

+0

它可以用这个工作簿或者activeworkbook,如果我接受“等待”错误。但它并不是自己运行的 – Andreas

回答

2

背景:
基于中的代码将停止这一说法如果我调试和按F8它工作正常,但它不会在它自己的运行。我假设问题依赖于与代码不同步的处理器的速度(自己的经验)。
解决方案:

既然是Excel和问题似乎只依赖于实例本身的开放,你可以使用Application waitany of the other functions for this matter
另外的想法:

生命周期在我脑海中,这些类型的场景。 This web page有Excel实例的一个整洁的生命周期图(附因为我会尽量解释的情况下)

enter image description here

正如你可以看到“应用程序”是Excel应用程序的第一个周期,其次是“开放”并在此之后的“工作簿”对象,可能发生的是,在这个生命周期中,当“开放”出现时“worbook”还没有创建,因此,您需要等到excel解决这个问题。