excel - 如何阻止 Excel 破坏我的 VBA 脚本插入的公式

标签 excel vba

我在 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/

相关文章:

excel - 获取范围内包含 "keyword"的所有值的列表(不包含空格)

excel - 如何只循环一次组合

vba - 单击图表时获取 X 轴值 - Excel VBA

excel - 在除 Sheet1 和 Sheet2 之外的每个工作表上运行宏

vba - 更新标题搞乱了我的页面方向和缩放

linux - 不一致的 CPAN 模块行为——该怪谁?

excel - 具有多列的 Excel 中的唯一值

vba - 立即更改范围值

excel - 通过 MS Project 导入功能保持 MS Project 和 MS Excel 文件同步

excel - VBA将符合条件的行复制到另一个工作表