因此,我尝试做的是整合一个工作簿(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
答案 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