2017-05-30 145 views
1

我想問下我的代碼的一些幫助。這是在導入文件後使用宏記錄器捕獲的。 基本上,我導入了一個文本文件,並將文件導入Excel(宏開始)後,我刪除行10-12和自動篩選它是有效的。 (宏停止)刪除空行

之後,我想從A10開始刪除所有空/空行。所以我添加了代碼(在"'ADDED to DELETE ROWS"下)。 我需要的是用「TEST」刪除所有行,刪除所有空行並過濾第一行。

代碼的第一部分正在工作,但刪除空白行並不起作用。 你能幫我找出下面我的代碼有什麼問題嗎? 請點擊鏈接顯示結果(之前和之後)。

results-image

謝謝你,感謝你的幫助。

Sub Macro2() 
    Rows("10:12").Select 
    Selection.Delete Shift:=xlUp 
    Selection.AutoFilter 

    'ADDED to DELETE ROWS 
    'Worksheets("Sheet1").Activate 
    On Error Resume Next 
    With Range("A10:A") 
     .Value = .Value 
     .SpecialCells(xlCellTypeBlanks).EntireRow.Delete 
    End With 
End Sub 

問候,wezzer

+0

範圍(「A10:A」)將無法選擇單元格A10下的其餘列。在這裏尋找替代品:https://stackoverflow.com/questions/6301665/how-to-count-the-number-of-rows-in-excel-with-data/14390619#14390619 – xthestreams

+0

謝謝xthestreams,我是新的以超越宏觀。該代碼來自其他帖子,我編輯它。基本上,我想刪除空白行,以及像「文本」的文本行。 – wezzer

回答

1
  • 我強烈建議避免使用On Error Resume Next因爲這只是靜音錯誤消息和你沒有看到發生了什麼。

  • 總是使用myWs.Range這樣的工作表來限定Range,以避免選擇錯誤的工作表並弄亂數據。永遠不要假設工作表。

  • 避免使用選擇。選擇減慢你的代碼很多。

最後你的代碼可能看起來類似的東西:

Sub DeleteSeveralRows() 
    Dim myWs As Worksheet 
    Set myWs = ThisWorkbook.Worksheets("MySheetName") 'set your sheet name 

    'Delete rows 10 to 12 and autofilter 
    With myWs.Rows("10:12") 
     .Delete Shift:=xlUp 
     .AutoFilter 
    End With 

    Dim lastRow As Long 
    lastRow = myWs.Range("A" & myWs.Rows.Count).End(xlUp).Row 'find last used row 

    With myWs.Range(myWs.Cells(10, "A"), myWs.Cells(lastRow, "A")) 
     .Value = .Value 'convert formulas to values whithin the range from with block (column A only) 
     .SpecialCells(xlCellTypeBlanks).EntireRow.Delete 'delete rows where column A is blank 
    End With 
End Sub 

作爲替代.Value = .Value這在A列的公式只有轉換成值(僅列A在with - 塊引用)。您可以使用.EntireRow.Value = .EntireRow.Value來轉換整個行。

我還推薦使用myWs.UsedRange.Autofilter作爲上次聲明而不是在開始時進行篩選,以確保所有行都用於自動篩選。

+0

非常感謝! – wezzer

+0

@wezzer如果此答案解決了您的問題,請考慮將其標記爲解決方案,以便任何人都可以看到此問題已解決。 –