[英]Need help refining my excel macro for deleting blank rows or performing another action
基本上,我要完成的工作是在文檔中搜索空白行並將其刪除(如果有)。 如果有空白行要刪除,這將非常有用; 但是,如果沒有空白行,則宏以錯誤結尾。 如果有人可以建議我如何將其變成“如果是空白行,那么,如果沒有,則那個”,我將不勝感激。
Sheets ("xml") .Select
Cells.Select
Selection.SpecialCells(x1CellTypeBlanks).Select
Selection.EntireRow.Delete
輸入我的第二個宏(這部分工作正常)
問候
讓我為您指出規范:
因此,您可以開始理解為什么當前代碼失敗或執行不希望的操作。 如果選擇中沒有空白單元格 ,會發生什么情況? 您會得到一個錯誤。 為什么?
因為在這種情況下, Selection.SpecialCells(xlCellTypeBlanks)
計算結果為Nothing
。 (您可以使用一些調試語句來驗證這一點)並且由於Nothing
沒有任何屬性或方法,您會得到一個錯誤,因為您實際上是在說:
Nothing.Select
這是一個空程序,不運行,不計算,等等。
因此,您需要使用以下方法測試虛無:
Sheets("xml").Select
Cells.Select
If Not Selection.SpecialCells(x1CellTypeBlanks) Is Nothing Then
Selection.SpecialCells(x1CellTypeBlanks).EntireRow.Delete
End If
我仍然建議不惜一切代價避免使用Select
(約99%的時間是多余的,並且會產生難以調試和維護的草率代碼)。
因此,您可以按照以下思路做一些更完整的事情:
Dim blankCells as Range '## Use a range variable.
'## Assign to your variable:
Set blankCells = Sheets("xml").Cells.SpecialCells(xlCellTypeBlanks)
'## check for nothingness, delete if needed:
If Not blankCells Is Nothing then blankCells.EntireRow.Delete
評論的跟進
因此,在VBA我們能夠宣布代表對象或數據/值的變量 ,很像一個方程中的數學變量。
Range
是Excel對象模型的對象部分的一種類型,由Workbook / Worksheets / Cells / Ranges / etc組成。 (遠遠超出我希望在這里傳達給您的范圍)
http://msdn.microsoft.com/en-us/library/office/ff846392(v=office.14).aspx
如果向下滾動到“為什么使用變量”部分,則可能是一個使用變量的好例子。
http://www.ozgrid.com/VBA/variables.htm
這當然很簡單...但是讀者的摘要版本是變量允許我們重復引用相同的對象(或sipmle數據類型的值),而無需每次都明確引用它。
還有一個方便的副作用,當我們使用變量而不是絕對引用時,代碼變得更易於閱讀,維護和調試:
Dim rng as Range
Set rng = Sheets(1).Range("A1:Q543").Resize(Application.WorksheetFunction.CountA(Sheets(1).Range("A:A"),))
想象一下,相當(但不是很荒謬)復雜的范圍構造。 如果您需要在代碼中多次引用該范圍,則不將其分配給變量是很愚蠢的,除非是出於其他原因(除了避免鍵入錯誤)(否則可能會混淆其中的一部分)。 這也很容易維護,因為您只需要修改一個賦值語句,並且隨后對rng
所有引用都將反映該更改。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.