大家看到的是完成的成果,
可能不知在其中,寫碼人的艱辛
今天的主要是記錄【進化過程】
用于自勉,與大家共勉,努力
文章中的代碼你可復制使用哦
想要的效果 |
若用戶選擇了區域,選擇確定Button對此區域,進行清除空行 若用戶想要本表所用區域,選擇取消Button,對本表所用區域,進行清除空行 |
思路 |
1.? 出現對話框,用戶選擇區域,選擇Button 2.? 判斷用戶是否選擇,如果不選擇,就賦值Usedrange,如果選擇但行數<2行(此時用戶是鼠標點在一個單元格中)賦值Usedrange,如果行數>2行,說明用戶是做了選擇區域啦賦值SelectRngs 3.? 下面要運行判斷,計算行如果數據CountA=0,刪除行,否則不刪除 |
【第一版本】
'清除空行
PublicSub DeleteEmptyRowsInSelection()
Dim ActSht As Excel.Worksheet = xlapp.ActiveSheet
Dim UsedRngs As Excel.Range = ActSht.UsedRange
Dim rngs As Excel.Range
Dim oneRng As Excel.Range
Dim r AsInteger
Dim startRow AsInteger
Dim endRow AsInteger
'Dim SelectRngs As Excel.Range
On ErrorResumeNext
Dim SelectRngs As Excel.Range = xlapp.InputBox(Prompt:="選擇區域:"+ vbCrLf +"1.選擇、確定=你選擇區域"+ vbCrLf +"2.取消=默認是本表所用區域", Title:="請選擇",Default:=xlapp.Selection.address,Type:=8)
On ErrorGoTo0
If IsNothing(SelectRngs)Thenrngs = UsedRngs
Else
If SelectRngs.Rows.Count <2Thenrngs = UsedRngs
Elserngs = SelectRngs
EndIf
EndIf' 檢查選擇區域是否為空
'第1版本:(這種有點問題,特別是兩個空行時)
For Each oneRng In rngs.Rows
If xlapp.Application.WorksheetFunction.CountA(oneRng)=0Then
' 如果沒有數據,刪除該行oneRng.EntireRow.Delete()
'oneRng.EntireRow.Interior.ColorIndex = 20
EndIf
Next
EndSub
【出現問題】
【第2版本】第2版本
With ActSht
'獲取選擇區域的開始和結束行號startRow = rngs.RowendRow = startRow + rngs.Rows.Count -1
' 從最后一行開始向上遍歷,避免索引問題
For r = endRow To startRow Step-1
' 檢查整行是否有數據
If xlapp.Application.WorksheetFunction.CountA(rngs.Rows(r - startRow +1))=0Then
' 如果沒有數據,刪除該行.Rows(r).Delete
EndIf
Next r
EndWith
EndSub
【第2-1版本】
.CountA(rngs.CountA(rngs.Rows(r))=0
【出現問題】
一開始也不知出現在那里
后來用這個
MsgBox(.Address + "-" + r.ToString() + "-" + .Rows(r).Address)
輸出相關的內容,進行檢測,才能看到問題所在
后有修改成以下情況
【第2-2版本】
.CountA(rngs.CountA(rngs.Rows(r - startRow +1))=0
可以進行正確的刪除
【出現問題】
因為在WithActSht中運行,所以刪除是本表的行,
如果區域內的刪除,就會出錯連帶也刪除了外部的數據
【第3版本】
'第3版本
With rngs
'獲取選擇區域的開始和結束行號TotalRows = .Rows.Count
' 從最后一行開始向上遍歷,避免索引問題
For r = TotalRows To1Step-1
' 檢查整行是否有數據MsgBox(.Address +"-"+ r.ToString()+"-"+ .Rows(r).Address)
If xlapp.Application.WorksheetFunction.CountA(.Rows(r))=0Then
' 如果沒有數據,刪除該行.Rows(r).Delete
EndIf
Next r
EndWith
在本區域中運行,不影響外部,
先計算區域的總行數,
從最大行開始逆序計算,若為CountA=0,刪除本區域
完成
==提示==
插件命名:“哆哆Excel”,日前沒打包,
主要是自用,提高工作效率
大部分代碼,請看歷史文章
=若你有收獲,請分享給朋友免費學習=