WorksheetFunction.CountA在另一张表上使用命名单元格

我目前有以下function代码分别引用Sheet1上的命名单元格:

Dim emp1 As Boolean Dim emp2 As Boolean Dim emp3 As Boolean With Sheet1 If WorksheetFunction.CountA(.Range("AI"), .Range("AM"), .Range("AQ")) = 0 And wVOE1 = False And IsEmpty(.Range("DQ")) Then emp1 = False Else emp1 = True End If If WorksheetFunction.CountA(.Range("FH"), .Range("FL"), .Range("FP")) = 0 And wVOE2 = False And IsEmpty(.Range("IV")) Then emp2 = False Else emp2 = True End If If WorksheetFunction.CountA(.Range("KL"), .Range("KP"), .Range("KT")) = 0 And wVOE3 = False And IsEmpty(.Range("NZ")) Then emp3 = False Else emp3 = True End If End With 

最后,我想了解如何使用CountA函数与范围而不是引用单个单元格。 我最初尝试下面的代码,这是行不通的:

 Dim emp1 As Boolean Dim emp2 As Boolean Dim emp3 As Boolean With Sheet1 If WorksheetFunction.CountA(Range("AI:AT")) = 0 And wVOE1 = False And IsEmpty(Sheet1.[DQ]) = True Then _ emp1 = False _ Else _ emp1 = True If WorksheetFunction.CountA(Range("FH:FS")) = 0 And wVOE2 = False And IsEmpty(Sheet1.[IV]) Then _ emp2 = False _ Else _ emp2 = True If WorksheetFunction.CountA(Range("KL:KW")) = 0 And wVOE3 = False And IsEmpty(Sheet1.[NZ]) Then _ emp3 = False _ Else _ emp3 = True End With 

我很难弄清楚为什么后面的代码不起作用。 有没有办法引用范围? 在此先感谢您的帮助。

在第二个代码块中,您的With Sheet1块不被所附的代码使用,因为您的Range()引用没有将它们链接到With对象的前导段

 Dim emp1 As Boolean Dim emp2 As Boolean Dim emp3 As Boolean With Sheet1 Debug.Print .Name, .Parent.Name '<< check it's the right sheet ' and the right workbook... emp1 = Not (WorksheetFunction.CountA(.Range("AI:AT")) = 0 And _ wVOE1 = False And IsEmpty(.[DQ])) emp2 = Not (WorksheetFunction.CountA(.Range("FH:FS")) = 0 And _ wVOE2 = False And IsEmpty(.[IV])) emp3 = Not (WorksheetFunction.CountA(.Range("KL:KW")) = 0 And _ wVOE3 = False And IsEmpty(.[NZ])) End With 

因为我命名的单元格镜像列名称,Excel解释我的单元格范围为列范围,这就是为什么我的代码不起作用。 我添加了一个“。” 范围之前(如前所述)和一个“z1”到我的所有单元名称的开头,现在的代码是function性的:

 Dim emp1 As Boolean Dim emp2 As Boolean Dim emp3 As Boolean With Sheet1 If WorksheetFunction.CountA(.Range("z1AI:z1AT")) = 0 And wVOE1 = False And IsEmpty(Sheet1.[z1DQ]) = True Then _ emp1 = False _ Else _ emp1 = True If WorksheetFunction.CountA(.Range("z1FH:z1FS")) = 0 And wVOE2 = False And IsEmpty(Sheet1.[z1IV]) Then _ emp2 = False _ Else _ emp2 = True If WorksheetFunction.CountA(.Range("z1KL:z1KW")) = 0 And wVOE3 = False And IsEmpty(Sheet1.[z1NZ]) Then _ emp3 = False _ Else _ emp3 = True End With