【问题标题】:VBA excel macro 2 file handling merge error in readingVBA excel宏2文件处理读取合并错误
【发布时间】:2016-01-26 15:57:12
【问题描述】:

我正在尝试使用以下代码将 2 个 Excel 工作表合并到第三个工作表中

`Sub CommandButton1_Click()
 Dim MyFile As String
 Dim Filepath As String
 Filepath = "C:\temp\"
 MyFile = Dir(Filepath)
  'MyFile = "12_10_15_par.xlxs"
     'If MyFile = "12_10_15_par.xlsx" Then
     If MyFile = Cells(4, 2) Then
        Workbooks.Open (Filepath & MyFile)
        Worksheets("par").Range("A1:K1000").Copy
        ActiveWorkbook.Close
        ActiveSheet.Paste Destination:=Worksheets("match").Range("T1:AF1001")
        'Application.CutCopyMode = False
     End If
     MyFile2 = Dir(Filepath)
     If MyFile2 = Cells(5, 2) Then
        Workbooks.Open (Filepath & MyFile2)
        Worksheets("ops").Range("A1:K1000").Copy
        ActiveWorkbook.Close
        ActiveSheet.Paste Destination:=Worksheets("match").Range("D1:S1001")
        'Application.CutCopyMode = False
     End If

 End Sub`

也许我做错了,因为 Myfile2 保留了 First 值而不是获取 NEW 值...

【问题讨论】:

  • 您需要循环才能获得下一个值,答案即将到来;)

标签: vba excel merge


【解决方案1】:

这里是Dir()的使用方法,注意循环结束时MyFile = Dir(),它会在循环之前加载MyFile中的下一个文件名!

试试这个:

Sub CommandButton1_Click()
Dim MyFile As String, _
    Filepath As String, _
    oWb As Workbook, _
    pWb As Workbook

Filepath = "C:\temp\"
Set pWb = ThisWorkbook

MyFile = Dir(Filepath)
Do While MyFile <> ""
    If MyFile <> Cells(4, 2) And MyFile <> Cells(5, 2) Then
    Else
        Set oWb = Workbooks.Open(Filepath & MyFile)
        If MyFile <> Cells(5, 2) Then
            oWb.Worksheets("par").Range("A1:K1000").Copy Destination:=pWb.Worksheets("match").Range("T1:AF1001") '4
        Else
            oWb.Worksheets("ops").Range("A1:K1000").Copy Destination:=pWb.Worksheets("match").Range("D1:S1001") '5
        End If
        'Application.CutCopyMode = False
        oWb.Close
    End If
    MyFile = Dir()
Loop

End Sub

【讨论】:

  • 亲爱的 R3uK,非常感谢!不仅是为了答案……首先我要感谢你的标准程序视角,它必须无处不在(1+1 模式)。所以我必须打开 2 个工作簿(据我了解的实例)来完成这项工作。再次感谢!!!
  • @NektariosKyriakou:不客气!实际上,我在您的代码中添加了 2 个工作簿对象,以便轻松引用您正在处理的工作簿,一个对象用于您的初始工作簿,一个对象用于您将打开然后关闭的对象,然后循环并为另一个打开的工作簿使用相同的对象。如您所见,对象变量非常实用!
  • @NektariosKyriakou :如果您可以投票(帖子第一行左侧的向上箭头)我的回答,那就太好了,因为它将帮助我获得精炼徽章!跨度>
  • Mkay... 似乎不是这样,因为计数器仍为 0... 但它并不引人注目! ;)
  • 好吧,我猜你在看你帖子的价值,看我帖子第一行左边,还是0,你的是1! ;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-12-14
  • 2017-03-20
  • 2015-08-09
  • 1970-01-01
  • 2014-12-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多