Ссылка на переменную «Путь к файлу» в формуле индекса / соответствия из другой книги с помощью Excel VBA - PullRequest
0 голосов
/ 26 марта 2020

Добрый день,

Я пытаюсь сослаться на переменную пути к файлу в формуле индекса / соответствия в Excel VBA. Все работает до формулы индекса / соответствия, и я думаю, что путь к файлу и ссылка на рабочий лист является проблемой. В настоящее время выдается ошибка «Ошибка времени выполнения« 1004 »: ошибка приложения или объекта»

Это всего лишь часть кода, так как с этим макросом происходит много всего, и я должен сделать одно и то же для 8 разных файлов, с разными именами и разными именами листов. Макросы будут использовать разные люди, и основные файлы будут находиться в разных папках, поэтому мне нужно добавить переменные для путей к файлам и рабочих таблиц.

Я прочитал много постов, пытаясь найти решение. Многие предлагают использовать косвенный или косвенный.ext функцию / формулу, но, очевидно, с косвенный.ext вы должны включить дополнение, которое я могу ' так как многие люди будут использовать макрос. И косвенный , по-видимому, неустойчив. Поскольку эта формула будет использоваться как минимум в 8 различных столбцах и более 50 000 строк, это не очень хорошая идея для времени обработки.

Внешние рабочие книги будут открываться с кодом перед запуском этой формулы .

Это часть кода для формулы индекса / соответствия.

Dim path As String
Dim StoreFile As String
Dim StoreFileF As String

path = GetFolder()

StoreFile = Dir(path & "\*Store and Format*.xls*")
StoreFileF = path & "\" & StoreFile

With ws.ListObjects("Table_SDCdata")
    With .ListColumns.Add
        .Name = "Region"
    End With
    .ListColumns("Region").DataBodyRange.Formula = "=INDEX('[" & StoreFileF & "]Worksheet[1]'!F:F,MATCH([@Site],'[" & StoreFileF & "]Worksheet[1]'!A:A)0,1)"
End With

Будем благодарны за любые предложенные или полезные советы.

1 Ответ

2 голосов
/ 26 марта 2020

Квадратная скобка только для имени файла

    path = "c:\path\to\file"
    file = "My Workbook.xlsx"
    sheetname = "Sheet Name"

    ref = path & "\[" & file & "]" & sheetname
    sFormula = "=INDEX('" & ref & "'!$F:$F,MATCH([@Site],'" & ref & "'!$A:$A,0),1)"
    Debug.Print sFormula

    With ws.ListObjects("Table_SDCdata")
    With .ListColumns.Add
        .Name = "Region"
    End With
        .ListColumns("Region").DataBodyRange.Formula = sFormula
    End With

...