Получить путь, имя файла, лист и адрес определенного имени в закрытой книге

#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 знает, где это находится! Он зарегистрирован в определенном имени «Источник». Если я зайду в диспетчер имен, там будет указан весь путь, имя файла, лист и диапазон, которые я установил ранее.