带循环的宏Excel

gc0ot86w  于 2023-05-01  发布在  其他
关注(0)|答案(1)|浏览(146)

我在excel2016上使用不同文件执行操作时遇到了问题。
知道“Source”文件夹包含5个文件,名称为Car1、Car2、Car3、Car4、Car5
知道“Destination”文件夹包含Excel文件“Home”,我试图写的宏应该执行以下操作:
为“Source”文件夹中的每个文件复制从E4到E124范围内的数据,并将第一个范围粘贴到“Home”工作簿的第二个工作表中,将第二个范围粘贴到“Home”工作簿的第三个工作表中,依此类推。..
我不能正确地写它,另外我总是得到“运行时错误1004范围类的方法失败”
下面是我尝试的vba宏的一个例子:

Dim wbSource As Workbook
  Dim wbDest As Workbook
  Dim wsDest As Worksheet
  Dim i  As Integer

Set wbDest = Workbooks.Open("C:\Destination\Home.xlsx")

for i =1 to 5
  Set wbSource= Workbooks.Open("C:\Source\Car" & i & ".xlsx")
  Set wsDest=wbDest.Sheets(i)
  wbSource.Sheets(1).Range("E4:E124").Copy wsDest.Range("A1")
  wbSource.Close
 Next i
wbDest.Close SaveChanges:=True
End Sub

如果你能帮我的话,太感谢你了

k3bvogb1

k3bvogb11#

循环复制数据

  • Sheets集合还包括图表。请使用Worksheets集合。
  • 您说的第一个范围(源工作表)到第二个目标工作表,因此使用i + 1
  • 此代码位于与正在处理的工作簿不同的工作簿中。
Sub ImportCarData()
    Const PROC_TITLE As String = "Copy Car Data to Home"
    On Error GoTo ClearError

    ' Open destination.
    Dim dwb As Workbook: Set dwb = Workbooks.Open("C:\Destination\Home.xlsx")

    Dim swb As Workbook, sws As Worksheet, srg As Range
    Dim dws As Worksheet, dfCell As Range, i As Long

    For i = 1 To 5
        ' Source
        Set swb = Workbooks.Open("C:\Source\Car" & i & ".xlsx")
        Set sws = swb.Worksheets(1)
        Set srg = sws.Range("E4:E124")
        ' Destination
        Set dws = dwb.Worksheets(i + 1)
        Set dfCell = dws.Range("A1")
        ' Copy.
        srg.Copy dfCell
        ' Close source.
        swb.Close SaveChanges:=False
    Next i
    
    ' Close destination.
    dwb.Close SaveChanges:=True
    
    ' Inform.
    MsgBox "Data copied.", vbInformation, PROC_TITLE

ProcExit:
    Exit Sub
ClearError:
    MsgBox "Runb-time error '" & Err.Number & "':" & vbLf & vbLf _
         & Err.Description, vbCritical, PROC_TITLE
    Resume ProcExit
End Sub

相关问题