2017-10-09 35 views
0

我公司目前有以下功能的代碼,引用命名的單元格工作表Sheet1上分別:WorksheetFunction.CountA另一個頁面上使用命名的單元格

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 

我很難搞清楚爲什麼後面的代碼不起作用。有沒有辦法引用範圍?在此先感謝您的幫助。

+0

'沒work' - 它是怎麼不行?如果範圍在不同的工作表上,您將需要限制工作表,如下所示:'Sheet2.Range(「AI:AT」)'或'Sheet3.Range(「AI:AT」)''。或'Worksheet(「Sheet2」)。範圍(「AI:AT」)' –

+0

emp1,emp2和emp3僅依賴於變量wVOE1,wVOE2和wVOE3。例如,如果wVOE = false並且sheet1。[AI]被填充,則emp1將返回爲false。 @ScottHoltzman – Kim

+0

當我限定爲:WorksheetFunction.CountA(Sheet1.Range(「AI:AT」))時,即使填滿單元格,也會返回0。我也嘗試了Worksheet(「Sheet1」)。Range(「AI:AT」),它也返回0. @ScottHoltzman – Kim

回答

0

因爲我命名的單元格鏡像列名稱,Excel將我的單元格範圍解釋爲列範圍,這就是爲什麼我的代碼無法工作。我添加了一個「。」範圍之前(如先前所建議的),以及「Z1」我所有的單元名稱的開始,現在的代碼功能:

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 
2

在第二個代碼塊的工作表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 
+0

由於某些原因,CountA功能仍然不適用於我; emp1僅依賴於wVOE1和[DQ]。我的第一反應是認爲我的代碼中有不同的部分會以某種方式干擾,但個別引用正在工作這一事實讓我不以爲然。 @TimWilliams – Kim

+0

如果沒有其他代碼,很難提供任何建議。是否確定正確的工作簿中有正確的表單? 「Sheet1」在這裏是「內置的」對象還是你聲明和分配的變量? –

+0

並且「sheet1」的「Name」名稱與「Sheet1」的「CodeName」名稱相同嗎?你的'Sheet1'指的是帶有'CodeName'的那個(或者你自己定義的一個變量),但是這張表可能在Excel中顯示爲「Sheet3」。 – YowE3K

相關問題