如何阻止Excel在公式中自动插入@符号?VBA代码求助
问题:VBA插入表格引用公式时自动添加@符号导致无法溢出
我认为自己忽略了一些基础内容,以下是一段引用另一工作表表格的VBA代码:
Sub availabilityTab() Dim cell As String Dim i As Integer With Sheets("Availability") .Cells.Clear .Range("A3") = "=BackgroundData[#Headers]" For i = 1 To 5 cell = .Cells(3, i) .Cells(4, i) = "=BackgroundData[" & cell & "]" Next i End With End Sub
但插入公式时,单元格中会自动出现@符号,导致结果无法溢出,例如A3单元格公式变为=@BackgroundData[#Headers],A4单元格变为=BackgroundData[@ID]。请问如何阻止Excel插入该@符号?
解决方法
核心方案:使用.Formula2属性替代直接赋值
在Excel 365/2021及以后版本中,.Formula2属性专门支持动态数组公式,不会自动添加隐式交集运算符@。修改后的代码如下:
Sub availabilityTab() Dim cell As String Dim i As Integer With Sheets("Availability") .Cells.Clear ' 用Formula2插入表头引用,避免@符号 .Range("A3").Formula2 = "=BackgroundData[#Headers]" For i = 1 To 5 cell = .Cells(3, i) ' 同样用Formula2插入列引用 .Cells(4, i).Formula2 = "=BackgroundData[" & cell & "]" Next i End With End Sub
原理说明
Excel自动添加的@是隐式交集运算符,默认情况下,单个单元格输入整表/整列引用的公式时,Excel会自动添加该符号返回当前行对应值,但这会阻断动态数组的溢出行为。而.Formula2属性会强制Excel以动态数组模式解析公式,保留原引用逻辑,避免添加@,让公式正常溢出展开。
旧版本Excel兼容方案(可选)
如果使用Excel 2019及更早版本,可改用.ArrayFormula属性替代.Formula2,效果一致:
.Range("A3").ArrayFormula = "=BackgroundData[#Headers]" .Cells(4, i).ArrayFormula = "=BackgroundData[" & cell & "]"
内容的提问来源于stack exchange,提问作者sriche01
相关产品推荐
相关产品推荐

