簡體   English   中英

Excel的SpecialCells方法奇怪的行為

[英]SpecialCells method of Excel Range strange behaviour

我已經編寫了一個宏來使用excel范圍對象的SpecialCells方法查找某個范圍內的空白單元格。 當我嘗試執行以下代碼時,我得到一個異常為“找不到單元格”。

Sub test()
Debug.Print Sheet1.Range("A1:D4").SpecialCells(xlCellTypeBlanks).Address
End Sub

腳步:-

  1. 打開一個新的Excel實例。
  2. 按ALT + F11 /打開VBE
  3. 插入一個新模塊
  4. 粘貼上面的代碼並運行上面指定的測試宏。

收到的輸出:

運行時錯誤'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

  1. 空白表 - 失敗
  2. 填寫A10的紙張 - A1:A4
  3. A10清除的紙張 - A1:A4
  4. 具有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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM