将多个选项卡中的特定行复制并粘贴到另一个工作簿中

时间:2015-03-09 14:57:01

标签: excel vba excel-vba

因此,我尝试做的是整合一个工作簿(wrksource)的多个选项卡中的所有行,并将它们粘贴到另一个工作簿(wrk)中的一个选项卡中。基本上每天我都会得到一个包含多个标签的文件,我希望代码能够通过所有标签进行互动,找出所有包含" USD"在列" G"中,复制所有这些行并将其全部粘贴到名为" USD Historic"的选项卡中。在另一本工作簿中。到目前为止,我已经提出了以下代码,但是我仍然遇到了#34; Type Mismatch"错误。感谢任何建议或意见。谢谢!

更新:我已将代码更改为以下内容,该文件打开源excel文档但是错误消息"下标超出范围"正在冒出来。任何建议都是适用的。在此先感谢您的帮助。

   Sub combine()

   Dim wbk As Workbook
   Dim wbksource As Workbook
   Dim s As Long
   Dim i As Long
   Dim Lastrow As Long

   'Define Workbook with VBA
   Set wbk = ActiveWorkbook

   'Define Source workbook
   Set wbksource = Workbooks.Open("C:\Users\kgomes\Desktop\New folder\Daily Currency Values\USD Today.xls")

   For s = 1 To wbksource.Worksheets.Count

   Application.GoTo Sheets(s).[a1]

   Lastrow = Sheets(s).Range("A" & Rows.Count).End(xlUp).Row

        For i = 1 To Lastrow

           If wrksource.Sheets(s).Cells(i, "G").Value = wbk.Sheets("USD Historic").Range("U1") Then

           wrksource.Sheets(s).Cells(i, "G").EntireRow.Select
           Selection.Copy Destination:=wbk.Sheets("USD Historic").Range("A" & Rows.Count).End(xlUp).Offset(1)

           End If
        Next
   Next

   End Sub

2 个答案:

答案 0 :(得分:0)

您的代码中存在2个问题。

首先,您尝试同时声明变量。这不起作用。如上所述,wbk被声明为变体(因为你没有给它一个类型),并且wbksource被声明为“Workbooks”类型的对象,这不是你想要做的。将该行替换为:

Dim wbk As Workbook
Dim wbksource As Workbook

其次,通过工作表的循环不会像写的那样工作。将其更新为:

For Each s In wbksource.Worksheets

然后它将遍历工作表。

希望这有帮助。

答案 1 :(得分:0)

我做了一些微小的改动,它在这里工作得很好,试试看:

Sub combine()

Dim wbk             As Workbooks
Dim wbksource       As Workbooks
Dim lstr            As Long
Dim lstr2           As Long

Set wbk = ActiveWorkbook

Workbooks.Open ("C:\Users\kgomes\Desktop\New folder\Daily Currency Values\USD Today.xls")

Set wbksource = ActiveWorkbook

For i = 1 To wbksource.Worksheets.Count

lstr = Sheets(i).Range("A" & Rows.Count).End(xlUp).Row

    For i = 1 To lstr
    If Sheets(i).Cells(i, "G") = "USD" Then

        lstr2 = Sheets("USD Historic").Range("A" & Rows.Count).End(xlUp).Row + 1
        Sheets(i).Cells(i, "G").EntireRow.Copy
        wbk.Worksheets("USD Historic").Range("A" & lstr2).Paste

    End If
    Next

Next
End Sub