找不到 Countifs 对象错误 424
Countifs object not found error 424
我是新来的,也是 vba 的新手。我试图做一个 countif,如果答案超过 0,则符合标准,因此我对超过 500 行的问题进行了仔细检查。
Sub DoubleCheck()
'Variables declaration
Dim row_rounter As Long, rngQ As Range, cel As Range, resDblChq As Variant, rngB As Range, rngC As Range, rngF As Range, rngH As Range, rngI As Range
row_counter = Sheets("GW-DB").Cells(Cells.Rows.Count, "B").End(xlUp).Row 'row counter
'Range Initializatoin
Set rngQ = Sheets("GW-DB").Range("Q2:Q" & row_counter)
Set rngC = Sheets("GW-DB").Range("C2:C" & row_counter)
Set rngF = Sheets("GW-DB").Range("F2:F" & row_counter)
Set rngH = Sheets("GW-DB").Range("H2:H" & row_counter)
Set rngI = Sheets("GW-DB").Range("I2:I" & row_counter)
Set rngB = Sheets("GW-DB").Range("B2:B" & row_counter)
'Loop starts to validate possibility of double cheques
For Each cel In rngQ
' countif same name, same date,same amount, same reason
resDblChq = Application.WorksheetFunction.CountIfs(rngB, c.Offset(0, -16).Value, rngC, c.Offset(0, -15).Value, rngF, c.Offset(0, -12).Value, rngH, c.Offset(0, -9).Value, rngI, c.Offset(0, -8).Value)
' if it counts more than 0 it means there's a possibility of having double cheques issued
If resDblChq > 0 Then
c.Value = "Possible payment made twice"
End If
Next cel
End Sub
谢谢你,我想保留最简单的方式进一步修改
在您的循环中,您引用的是 C
而不是 Cel
。尝试像这样改变它。这将生成错误 424。
Sub DoubleCheck()
'Variables declaration
Dim row_rounter As Long, rngQ As Range, cel As Range, resDblChq As Variant, rngB As Range, rngC As Range, rngF As Range, rngH As Range, rngI As Range
row_counter = Sheets("GW-DB").Cells(Cells.Rows.Count, "B").End(xlUp).Row 'row counter
'Range Initializatoin
Set rngQ = Sheets("GW-DB").Range("Q2:Q" & row_counter)
Set rngC = Sheets("GW-DB").Range("C2:C" & row_counter)
Set rngF = Sheets("GW-DB").Range("F2:F" & row_counter)
Set rngH = Sheets("GW-DB").Range("H2:H" & row_counter)
Set rngI = Sheets("GW-DB").Range("I2:I" & row_counter)
Set rngB = Sheets("GW-DB").Range("B2:B" & row_counter)
'Loop starts to validate possibility of double cheques
For Each cel In rngQ
' countif same name, same date,same amount, same reason
resDblChq = Application.WorksheetFunction.CountIfs(rngB, cel.Offset(0, -16).Value, rngC, cel.Offset(0, -15).Value, rngF, cel.Offset(0, -12).Value, rngH, cel.Offset(0, -9).Value, rngI, cel.Offset(0, -8).Value)
' if it counts more than 0 it means there's a possibility of having double cheques issued
If resDblChq > 0 Then
cel.Value = "Possible payment made twice"
End If
Next cel
End Sub
使用 cel 而不是 c
resDblChq = Application.WorksheetFunction.CountIfs(rngB, cel.Offset(0, -16).Value, rngC, cel.Offset(0, -15).Value, rngF, cel.Offset(0, -12).Value, rngH, cel.Offset(0, -9).Value, rngI, cel.Offset(0, -8).Value)
c
未声明,并且由于未指定 Option Explicit
,因此在 运行 时它是一个包含 vbEmpty
的隐式 Variant
:
Debug.Assert Not IsEmpty(c) ' assertion fails here
Debug.Print c.Offset(0, -16).Value '"object required"
当然可以 ,但这并不能避免无数其他恼人的 容易避免的 运行 时间错误在每个模块的顶部指定 Option Explicit
会。
VBA 会愉快地编译拼写错误并将它们声明为即时隐式 Variant
变量而不指定 Option Explicit
:这不是您编写可靠代码的方式。采用。选项。显式。
错误显示 "object required" 的原因是因为在句法上,c.Offset(0, -16).Value
只能是对名为 [= 的对象的 Property Get
或 Function
成员调用11=] - 然而 IsObject(c)
将是 False
,因为 vbEmpty
不是对象引用。因此,需要对象。
我是新来的,也是 vba 的新手。我试图做一个 countif,如果答案超过 0,则符合标准,因此我对超过 500 行的问题进行了仔细检查。
Sub DoubleCheck()
'Variables declaration
Dim row_rounter As Long, rngQ As Range, cel As Range, resDblChq As Variant, rngB As Range, rngC As Range, rngF As Range, rngH As Range, rngI As Range
row_counter = Sheets("GW-DB").Cells(Cells.Rows.Count, "B").End(xlUp).Row 'row counter
'Range Initializatoin
Set rngQ = Sheets("GW-DB").Range("Q2:Q" & row_counter)
Set rngC = Sheets("GW-DB").Range("C2:C" & row_counter)
Set rngF = Sheets("GW-DB").Range("F2:F" & row_counter)
Set rngH = Sheets("GW-DB").Range("H2:H" & row_counter)
Set rngI = Sheets("GW-DB").Range("I2:I" & row_counter)
Set rngB = Sheets("GW-DB").Range("B2:B" & row_counter)
'Loop starts to validate possibility of double cheques
For Each cel In rngQ
' countif same name, same date,same amount, same reason
resDblChq = Application.WorksheetFunction.CountIfs(rngB, c.Offset(0, -16).Value, rngC, c.Offset(0, -15).Value, rngF, c.Offset(0, -12).Value, rngH, c.Offset(0, -9).Value, rngI, c.Offset(0, -8).Value)
' if it counts more than 0 it means there's a possibility of having double cheques issued
If resDblChq > 0 Then
c.Value = "Possible payment made twice"
End If
Next cel
End Sub
谢谢你,我想保留最简单的方式进一步修改
在您的循环中,您引用的是 C
而不是 Cel
。尝试像这样改变它。这将生成错误 424。
Sub DoubleCheck()
'Variables declaration
Dim row_rounter As Long, rngQ As Range, cel As Range, resDblChq As Variant, rngB As Range, rngC As Range, rngF As Range, rngH As Range, rngI As Range
row_counter = Sheets("GW-DB").Cells(Cells.Rows.Count, "B").End(xlUp).Row 'row counter
'Range Initializatoin
Set rngQ = Sheets("GW-DB").Range("Q2:Q" & row_counter)
Set rngC = Sheets("GW-DB").Range("C2:C" & row_counter)
Set rngF = Sheets("GW-DB").Range("F2:F" & row_counter)
Set rngH = Sheets("GW-DB").Range("H2:H" & row_counter)
Set rngI = Sheets("GW-DB").Range("I2:I" & row_counter)
Set rngB = Sheets("GW-DB").Range("B2:B" & row_counter)
'Loop starts to validate possibility of double cheques
For Each cel In rngQ
' countif same name, same date,same amount, same reason
resDblChq = Application.WorksheetFunction.CountIfs(rngB, cel.Offset(0, -16).Value, rngC, cel.Offset(0, -15).Value, rngF, cel.Offset(0, -12).Value, rngH, cel.Offset(0, -9).Value, rngI, cel.Offset(0, -8).Value)
' if it counts more than 0 it means there's a possibility of having double cheques issued
If resDblChq > 0 Then
cel.Value = "Possible payment made twice"
End If
Next cel
End Sub
使用 cel 而不是 c
resDblChq = Application.WorksheetFunction.CountIfs(rngB, cel.Offset(0, -16).Value, rngC, cel.Offset(0, -15).Value, rngF, cel.Offset(0, -12).Value, rngH, cel.Offset(0, -9).Value, rngI, cel.Offset(0, -8).Value)
c
未声明,并且由于未指定 Option Explicit
,因此在 运行 时它是一个包含 vbEmpty
的隐式 Variant
:
Debug.Assert Not IsEmpty(c) ' assertion fails here
Debug.Print c.Offset(0, -16).Value '"object required"
当然可以 Option Explicit
会。
VBA 会愉快地编译拼写错误并将它们声明为即时隐式 Variant
变量而不指定 Option Explicit
:这不是您编写可靠代码的方式。采用。选项。显式。
错误显示 "object required" 的原因是因为在句法上,c.Offset(0, -16).Value
只能是对名为 [= 的对象的 Property Get
或 Function
成员调用11=] - 然而 IsObject(c)
将是 False
,因为 vbEmpty
不是对象引用。因此,需要对象。