2013-07-10 139 views
1

我試圖創建打開工作簿時運行的代碼。我嘗試使用Auto_open和workbook_open(在ThisWorkbook對象中)但我遇到了兩個問題。問題是,代碼需要從我打開工作簿信息正如你在這個和平的代碼中看到:在工作簿打開後運行auto_open

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文件尚未打開,同時獲得的名稱也給出了一個錯誤文件。如何在執行代碼時打開代碼但打開代碼後執行代碼?

+1

嘗試'ThisWorkbook.FullName'代替。 –

+0

Workbook_Open()宏似乎與您的代碼一起使用您在上面發佈的代碼。 – ChrisProsser

+0

我使用workbook_open()進行測試,但它不工作......我不得不說,我正在用該代碼創建一個加載項,然後將其添加到Excel中。 ThisWorkbook.FullName工作,但代碼繼續,它給了我另一個錯誤。我會把更多的代碼說出它給我的錯誤 –

回答

2

如果您需要一些代碼來運行AFTER工作簿打開(而不是「因爲它被打開」),一種解決方案是創建一個定時事件 - 設置定時器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. 
+0

謝謝!這解決了這個問題 –

相關問題