此代码可以将定义的名称添加到另一个工作簿中:
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打开它)。
答案 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_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