簡體   English   中英

如果 A 列(或 B;C 等)為空,則在工作表之間復制並粘貼最后一行將覆蓋值

[英]Copy between sheets and paste last row will overwrite values if column A (or B; C etc.) is empty

我想使用宏將單元格范圍從 sheet1 復制並粘貼到 sheet2 到最后一行。 問題是,如果在 sheet2 列 A(或 B;C)為空,則最后一個操作(粘貼)將覆蓋目標(sheet2)中的最后一行

就是不能正確。

Private Sub vaart_md_sis_Click()

Dim SourceWS As Worksheet, DestWS As Worksheet
Dim SourceRng As Range, DestCell As Range
Dim lloop As Long
Set SourceWS = Sheets("md") 
Set DestWS = Sheets("y_koond") 
Application.ScreenUpdating = 0
With SourceWS
Set DestCell = DestWS.Range("a" & Rows.Count).End(xlUp).Offset(1)
For lloop = 1 To 7
Set SourceRng = Choose(lloop, .Range("A3"), _
.Range("B3"), .Range("C3"), .Range("F3"), .Range("G3"), .Range("H3"), .Range("I3")) 
SourceRng.Copy
DestCell.Offset(, lloop - 1).PasteSpecial xlPasteValues
Next lloop
End With
With Application
.CutCopyMode = 0
.ScreenUpdating = 1
End With    
End Sub       

這應該有效。 只需將最后一行基於要復制的列,我認為這就是您正在做的事情。 我假設列的長度不同,否則你根本不需要循環。

您也可以使用Offset而不是Choose - 會稍微縮短代碼。

Private Sub vaart_md_sis_Click()

Dim SourceWS As Worksheet, DestWS As Worksheet
Dim SourceRng As Range, DestCell As Range
Dim lloop As Long

Set SourceWS = Sheets("md")
Set DestWS = Sheets("y_koond")

Application.ScreenUpdating = 0

With SourceWS
    For lloop = 1 To 7
        Set SourceRng = Choose(lloop, .Range("A3"), _
            .Range("B3"), .Range("C3"), .Range("F3"), .Range("G3"), .Range("H3"), .Range("I3"))
        Set DestCell = DestWS.Cells(Rows.Count, lloop).End(xlUp).Offset(1)
        SourceRng.Copy
        DestCell.PasteSpecial xlPasteValues
        'better to avoid copy/paste: destcell.value=sourcerng.value
    Next lloop
End With

With Application
    .CutCopyMode = 0
    .ScreenUpdating = 1
End With

End Sub

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM