是,宏是在同一工作簿作爲代碼
如果是這樣的話,我理解正確的話,那麼你可以簡單地這樣做:
Application.Run "CombineTabs"
甚至:
CombineTabs
我試圖Application.Run工作表( 「Sheet19」)範圍( 「AQ27」)值,CombineTabs - !它只是打開其他工作簿 [...]
如果CombineTabs
宏觀位於活動工作簿,這是不必然包含調用代碼的工作簿,然後你可以這樣做:
Application.Run "'" & ActiveWorkbook.FullName & "'!CombineTabs"
如果CombineTabs
宏觀位於未打開一些工作簿,文件名是在包含Application.Run
指令相同工作簿...
首先,避免硬編碼範圍和單元格引用;將範圍Sheet19!AQ27
命名爲工作簿範圍Name
- 將其稱爲有意義的,例如Filename
。在Module1
Public Sub Test()
Debug.Print "yup"
End Sub
Application.Run "'" & ThisWorkbook.Range("Filename").Value & "'!CombineTabs"
與此代碼測試,這段代碼在立即窗格:然後你就可以做到這一點
Application.Run "'" & Application.Workbooks(1).FullName & "'!Test"
yup
所以,這個假設Filename
範圍包含有效的路徑+文件名到現有的工作簿。
您可以嘗試Application.Run
呼叫,通過打開目標之前驗證工作簿自己:
Dim target As Workbook
On Error Resume Next
Set target = Application.Workbooks.Open(ThisWorkbook.Range("Filename").Value)
Err.Clear
If target Is Nothing Then Exit Sub
On Error GoTo 0
Application.Run "'" & target.FullName & "'!CombineTabs"
不太清楚你的問題,但在一個單元格,可以用一個公式來獲取工作簿的名稱: '= MID(CELL(「文件名」,A1),FIND(「[」,CELL(「文件名」,A1))+ 1,FIND(「]」,CELL [「,CELL(」filename「,A1)) - 1)' - 在VBA中,你可以做同樣的事情,然後解析出你不需要的東西。或者你問如何得到一個變量來更新,所以你可以說'Application.Run(myDate&「 - Daily Reconciliation.xlsm'!CombineTabs')'? – BruceWayne
如果你沒有捕獲一個函數的返回值,或者你正在調用一個'Sub'過程,[不要在參數周圍使用括號](http://stackoverflow.com/documentation/vba/1179/procedure-/3818/this-is-confusing-why-not-just-always-use-括號#t = 201609151902369636814) - 這將*最終在後端咬你。 –
Application.Run工作表(「Sheet1」)。範圍(「A1」)。值,將文件放到'Sheet1'上的'A1'單元格中。 – omegastripes