VBA 如果对象 'range' 在将公式插入单元格时失败,则 '_default' 的错误方法
VBA Error method of '_default' if object 'range' failed when inserting formula into cell
我正在尝试使用 VBA 将公式放入单元格。这是公式。
Range(Cells(2, 15)).FormulaR1C1 = "=SUMPRODUCT(COUNTIF('All Failing Classes'R7C2:r7clrow,Classes!R[]C[-13]))"
错误在右边的引号内。我已经尝试过使用 A1 表示法以及我能想到的所有其他方法来起飞范围。在那之前和之后我有几条非常相似的线都工作正常,所以我不太确定我错过了什么。感谢您的帮助。
编辑: 这是几个人建议的行:
Cells(2, 15).FormulaR1C1 = " =SUMPRODUCT(COUNTIF('All Failing Classes'!$G:$G$" & lrow & ",Classes!B2))"
或
Cells(2, 15).FormulaR1C1 = "=SUMPRODUCT(COUNTIF('All Failing Classes'R7C2:r7C" & lrow & ",Classes!R[]C[-13]))"
据我所知,这是相同的。
当 Mat 帮助我时,我不小心在 = 前面添加了一个 space 以创建行:
Cells(2, 15).FormulaR1C1 = " =SUMPRODUCT(COUNTIF('All Failing Classes'R7C2:r7C" & lrow & ",Classes!R[]C[-13]))"
那条线很好吗? 当我移至 XL 并取出 space 时,公式按预期工作。这有助于缩小我做错的范围吗?
编辑 2: 这是我做错的地方 - 我在引用另一个 sheet 的那一行之前重新定义了一个变量。当我这样做时,程序显然一直在引用 sheet,并给了我我的问题。当我更改并在单元格 (sheets(blah).cellc(blah) 之前添加 sheet 时,它就起作用了。感谢所有提供帮助的人(尤其是 Mat)。
试试这个
Cells(2, 15).FormulaR1C1 = "=SUMPRODUCT(COUNTIF('All Failing Classes'R7C2:r7c" & lrow & ",Classes!R[]C[-13]))"
我猜 lrow 是一个变量...
Does =SUMPRODUCT(COUNTIF('All Failing Classes'R7C2:r7clrow,Classes!R[]C[-13]))
work as a formula?
如果它不起作用(不,它不起作用),那么 Excel 本身无法将损坏的公式分配给您正在输入的单元格 - 出于完全相同的原因,VBA也做不到
所以你的意思是 lrow
在插入公式之前由 VBA 计算,对吗?为此,VBA 需要能够看到 lrow
变量。在字符串文字中,它不会,也无法猜测您的意图:就 VBA 而言,这就是正在发生的事情:
SomeObject.SomeProperty = "some string literal"
就这些了。
您需要将变量的 值 连接到字符串文字中,就像您在 VBA:
中连接字符串一样
SomeObject.SomeProperty = "some " & someVariable & " string literal"
换句话说,使赋值的右侧成为字符串值表达式,而不仅仅是文字:
"=SUMPRODUCT(COUNTIF('All Failing Classes'R7C2:r7c" & lrow & ",Classes!R[]C[-13]))"
我正在尝试使用 VBA 将公式放入单元格。这是公式。
Range(Cells(2, 15)).FormulaR1C1 = "=SUMPRODUCT(COUNTIF('All Failing Classes'R7C2:r7clrow,Classes!R[]C[-13]))"
错误在右边的引号内。我已经尝试过使用 A1 表示法以及我能想到的所有其他方法来起飞范围。在那之前和之后我有几条非常相似的线都工作正常,所以我不太确定我错过了什么。感谢您的帮助。
编辑: 这是几个人建议的行:
Cells(2, 15).FormulaR1C1 = " =SUMPRODUCT(COUNTIF('All Failing Classes'!$G:$G$" & lrow & ",Classes!B2))"
或
Cells(2, 15).FormulaR1C1 = "=SUMPRODUCT(COUNTIF('All Failing Classes'R7C2:r7C" & lrow & ",Classes!R[]C[-13]))"
据我所知,这是相同的。
当 Mat 帮助我时,我不小心在 = 前面添加了一个 space 以创建行:
Cells(2, 15).FormulaR1C1 = " =SUMPRODUCT(COUNTIF('All Failing Classes'R7C2:r7C" & lrow & ",Classes!R[]C[-13]))"
那条线很好吗? 当我移至 XL 并取出 space 时,公式按预期工作。这有助于缩小我做错的范围吗?
编辑 2: 这是我做错的地方 - 我在引用另一个 sheet 的那一行之前重新定义了一个变量。当我这样做时,程序显然一直在引用 sheet,并给了我我的问题。当我更改并在单元格 (sheets(blah).cellc(blah) 之前添加 sheet 时,它就起作用了。感谢所有提供帮助的人(尤其是 Mat)。
试试这个
Cells(2, 15).FormulaR1C1 = "=SUMPRODUCT(COUNTIF('All Failing Classes'R7C2:r7c" & lrow & ",Classes!R[]C[-13]))"
我猜 lrow 是一个变量...
Does
=SUMPRODUCT(COUNTIF('All Failing Classes'R7C2:r7clrow,Classes!R[]C[-13]))
work as a formula?
如果它不起作用(不,它不起作用),那么 Excel 本身无法将损坏的公式分配给您正在输入的单元格 - 出于完全相同的原因,VBA也做不到
所以你的意思是 lrow
在插入公式之前由 VBA 计算,对吗?为此,VBA 需要能够看到 lrow
变量。在字符串文字中,它不会,也无法猜测您的意图:就 VBA 而言,这就是正在发生的事情:
SomeObject.SomeProperty = "some string literal"
就这些了。
您需要将变量的 值 连接到字符串文字中,就像您在 VBA:
中连接字符串一样SomeObject.SomeProperty = "some " & someVariable & " string literal"
换句话说,使赋值的右侧成为字符串值表达式,而不仅仅是文字:
"=SUMPRODUCT(COUNTIF('All Failing Classes'R7C2:r7c" & lrow & ",Classes!R[]C[-13]))"