2016-09-15 98 views
0

我是一名業餘VBA用戶,試圖通過各種教程和試驗錯誤到目前爲止。Application.Run - 單元格參考中的工作簿名稱-VBA

目前我遇到了Application.Run的障礙。我有的宏正在工作,我只需要根據包含特定日期的單元格引用來更新工作簿的名稱(日期)。

Application.Run ("'09. September - Monthly Reconciliation.xlsm'!CombineTabs") 
or 
    Application.Run ("'03.09.2016 - Daily Reconciliation.xlsm'!CombineTabs") 

爲了防止具有微距每日或每月(它將被用於更新:

爲長宏的一部分,我可能有以下取決於工作簿的一個我在工作沒有任何VBA知識的人),有沒有辦法將工作簿的名稱鏈接到單元格?此單元格將包含工作簿的名稱,並具有所需的日期和日期格式。

任何輸入讚賞,

+0

不太清楚你的問題,但在一個單元格,可以用一個公式來獲取工作簿的名稱: '= MID(CELL(「文件名」,A1),FIND(「[」,CELL(「文件名」,A1))+ 1,FIND(「]」,CELL [「,CELL(」filename「,A1)) - 1)' - 在VBA中,你可以做同樣的事情,然後解析出你不需要的東西。或者你問如何得到一個變量來更新,所以你可以說'Application.Run(myDate&「 - Daily Reconciliation.xlsm'!CombineTabs')'? – BruceWayne

+0

如果你沒有捕獲一個函數的返回值,或者你正在調用一個'Sub'過程,[不要在參數周圍使用括號](http://stackoverflow.com/documentation/vba/1179/procedure-/3818/this-is-confusing-why-not-just-always-use-括號#t = 201609151902369636814) - 這將*最終在後端咬你。 –

+0

Application.Run工作表(「Sheet1」)。範圍(「A1」)。值,將文件放到'Sheet1'上的'A1'單元格中。 – omegastripes

回答

1

是,宏是在同一工作簿作爲代碼

如果是這樣的話,我理解正確的話,那麼你可以簡單地這樣做:

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" 
+0

第一:謝謝你的墊子!我試圖做的是去我的每日或每月對帳工作簿,運行一個宏,它將在後臺打開一個單獨的工作簿,並運行位於每月對帳工作簿中最初打開的宏。在嘗試實現建議的更改時,一切正常,直到第二個工作簿打開並創建「活動工作簿」。這是它停止的地方,因爲我想要運行的宏不在本工作簿中,而是現在不活動的宏。 – kankuroo

+1

@ kankuroo好吧,你很混亂。如果'CombineTabs'位於包含'Application.Run'調用的相同工作簿中,那麼請參閱本答案的頂部 - 您根本不需要'Application.Run'。我建議你讓'CombineTabs'過程把一些'Workbook'對象作爲一個參數(所以不要調用'Application.Run'你去'Application.Workbooks.Open'並把生成的工作簿對象傳給你的宏) ,所以你可以處理一個對象引用,而不是依賴任何活動的東西。 –

+0

對不起,我有時候有點困惑。但你,你是一個天才!我的印象是,我必須說明哪些開放工作簿包含了我想在新打開的工作簿中運行的第二個宏,而且我對它過於複雜。你的第一個建議是擺脫整個Application.Run行,並用CombineTabs替換它,效果非常好。感謝您的幫助!! – kankuroo

相關問題