2015-05-27 69 views
0

我想COUNTIF公式转换为VBA格式,但它给我一个运行时错误1004应用程序或对象定义错误...COUNTIF公式VBA给运行时错误1004

我的代码和公式:

例如,

=COUNTIF('Sheet1'!$D$14:$D$3000,$B25)-COUNTIFS('Sheet1'!$D$14:$D$3000,B25,'Sheet1'!$E$14:$E$3000,"No Test") 

Range("A1").Formula = "=COUNTIF('Sheet1'!" & Sheets("Sheet1").Range(Cells(14, 4), Cells(3000, 4)).Address(False, False) & "," & _ 
Sheets("Sheet1").Cells(25, 2).Address(False, False) & ") -" & _ 
"Countifs('Sheet1'!" & Sheets("Sheet1").Range(Cells(14, 4), Cells(3000, 4)).Address(False, False) & "," & _ 
Sheets("Sheet1").Cells(25, 2).Address(False, False) & ",'Sheet1!" & _ 
Sheets("Sheet1").Range(Cells(14, 5), Cells(3000, 5)).Address(False, False) & ", ""No Test"")" 

回答

2

您指定范围的父母,但不细胞Cells默认为另一个工作表的单元格。本质上你说给了我Sheet1上的范围,其中包含Sheet2中的单元格。

使用With/End With和前缀.Range.Cells以显示亲子关系的时间段。

Dim ws2 As Worksheet 

Set ws2 = Sheets("Sheet2") 

With Sheets("Sheet1") 
    ws2.Range("A1").Formula = "=COUNTIF(" & .Range(.Cells(14, 4), .Cells(3000, 4)).Address(0, 0, external:=True) & "," & .Cells(25, 2).Address(0, 0) & ")-" & _ 
     "COUNTIFS(" & .Range(.Cells(14, 4), .Cells(3000, 4)).Address(0, 0, external:=True) & "," & .Cells(25, 2).Address(0, 0) & ", " & _ 
     .Range(.Cells(14, 5), .Cells(3000, 5)).Address(0, 0, external:=True) & ", ""No Test"")" 
End With 

请注意,我用外部:=真包括工作表名称。对于哪个工作表B25属于似乎确实存在一些混淆。

这是什么公式解析为:

=COUNTIF(Sheet1!D14:D3000, B25)-COUNTIFS(Sheet1!D14:D3000, B25, Sheet1!E14:E3000, "No Test") 
3

您还没有prope RLY胜任所有.Cells电话与工作表对象,但因为你只需要地址,你实际上并不需要指定一个工作表:

Range("A1").Formula = "=COUNTIF('Sheet1'!" & Range(Cells(14, 4), Cells(3000, 4)).Address(False, False) & "," & _ 
Cells(25, 2).Address(False, False) & ") -" & _ 
"Countifs('Sheet1'!" & Range(Cells(14, 4), Cells(3000, 4)).Address(False, False) & "," & _ 
Cells(25, 2).Address(False, False) & ",'Sheet1'!" & _ 
Range(Cells(14, 5), Cells(3000, 5)).Address(False, False) & ", ""No Test"")" 
3

公式本身预留 - 您要报告错误的原因是因为缺少撇号decaring表名称时:

以下填写公式,我想像它是必需的:

Range("A1").Formula = "=COUNTIF('Sheet1'!" & Sheets("Sheet1").Range(Cells(14, 4), Cells(3000, 4)).Address(False, False) & "," & _ 
Sheets("Sheet1").Cells(25, 2).Address(False, False) & ") -" & _ 
"Countifs('Sheet1'!" & Sheets("Sheet1").Range(Cells(14, 4), Cells(3000, 4)).Address(False, False) & "," & _ 
Sheets("Sheet1").Cells(25, 2).Address(False, False) & ",'Sheet1'!" & _ 
Sheets("Sheet1").Range(Cells(14, 5), Cells(3000, 5)).Address(False, False) & ", ""No Test"")" 
+0

好抓!我强制外部地址引用并放弃了引用的工作表名称,但我从未在前几次看到过。 – Jeeped

+0

谢谢 - 我倾向于通过大块小块,直到我找到了什么 - 这一次它工作。 – Trum