【问题标题】:WorksheetFunction.CountA not returning correct valueWorksheetFunction.CountA 没有返回正确的值
【发布时间】:2013-02-15 15:01:23
【问题描述】:

我要做的是遍历包含工作表名称的范围,如果单元格不为空,则将 CountA 函数的结果添加到计数变量。

所以计数变量应该等于我正在迭代的工作表上B9:B28 范围内非空白单元格的数量,但奇怪的是,该值等于我所在范围内非空单元格的数量正在通过 (sheet1!d5:d24)。

我做错了什么?这是我正在使用的代码:

For Each c In Worksheets("Sheet1").Range("d5:d24").Cells
    If Not IsEmpty(c) Then
        count = count + WorksheetFunction.CountA(c & "!b9:b28")
    End If
Next

我尝试了另一种方法来遍历第二个范围,如果单元格不为空,则将变量增加 1,但这会导致 运行时错误 13 类型不匹配错误。这就是我现在正在做的事情:

    For Each c In Worksheets("Sheet1").Range("d5:d24")
    If Not IsEmpty(c) Then
        For Each c2 In Worksheets(c).Range("b9:b28")
            If Not IsEmpty(c2) Then
                'count = count + WorksheetFunction.CountA(c & "!b9:b28")
                count = count + 1
            End If
        Next
    End If
Next

请帮帮我。非常感谢所有抽出时间回复的人。

【问题讨论】:

  • 我认为您需要为.CountA 提供范围对象而不是字符串。试试.CountA(Worksheets(c).Range("B9:B28"))
  • 您使用单元格(作为范围对象)并尝试向其添加地址符号。这肯定行不通。遵循@PeterAlbert 的建议。
  • 感谢大家的快速回复。我尝试了@Peter Albert 的解决方案,但它引发了类型不匹配错误。我提供了字符串,因为我认为这些函数在 VBA 中的工作方式与在 Excel 中的工作方式相同。
  • 终于明白了。根据@PeterL. 的回复,我使用了c.Value,它成功了。非常感谢大家。
  • @AmitKumarJha 将其作为您自己的答案提交,以避免社区的进一步努力。过几天你就可以接受了。

标签: vba excel


【解决方案1】:

基于@Peter Albert 和@Peter L. 的 cmets,终于让它工作了。正确的代码是:

For Each c In Worksheets("Sheet1").Range("d5:d24").Cells
If Not IsEmpty(c.Value) Then
    count = count + WorksheetFunction.CountA(c.Value & "!b9:b28")
End If
Next

非常感谢大家:)

【讨论】:

    【解决方案2】:

    试试这个:

    Sub CountColBForColD()
    Dim c As Range
    Dim r As Long   'row counter
    Dim rngB As Range
    Dim rngD As Range
    Dim lookSheet As Worksheet
    
    Set rngD = Sheets("Sheet1").Range("D5:D24")
    Set rngB = Range("B9:B28")
    r = 1
    
    For Each c In rngD
        If Not IsEmpty(c) Then
            On Error GoTo InvalidSheetName
            Set lookSheet = Sheets(rngB(r).Value)
            On Error GoTo 0
            Count = Count + WorksheetFunction.CountA( _
                lookSheet.Range(rngB.Address))
                c.Offset(0, 1).Value = Count
                r = r + 1
        End If
    NxtC:
    Next
    
    Exit Sub
    
    InvalidSheetName:
    Err.Clear
    MsgBox "Sheet named in  " & rngB(r).Address & " does not exist.", vbInformation
    Resume NxtC
    
    End Sub
    

    【讨论】:

    • 感谢@David Zemens,但我也得到了它的工作。非常感谢您如此迅速地制作潜艇。
    猜你喜欢
    • 2014-11-26
    • 2019-03-21
    • 1970-01-01
    • 2014-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多