使用条件VBA或过滤器复制和粘贴



我的名字是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:ControleAssessoria TecnicaPessoasAline.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:ControleAssessoria TecnicaPessoasAline.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

从那里,您只需编写一些代码来操作新工作表,根据需要使用新工作表中的数据。

最新更新