我在 Excel 工作簿中有一个 VBA 脚本,它从特定文件夹中的所有工作簿中收集结果。
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
)仍然存在问题。有人对解决方法有任何想法吗?
最佳答案
为了避免 @
从被插入,使用 .Formula2
范围对象的属性。
此更改与 Excel O365 的动态数组功能有关
关于excel - 如何阻止 Excel 破坏我的 VBA 脚本插入的公式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62078110/