【问题标题】:run auto_open after the workbook is open工作簿打开后运行 auto_open
【发布时间】:2018-07-17 23:09:07
【问题描述】:

我正在尝试创建一个在打开工作簿时运行的代码。我尝试使用 Auto_open 和 workbook_open (在 ThisWorkbook 对象内),但我对它们都有问题。问题是代码需要我正在打开的工作簿中的信息正如您在这段代码中看到的那样:

Sub Auto_Open()
Dim fileNam As String
Dim text As String
Dim answer As String
Dim question As String
Dim quesPos As Integer
MsgBox "add-in start"
'On Error GoTo GetOut


fileNam = ThisWorkbook.FullName
jsonFile = Replace(jsonFile, "xls", "survey.descriptor.json")
Open jsonFile For Input As #2
pos = 1
ThisWorkbook.Sheets("Result").Select
'The code gives the error here

由于 Excel 文件尚未打开,因此在获取文件名时会出错。如何在代码打开后执行代码?

【问题讨论】:

  • 改用ThisWorkbook.FullName
  • Workbook_Open() 宏似乎与您在上面发布的代码一起使用您的代码。
  • 我用 workbook_open() 进行了测试,但它不起作用......我不得不说我正在使用该代码创建一个加载项,然后将其添加到 excel 中。 ThisWorkbook.FullName 工作,但代码继续,它给了我另一个错误。我会放更多代码来说明它给我的错误

标签: excel vba


【解决方案1】:

如果您需要在工作簿打开后运行一些代码(而不是“在打开时”),一种解决方案是创建一个定时事件 - 将定时器设置为 5 秒,在 auto_open 中触发它,并让它循环直到文件“正确打开”。这可能看起来像这样:

Auto_Open():

fullyOpenTime = Now + TimeValue("00:00:05")
Application.OnTime alertTime, "LetsGo"

然后您创建另一个子程序,该子程序将在工作簿打开后运行:

Sub LetsGo()

On Error Resume Next

' loop around until no error was triggered
Do
  DoEvents
  fileName = Application.ActiveWorkbook.FullName
  Application.Wait DateAdd("s", 1, Now)  ' "cheap trick" to wait one second
While Err.Number <> 0

On Error GoTo 0
' when you get here, you have an active workbook.

【讨论】:

    猜你喜欢
    • 2018-07-27
    • 1970-01-01
    • 1970-01-01
    • 2015-06-02
    • 1970-01-01
    • 2016-05-28
    • 2017-09-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多