2012-04-20 74 views
2

昨天我尋求的援助:VBA - 從其他工作簿中刪除一行?

  1. 從VBA宏創建一個新的工作簿,工作簿 'B'
  2. 複製了從工作簿 'A' 的行數據的工作簿 'B'
  3. 保存工作簿「B」在關閉之前以適當的格式存在

昨天的帖子(VBA - How to copy row in Excel from one workbook to another?)爲我的問題提供了一個可靠的解決方案。

從那時起,我的代碼進一步發展,並對它有了新的要求。我現在需要有一段代碼,它將根據工作簿「A」sheet1的單元格Ai中的值與工作簿「B」sheet1的單元格Ai中的值是否匹配,從工作簿「B」中刪除行中的複製行(我是整數變量被增加)。這段代碼在行中複製的代碼段之後運行很多,並且主行已經用新信息更新,因此爲什麼這可能看起來有些落後。

下面我有什麼應該給你什麼,我有一個想法:

... 
Do Until IsEmpty(newBk.Sheets("Bad Records").Range("A" & extFileRowCount)) 
    If newBk.Sheets("Bad Records").Range("A" & extFileRowCount) = _ 
     mainBk.Range("W" & sdRow).Value Then 
     'then delete the row and reinsert 
     '***** Stuck here. How do I remove the row? *****'  
     newBk.Sheets("Bad Records").Range _ 
      ("A" & extFileRowCount).remove '??? 
      newRowCount = newRowCount + 1 
      mainBk.Rows(sdRow).Copy newBk.Sheets _     
       ("Bad Records").Rows(newRowCount) 
     Else 
      extFileRowCount = extFileRowCount + 1 
     Loop 
... 

我想我該算法是正確的,但我卡在瞭如何刪除行。任何幫助將不勝感激。

QF

+0

哦,當然。我的錯。 – 2012-04-20 10:56:06

+0

沒有義務接受答案。因爲它們位於其他付費網站上,所以答案並不是關閉的。問題始終保持開放。 http://meta.stackexchange.com/questions/21258/asking-upvote-for-accepted-answer – Fionnuala 2012-04-20 11:20:43

回答

1

我也不太清楚爲什麼你在循環這一行

mainBk.Rows(sdRow).Copy newBk.Sheets _     
("Bad Records").Rows(newRowCount) 

但刪除行,你可以使用此代碼(UNTESTED

Sub Sample() 
    Dim i As Long 
    Dim Delrange As Range 

    Application.ScreenUpdating = False 

    ' 
    '~~> Rest of the code 
    ' 

    For i = extFileRowCount To 1 Step -1 
     If newBk.Sheets("Bad Records").Range("A" & extFileRowCount) = _ 
      mainBk.Range("W" & sdRow).Value Then 

      If Delrange Is Nothing Then 
       Set Delrange = newBk.Sheets("Bad Records").Rows(i) 
      Else 
       Set Delrange = Union(Delrange, newBk.Sheets("Bad Records").Rows(i)) 
      End If 
     End If 
    Next i 

    If Not Delrange Is Nothing Then Delrange.Delete 

    ' 
    '~~> Rest of the code 
    ' 

    Application.ScreenUpdating = True 
End Sub 

HTH

+0

我有「mainBk.Rows(sdRow).Copy newBk.Sheets(」Bad Records「).Rows(newRowCount )「代碼中的原因是,正如我昨天發佈的那樣,您提供了將工作簿」A「中的行復制到工作簿」B「的方法。正如我在這篇文章中所描述的,我有一個新的要求來刪除並重新插入一行(根據所述匹配條件)。我會看看你未經測試的代碼,並給它一個去。非常感謝。 – 2012-04-20 12:30:32

相關問題