获取已关闭工作簿中已定义名称的路径,文件名,表单和地址

时间:2014-06-24 09:29:17

标签: excel vba excel-vba

此代码可以将定义的名称添加到另一个工作簿中:

Sub AddDefinedName()
    Dim sPath As String
    Dim sFilename As String
    Dim sSheetname As String
    Dim sRangeAddress As String

    sPath = "C:\Me\Folder"
    sFilename = "source.xls"
    sSheetname = "Sheet1"
    sRangeAddress = "$A$1:$B$5"

    ThisWorkbook.Names.Add "Source", _
            RefersTo:="='" & sPath & "\[" & sFilename & "]" & sSheetname & "'!" & sRangeAddress
End Sub

此代码允许在所述工作簿打开时获取所有信息:

Sub GetDefinedName()
    Dim sPath As String
    Dim sFilename As String
    Dim sSheetname As String
    Dim sRangeAddress As String

    sPath = Range("Source").Parent.Parent.Path
    sFilename = Range("Source").Parent.Parent.Name
    sSheetname = Range("Source").Parent.Name
    sRangeAddress = Range("Source").Address

    MsgBox sPath
    MsgBox sFilename
    MsgBox sSheetname
    MsgBox sRangeAddress
End Sub

如果关闭工作簿“source.xls”,我怎么能得到这些(所以我可以通过VBA打开它)。

2 个答案:

答案 0 :(得分:1)

您可以使用Name对象获取地址字符串,如下所示 (假设您已将名称定义为Workbook范围)

Dim nm as Name

Set nm = ThisWorkbook.Names("Source")
Debug.Print nm.RefersTo

这将为您提供表格中的完整路径和地址

'=C:\Me\Folder\[source.xls]Sheet1'!$A$1:$B$5

注意:如果路径,文件名或工作表名称中没有空格,则不使用'

以上内容将返回特定命名范围的信息。如果您想获取所有远程引用的信息,请尝试使用

ThisWorkbook.LinkSources

这将返回所有链接源的数组作为字符串。对于其他工作表的链接,它将采用

的形式
C:\Me\Folder\source.xls

答案 1 :(得分:0)

你可以打开它并再次关闭它,我知道它与#34不一样;不能在物理上打开它#34;但它做同样的工作。请注意" Source"中的任何宏。运行此代码时,将触发工作簿的Workbook_OpenWorkbook_close

Sub GetDefinedName()
    Application.ScreenUpdate = False
    Dim sPath As String
    Dim sFilename As String
    Dim sSheetname As String
    Dim sRangeAddress As String



    sPath = Range("Source").Parent.Parent.Path
    sFilename = Range("Source").Parent.Parent.Name
    sSheetname = Range("Source").Parent.Name
    sRangeAddress = Range("Source").Address
    Application.Workbooks.Open sPath & sFilename


    MsgBox sPath
    MsgBox sFilename
    MsgBox sSheetname
    MsgBox sRangeAddress

    sFilename.close False
    Application.ScreenUpdate = True
End Sub