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

Posted

技术标签:

【中文标题】获取已关闭工作簿中定义名称的路径、文件名、工作表和地址【英文标题】:Get path, filename, sheet and address of defined name in closed workbook 【发布时间】:2014-06-24 09:29:17 【问题描述】:

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

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打开它)。

【问题讨论】:

我确实搜索过,但从未找到任何与我所寻找的内容相近的东西。我会阅读你的链接。 【参考方案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

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

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

ThisWorkbook.LinkSources

这将返回一个包含所有链接源的数组作为字符串。对于其他工作表的链接,它将采用以下形式

C:\Me\Folder\source.xls

【讨论】:

这太棒了。它可以完美地获得公式。非常感谢您的帮助。【参考方案2】:

您可以打开它然后再次关闭它,我知道这与“不以物理方式打开它”不同,但它的作用相同。请注意,当此代码运行时,“源”工作簿的 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

【讨论】:

这正是我想要做的,除非“source.xls”被关闭 Range("Source").Parent.Parent.Path 并且所有其他人都给出错误。 所以你的意思是你需要打开源工作簿才能获得源工作簿的路径......这是不可能的。您首先需要知道它在哪里! 但是……Excel 知道它在哪里!它以定义的名称“Source”注册。如果我继续使用名称管理器,则会看到我之前设置的整个路径、文件名、工作表和范围。

以上是关于获取已关闭工作簿中定义名称的路径、文件名、工作表和地址的主要内容,如果未能解决你的问题,请参考以下文章

Excel VBA - 组合宏以重命名工作表和宏以在一个宏中合并工作表

Excel UDF 在已关闭的工作簿中引用表以进行查找

同一个工作簿中的两张工作表调试错误?

Power Query初识

Excel VBA 从关闭的工作簿中读取数据,带有 ADODB、动态范围和标题可选

如何获取当前打开的excel工作簿的本地路径?