2013-02-15 118 views
1

我想要做的是遍历包含工作表名称的范围,如果单元格不为空,则将​​函数的结果添加到count变量中。WorksheetFunction.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 

请帮我。提前感谢所有花时间回复的人。

+3

我认为你需要提供'了一系列对象,而不是一个字符串.CountA'。尝试使用'.CountA(Worksheets(c).Range(“B9:B28”))' – 2013-02-15 15:07:34

+1

您使用单元格(作为范围对象)并尝试向其添加地址表示法。当然,这不会工作。按照@PeterAlbert的建议。 – 2013-02-15 15:08:08

+0

感谢您的快速回复家伙。我试过@彼得艾伯特的解决方案,但它抛出了类型不匹配的错误。我提供了字符串,因为我认为这些函数在Excel中的功能与VBA相同。 – 2013-02-15 15:18:53

回答

4

基于@Peter阿尔伯特和@Peter L.的意见,终于得到了它的工作。正确的代码是:

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 

非常感谢球员:)

+0

我的+1特别适合自学! – 2013-02-15 15:36:07

1

试试这个:

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 
+0

谢谢@David Zemens,但我也得到了它的工作。真的非常感谢你这么快就完成了这个项目。 – 2013-02-15 15:28:26