获取已关闭工作簿中定义名称的路径、文件名、工作表和地址
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_Open
和 Workbook_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 - 组合宏以重命名工作表和宏以在一个宏中合并工作表