簡體   English   中英

使用條件VBA或過濾器復制和粘貼

[英]Copy and Paste with criteria VBA or Filter

我叫Pedro,我是VBA開發的初學者。 我有一個關於復制和粘貼條件的問題。 我有向我報告一個錯誤的代碼,該代碼在我運行一個將行復制並粘貼到另一個工作簿中的宏時打開1004工作簿。 如何使用以下代碼解決此錯誤?

    Dim LastRow As Integer, i As Integer, erow As Integer
    LastRow = ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row

    Application.ScreenUpdating = False
    Application.Calculation = xlManual

    For i = 2 To LastRow
     'If Cells(i, 9) = "Aline" Then
        'Range(Cells(i, 1), Cells(i, 16)).Select
        'Selection.Copy

        'Workbooks.Open Filename:="L:\Controle\Assessoria Tecnica\Pessoas\Aline.xlsx"
        'Worksheets("Plan1").Select
        'erow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row

        'ActiveSheet.Cells(erow, 1).Select
        'ActiveSheet.Paste
        'ActiveWorkbook.Save
        'ActiveWorkbook.Close
        'Application.CutCopyMode = False
End If

Next i

    Application.ScreenUpdating = True '
    Application.Calculation = xlCalculationAutomatic

    MsgBox "Informações inseridas com sucesso", vbInformation
End sub

我也想解釋一下我的代碼是怎么做的。 我的代碼匹配“ I”列中的特定條件(例如Aline,Carol,Karine,Lucas,Thiago),然后根據“ I”列中的匹配條件,復制每一行並將其粘貼到另一工作簿中。 那么您認為在這種情況下會出現什么問題? 我該如何解決錯誤? 還是制作新的代碼以復制帶有條件的行並將其粘貼到其他工作簿中?

至於您發布的代碼,您已注釋了IF塊,但未注釋全部。 END IF也應加注釋。

過去我做過類似的事情,所以讓我提供一些代碼片段作為建議。 這應該使您入門。 這絕不是正確或完美的做事方式,但它很容易理解。 經過多年的VB編寫,我不會這樣寫。 :)

    Sub Open_SlaveWB()
        vFile = Workbooks.Open Filename:="L:\Controle\Assessoria Tecnica\Pessoas\Aline.xlsx"
        If TypeName(vFile) = "Boolean" Then Exit Sub
        Set UpdateSheet = wbMaster.Sheets("Update") 'Name of the sheet in the master WB to copy into
        Set wbSlave = Workbooks.Open(vFile)
        Set SlaveSheet = wbSlave.Sheets("Plan1") 'Name of the sheet in the slave WB to copy from

        Exit Sub
    errMessage:
        MsgBox Err.Number & vbCrLf & Err.Description, vbCritical, "Error!"
        Resume Next
    End Sub

如果您完全確定路徑和文件名將保持不變,請使用此設置,否則我建議將vfile設置為: Application.GetOpenFilename("Excel-files,*.xlsx", 1, "Select One File To Open", , False) ,這將打開文件選擇對話框。

我發現將工作表復制到主工作簿並從那里獲取數據比隨后的從屬工作簿更有效。

Sub Copy_SlaveToMaster()
    LastSlaveRow = SlaveSheet.UsedRange.Rows.Count
    LastSlaveColumn = SlaveSheet.UsedRange.Columns.Count
    SlaveSheet.Range(Cells(1, 1), Cells(LastSlaveRow, LastSlaveColumn)).Copy
    UpdateSheet.Cells(1, 1).PasteSpecial

    Exit Sub
errMessage:
    MsgBox Err.Number & vbCrLf & Err.Description, vbCritical, "Error!"
    Resume Next
End Sub

您顯然不需要從屬WB保持打開狀態。

Sub Close_SlaveWB()
    Application.DisplayAlerts = False
    wbSlave.Close
    Application.DisplayAlerts = True

    Exit Sub
errMessage:
    MsgBox Err.Number & vbCrLf & Err.Description, vbCritical, "Error!"
    Resume Next
End Sub

在這里,您只需編寫一些代碼來操作新工作表,然后根據需要使用新工作表中的數據。

暫無
暫無

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

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