是,宏是在同一工作簿作为代码
如果是这样的话,我理解正确的话,那么你可以简单地这样做:
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