У меня есть сценарий VBA в книге Excel, который собирает результаты из всех книг в определенной папке.
Private Sub Workbook_Open()
Dim path As String
Dim fso As Object
Dim folder As Object
Dim file As Object
Dim i As Integer
Dim data As Object
Set data = Worksheets("RawData")
path = data.Range("A1").Value
i = 3
Set fso = CreateObject("Scripting.FileSystemObject")
Set folder = fso.GetFolder(path)
data.Rows("2:" & data.Rows.Count).ClearContents
For Each file In folder.Files
If Right(UCase(file.name), 5) = ".XLSX" And Left(file.name, 1) <> "~" Then
data.Cells(i, 2) = "='" + path + "\[" + file.name + "]Summary'!A1:J1"
i = i + 1
End If
Next file
End Sub
Идея состоит в том, что для каждого файла .xlsx
в данной папке я добавляю ссылка на диапазон результатов в этом файле. Например, если есть файл Test1.xlsx
в папке C:\Sheets
, VBA помещает следующую формулу в некоторую строку на листе, содержащем скрипт:
='C:\Sheets\[Test1.xlsx]Summary'!A1:J1
Excel затем извлекает значения из Test1
и помещает их на лист RawData
текущей книги.
Это работало до сегодняшнего дня, когда мои формулы начали заканчиваться @
сразу после знака =
, например:
=@'C:\Sheets\[Test1.xlsx]Summary'!A1:J1
Это дает мне #VALUE?
.
Excel любезно предоставил мне сообщение о том, что он только что начал вставлять @
в формулы из-за некоторых изменений синтаксиса, но это не повлияет расчеты. Я не могу заставить это сообщение появиться снова, но в этом была его суть. Очевидно, это влияет на расчеты. Если я вручную удаляю @
из формулы, все работает нормально.
У меня есть Office 365, и я полагаю, что недавно получил обновление, в котором была добавлена эта «функция», потому что раньше все это работало нормально.
Если я изменю сценарий VBA для ссылки только на одну ячейку, @
не будет вставлен. Но использование именованного диапазона для результатов (а не A1:J1
) по-прежнему вызывает проблему.
У кого-нибудь есть идеи по обходному пути?