![](/img/trans.png)
[英]VBscript: Copy/Paste data from one workbook to next blank row (specific cells) of another workbook
[英]How to copy paste data based on some criterias from one workbook to another(specific cells) using VBA?
我在下面编写了用于将数据从一个工作簿复制到另一个工作簿中的特定单元格的代码(我认为这是挑战,目标文件下面有月份和相关数据,每个月我都需要将数据复制到当前月份列,这就是为什么使用“最后一列”function 不覆盖历史月份也使其动态到 go 到没有当前月份数据的最后一列)。 即使代码运行良好,我还是想对其进行优化,以便轻松调试并避免将来出现问题; 当前年份已更改。 您有什么想法可以让这段代码更好吗?
代码
Dim x, LastRow, LastColumn, workfile, sourcefile As String
sourcefile = ActiveWorkbook.Name
workfile = ThisWorkbook.Name
LastRow = Range("A" & Rows.Count).End(xlUp).Row
For x = LastRow To 1 Step -1
If Workbooks(sourcefile).Worksheets("exchangedownload").Cells(x, 1).Value = "001B" And Workbooks(sourcefile).Worksheets("exchangedownload").Cells(x, 2).Value = "GBP" Then
Workbooks(sourcefile).Worksheets("exchangedownload").Cells(x, 8).Copy
Workbooks(workfile).Worksheets("A").Activate
Lastcolumn2 = Workbooks(workfile).Worksheets("A").Cells(28, 21).End(xlToLeft).Column + 1
Workbooks(workfile).Worksheets("A").Cells(28, Lastcolumn2).PasteSpecial xlPasteValues
Else
End If
If Workbooks(sourcefile).Worksheets("exchangedownload").Cells(x, 1).Value = "001R" And Workbooks(sourcefile).Worksheets("exchangedownload").Cells(x, 2).Value = "GBP" Then
Workbooks(sourcefile).Worksheets("exchangedownload").Cells(x, 8).Copy
Workbooks(workfile).Worksheets("A").Activate
Lastcolumn3 = Workbooks(workfile).Worksheets("A").Cells(29, 21).End(xlToLeft).Column + 1
Workbooks(workfile).Worksheets("A").Cells(29, Lastcolumn3).PasteSpecial xlPasteValues
Else
End If
If Workbooks(sourcefile).Worksheets("exchangedownload").Cells(x, 1).Value = "001B" And Workbooks(sourcefile).Worksheets("exchangedownload").Cells(x, 2).Value = "EUR" Then
Workbooks(sourcefile).Worksheets("exchangedownload").Cells(x, 8).Copy
Workbooks(workfile).Worksheets("A").Activate
Lastcolumn4 = Workbooks(workfile).Worksheets("A").Cells(35, 21).End(xlToLeft).Column + 1
Workbooks(workfile).Worksheets("A").Cells(35, Lastcolumn4).PasteSpecial xlPasteValues
Else
End If
If Workbooks(sourcefile).Worksheets("exchangedownload").Cells(x, 1).Value = "001R" And Workbooks(sourcefile).Worksheets("exchangedownload").Cells(x, 2).Value = "EUR" Then
Workbooks(sourcefile).Worksheets("exchangedownload").Cells(x, 8).Copy
Workbooks(workfile).Worksheets("A").Activate
Lastcolumn5 = Workbooks(workfile).Worksheets("A").Cells(36, 21).End(xlToLeft).Column + 1
Workbooks(workfile).Worksheets("A").Cells(36, Lastcolumn5).PasteSpecial xlPasteValues
Else
End If
Next
您需要做的就是确定每个条件的目标行是什么,然后将该值插入您要执行的代码块中。 这样你就可以避免多次重复相同的代码。
以下是您将如何做到这一点:
Dim x, LastRow, LastColumn, workfile, sourcefile, exchangedownload1, exchangedownload2 As String
Dim targetRow As Integer
sourcefile = ActiveWorkbook.Name
workfile = ThisWorkbook.Name
LastRow = Range("A" & Rows.Count).End(xlUp).Row
For x = LastRow To 1 Step -1
' store the values you are wanting to examine in these 2 variables
exchangedownload1 = Workbooks(sourcefile).Worksheets("exchangedownload").Cells(x, 1).Value
exchangedownload2 = Workbooks(sourcefile).Worksheets("exchangedownload").Cells(x, 2).Value
' determine the value for targetRow in this Case statement
Select Case exchangedownload2
Case Is "GBP"
If exchangedownload1 = "001B" Then
targetRow = 28
ElseIf enchangedownload1 = "001R" Then
targetRow = 29
Case Is "EUR"
If exchangedownload1 = "001B" Then
targetRow = 35
ElseIf enchangedownload1 = "001R" Then
targetRow = 36
End Select
' this is your code block that was being repeated with just a
' different value for your targetRow, so just plug the value for
' targetRow where it belongs and you only have to have this code block once
Workbooks(sourcefile).Worksheets("exchangedownload").Cells(x, 8).Copy
Workbooks(workfile).Worksheets("A").Activate
Lastcolumn2 = Workbooks(workfile).Worksheets("A").Cells(targetRow, 21).End(xlToLeft).Column + 1
Workbooks(workfile).Worksheets("A").Cells(targetRow, Lastcolumn2).PasteSpecial xlPasteValues
Next
LastRow = Range("A" & Rows.Count).End(xlUp).Row
For x = LastRow To 1 Step -1
' store the values you are wanting to examine in these 2 variables
xrate1 = Workbooks(sourcefile).Worksheets("exchangedownload").Cells(x, 1).Value
xrate2 = Workbooks(sourcefile).Worksheets("exchangedownload").Cells(x, 2).Value
' determine the value for targetRow in this Case statement
Select Case xrate2
Case "GBP"
Select Case xrate1
Case "001B": targetrow = 28
Case Else: targetrow = 29
End Select
Select Case xrate2
Case "EUR"
Select Case xrate1
Case "001B": targetrow = 35
Case Else: targetrow = 36
End Select
' copying data
Workbooks(sourcefile).Worksheets("exchangedownload").Cells(x, 8).Copy
Workbooks(workfile).Worksheets("A").Activate
Lastcolumn2 = Workbooks(workfile).Worksheets("A").Cells(targetrow, 21).End(xlToLeft).Column + 1
Workbooks(workfile).Worksheets("A").Cells(targetrow, Lastcolumn2).PasteSpecial xlPasteValues
Next
上面是调整后的,因为我不能将 If 语句与 Case 一起使用,Case 是 If、Elseif 的替代品。 但仍然收到编译错误,说它是“Next without For”和 End Select without Case statement((
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.