Estoy intentando utilizar la función CountIf () de mi sintaxis de VBA, pero aparece un error de

Número incorrecto de argumentos o asignación de propiedad no válida

Esta es mi sintaxis: ¿qué necesito cambiar para que tenga éxito?

Dim countofemps As Integer

Sheets("All emps").Select
Selection.AutoFilter
ActiveSheet.ListObjects("Allemps").Range.AutoFilter Field:=1, Criteria1:=filtervalue
ActiveSheet.ListObjects("Allemps").Range.AutoFilter Field:=5, _
    Criteria1:=">=1/29/2017", Operator:=xlAnd, Criteria2:="<=3/1/2017"
'This line throws error
countofemps = WorksheetFunction.CountIf(Range("'All emps'!A2:A2000"), filtervalue, Range("'All emps'!B2:B2000"))
0
IcyPopTarts 23 mar. 2017 a las 04:46

2 respuestas

La mejor respuesta

Yo iría de la siguiente manera:

With Sheets("All emps") '<--| reference your sheet
    With .ListObjects("Allemps").Range '<--| reference its "Allemps" table range
        .AutoFilter '<--| clear any previous filter
        .AutoFilter Field:=1, Criteria1:=filtervalue '<--| filter referenced range on its first column with given filtervalue
        .AutoFilter Field:=5, Criteria1:=">=1/29/2017", Operator:=xlAnd, Criteria2:="<=3/1/2017" '<--| filter reference range on its fifth column with given limit dates
        countofemps = Application.WorksheetFunction.Subtotal(103, .Columns(1)) -1  '<--| count the number of filtered cells on its first column except header cellr
    End With
End With
0
user3598756 23 mar. 2017 a las 07:18

Supongo que lo que quieres es CountIfs, con los criterios para la segunda columna de argumento "no está vacío":

Como también desea filtrar las fechas en column 5, puede integrar todas sus condiciones en la función countifs (sin la necesidad de filtrado), de esta manera:

With Sheets("All emps").ListObjects("Allemps").DataBodyRange
    countofemps = WorksheetFunction.CountIfs( _
        .Columns(5),  ">=1/29/2017", _
        .Columns(5), "<=3/1/2017", _
        .Columns(1), filtervalue, _
        .Columns(3), "<>")
End With
0
A.S.H 23 mar. 2017 a las 11:18