#vba #excel
#vba #преуспеть
Вопрос:
Этот код может отлично добавить определенное имя в другую книгу:
Sub AddDefinedName()
Dim sPath As String
Dim sFilename As String
Dim sSheetname As String
Dim sRangeAddress As String
sPath = "C:MeFolder"
sFilename = "source.xls"
sSheetname = "Sheet1"
sRangeAddress = "$A$1:$B$5"
ThisWorkbook.Names.Add "Source", _
RefersTo:="='" amp; sPath amp; "[" amp; sFilename amp; "]" amp; sSheetname amp; "'!" amp; 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. Я искал, но так и не нашел ничего близкого к тому, что искал. Я прочитаю вашу ссылку.
Ответ №1:
Вы можете использовать Name
объект для получения адресной строки, например
(при условии, что вы определили имя как Workbook
область)
Dim nm as Name
Set nm = ThisWorkbook.Names("Source")
Debug.Print nm.RefersTo
Это даст вам полный путь и адрес в форме
'=C:MeFolder[source.xls]Sheet1'!$A$1:$B$5
Примечание: без '
‘s, если в пути, имени файла или имени листа нет пробелов
Приведенное выше вернет информацию для определенного именованного диапазона. если вы хотите получить информацию для всех удаленных ссылок, попробуйте использовать
ThisWorkbook.LinkSources
Это вернет массив всех источников ссылок в виде строк. Для ссылок на другие рабочие листы это будет иметь вид
C:MeFoldersource.xls
Комментарии:
1. Это отлично. Он отлично работает для получения формулы. Большое спасибо за вашу помощь.
Ответ №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 amp; sFilename
MsgBox sPath
MsgBox sFilename
MsgBox sSheetname
MsgBox sRangeAddress
sFilename.close False
Application.ScreenUpdate = True
End Sub
Комментарии:
1. Это именно то, что я хочу сделать, за исключением, если «source.xls » является закрытым диапазоном («Источник»). Родительский элемент. Родительский элемент. Path и все остальные выдают ошибку.
2. Итак, что вы говорите, вам нужно открыть исходную книгу, чтобы получить путь к исходной книге… Это невозможно. Сначала вам нужно знать, где это находится!
3. Но … Excel знает, где это находится! Он зарегистрирован в определенном имени «Источник». Если я зайду в диспетчер имен, там будет указан весь путь, имя файла, лист и диапазон, которые я установил ранее.