Application.Run – 单元格引用的工作簿名称 – VBA

我是一个业余VBA用户,试图通过各种教程和反复试验到目前为止。

目前我遇到了Application.Run的障碍。 我拥有的macros正在工作,我只需要工作簿的名称(date)根据包含特定date的单元格引用进行更新。

作为一个较长的macros的一部分,我可能有以下之一取决于我工作的工作簿:

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

为了防止必须每天或每月更新macros(它将被没有任何VBA知识的人使用 ), 有没有办法可以将工作簿的名称链接到单元格? 该单元格将包含工作簿的名称,具有所需的date和date格式。

任何input赞赏,

是的,这个macros和代码在同一个工作簿里

如果是这样,我理解正确,那么你可以简单地做到这一点:

 Application.Run "CombineTabs" 

甚至:

 CombineTabs 

我尝试了Application.Run Worksheets(“Sheet19”)。Range(“AQ27”)。Value,!CombineTabs – 它只是打开另一个工作簿 […]

如果CombineTabsmacros位于活动工作簿 (不一定是包含调用代码的工作簿),则可以这样做:

 Application.Run "'" & ActiveWorkbook.FullName & "'!CombineTabs" 

如果CombineTabsmacros位于某个未打开的工作簿中,并且该文件名位于包含Application.Run指令的相同工作簿中…

首先,避免硬编码范围和单元格引用; 命名范围Sheet19!AQ27带有工作簿范围Name – 称之为有意义的东西,比如Filename 。 那么你可以这样做:

 Application.Run "'" & ThisWorkbook.Range("Filename").Value & "'!CombineTabs" 

Module1使用此代码进行testing

 Public Sub Test() Debug.Print "yup" End Sub 

而这个代码在即时窗格中

 Application.Run "'" & Application.Workbooks(1).FullName & "'!Test" yup 

因此,这假定Filename范围包含一个有效的path+文件名到现有的工作簿。

您可以在尝试Application.Run调用之前通过自己打开目标工作簿来validation这一点:

 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"