2017-06-29 42 views
0

我想查找包含精確值的單元格,並在這些單元格的前面插入空白行。我已經有了代碼,可以找到並插入這些行,但只能在這些單元格的後面。VBA - 在列中查找值並在這些單元格前插入空行

的代碼是在這裏:

Private Sub SearchnInsertRows() 

Dim LastRow As Long 
Dim rng As Range, C As Range 
Dim vR(), n As Long 


With Worksheets("INPUT_2") ' <-- here should be the Sheet's name 
    LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row ' last row in column A 
    Set rng = .Range("A1:A" & LastRow) ' set the dynamic range to be searched 

    ' loop through all cells in column A and copy below's cell to sheet "Output_2" 
    For Each C In rng 
     If C.Value = "Workflow" Then 
      .Range(Cells(C.Row + 1, 1), Cells(C.Row + 8, 8)).EntireRow.Insert 
     End If 
    Next C 


End With 

End Sub 

該代碼將增加8行中的所有細胞,它含有單詞「工作流」的背後,但我無法弄清楚,如何把它們在細胞中的前「工作流程「

我想,當我把 - 而不是+,它要解決它,但是當我改變這一行是這樣的:

.Range(Cells(C.Row - 1, 1), Cells(C.Row - 8, 8)).EntireRow.Insert 

並運行它時,Excel將卡住,仍然添加行。

請問您有什麼建議,請問我該怎麼做?

非常感謝

+0

代替'Each'循環使用'對於i = LASTROW 1個步驟-1'循環來從最後一排第一。插入/刪除行總是要倒退(從下到上)。要在特定行之前插入行,可以使用'.Insert xlShiftDown'來判斷活動行是否應該向下或向上移動(參見[Range.Insert方法](https://msdn.microsoft.com/VBA/Excel-VBA /物品/範圍嵌法-Excel文件))。 –

+0

感謝您的諮詢!我嘗試改變部分beginnig'For Each' it - 'For i = LastRow To 1 Step -1 If rng.Cells.Value =「Workflow」Then .Cells(「A」)。EntireRow.Insert 結束如果 接下來我'現在我得到錯誤消息_類型mismatch_該行'.Cells(「A」)。EntireRow.Insert'。請問我做錯了什麼? – Srpic

+1

您沒有正確使用'.Cells',您需要指定像'.Cells(row,column)'這樣的行和列,或者改爲使用'.Rows(i)'。查看我的答案以獲得解決方案。 –

回答

1

相反的For Each循環使用For i = LastRow to 1 Step -1循環來循環向後從最後一排第一。插入或刪除行總是要向後(從下到上)進行,因爲那樣只會影響已經處理過的行,否則未處理行的行數將會改變並且弄亂循環。

類似下面應該工作:

Option Explicit 'Very first line in a module to enforce correct variable declaring. 

Private Sub SearchAndInsertRows() 
    Dim lRow As Long, iRow As Long 

    With Worksheets("INPUT_2") ' <-- here should be the Sheet's name 
     lRow = .Cells(.Rows.Count, "A").End(xlUp).Row ' last row in column A 

     'loop backwards (bottom to top = Step -1) through all rows 
     For iRow = lRow To 1 Step -1 
      'check if column A of current row (iRow) is "Workflow" 
      If .Cells(iRow, "A").Value = "Workflow" Then 
       .Rows(iRow).Resize(RowSize:=8).Insert xlShiftDown 
        'insert 8 rows and move current (iRow) row down (xlShiftDown) 
        'means: insert 8 rows ABOVE current row (iRow) 

       '.Rows(iRow + 1).Resize(RowSize:=8).Insert xlShiftDown 
        'alternatively use .Rows(iRow + 1) to insert BELOW current row (iRow) 
      End If 
     Next iRow 
    End With 
End Sub 
+0

我明白了,現在我明白了。順便說一句。代碼正常工作。非常感謝你! – Srpic

相關問題