![](/img/trans.png)
[英]Selection.SpecialCells() method returns unexpected range (Excel VBA)
[英]SpecialCells method of Excel Range strange behaviour
我已經編寫了一個宏來使用excel范圍對象的SpecialCells方法查找某個范圍內的空白單元格。 當我嘗試執行以下代碼時,我得到一個異常為“找不到單元格”。
Sub test()
Debug.Print Sheet1.Range("A1:D4").SpecialCells(xlCellTypeBlanks).Address
End Sub
腳步:-
收到的輸出:
運行時錯誤'1004'。 沒有找到細胞。
產量預期:
$ A $ 1:$ d $ 4
情況1:
現在,如果我做單元格A1的任何操作。 給出填充顏色等操作。調用test()宏,然后不拋出異常。
收到的輸出:
$ A $ 1
產量預期:
$ A $ 1:$ d $ 4
案例2:
假設我在單元格B3中給出任何值。 調用test()宏,不拋出異常。
收到的輸出:
$ B $ 1:$ B $ 2,$ A $ 1:$ A $ 3
產量預期:
$ A $ 1:$ d $ 4
案例3:
如果我嘗試編輯值或填充范圍“A1:D4”之外的單元格,例如E10並執行test()方法,那么它會給我正確的輸出。
收到的輸出:
$ A $ 1:$ d $ 4
注意:使用新的excel實例執行每個Case。
原因是,當返回范圍時, SpecialCells
“查看” UsedRange
。
因此,在未使用的工作表上使用SpecialCells
將返回Runtime Error '1004'. No Cells Found.
Runtime Error '1004'. No Cells Found.
(另外,總是使用SpecialCells進行錯誤處理)
當您更改單元格A1時,它將成為工作表UsedRange
,因此您的案例1返回“A1”
下面的代碼看起來返回Range(“A1:D4”)。SpecialCells(xlCellTypeBlanks)for
A1:A4
A1:A4
具有usedrange重置的表(實際上是1) - 失敗
Sub Test() Dim ws As Worksheet Set ws = Sheets.Add On Error Resume Next 'blank sheet Debug.Print "Blank sheet " & ws.Range("A1:D4").SpecialCells(xlCellTypeBlanks).Address 'enter in A10 ws.[a10] = "test" Debug.Print "With A10 " & ws.Range("A1:D4").SpecialCells(xlCellTypeBlanks).Address 'clear a10 ws.[a10].ClearContents Debug.Print "With A10 cleared " & ws.Range("A1:D4").SpecialCells(xlCellTypeBlanks).Address 'reset range ActiveSheet.UsedRange Debug.Print "With A10 cleared and range reset" & ws.Range("A1:D4").SpecialCells(xlCellTypeBlanks).Address On Error GoTo 0 End Sub
.SpecialCells
使用工作表的使用范圍而不是特定單元格,除非特定單元格在使用范圍內。
要在一個全新的工作表上測試Specialcells
會給你錯誤,因為usedrange只是$ A $ 1。 如果$ A $ 1被着色,那么您將不會像上面的案例2中那樣得到錯誤。
你必須非常小心地使用Specialcells
。 這是一個不會在新工作表上給出錯誤的示例。
Sub Sample()
If ActiveSheet.UsedRange.Column > 1 Or ActiveSheet.UsedRange.Row > 1 Then
Debug.Print ActiveSheet.UsedRange.SpecialCells(xlCellTypeBlanks).Address
End If
End Sub
現在在Cell D5中鍵入內容。 說“Blah Blah”
現在運行此代碼
Sub Sample()
Debug.Print Sheet1.Range("A1:D4").SpecialCells(xlCellTypeBlanks).Address
End Sub
您會注意到這將起作用,因為范圍在UsedRange地址內。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.