【问题标题】:Excel VBA - copy multiple columns from 2 workbooks into 1 workbookExcel VBA - 将 2 个工作簿中的多列复制到 1 个工作簿中
【发布时间】:2016-10-20 20:12:04
【问题描述】:

我有两个工作簿,它们的多个列中有数据,我想将它们复制并放入包含此宏的新工作簿中。基本上我希望能够打开当前工作簿“z”,运行宏,并从其他两个现有工作簿中移动/复制数据。

我一直在这里搜索并查看来自不同帖子的不同想法,并且认为我已经大致了解了这一点,但是当我运行此代码时遇到了“运行时错误 1004”。错误发生在第一个 y.Range 行,我还没有弄清楚原因。

我已经成功地从“x”工作簿中提取数据,但不能从“y”中提取数据。

我是 VBA 新手,因此我们将不胜感激。

谢谢,

Sub SellPrice()

Dim x As Worksheet, y As Worksheet, z As Worksheet, LastRow&

Workbooks.Open ("C:\Users\tsmith\Desktop\SellPrice\PRODUCT.XLS")
Workbooks.Open ("C:\Users\tsmith\Desktop\SellPrice\GrossProfit.xls")

Set x = Workbooks("PRODUCT.XLS").Worksheets("ProductFile")
Set y = Workbooks("GrossProfit.xls").Worksheets("Sellprice")
Set z = Workbooks("SellPriceMacro.xlsm").Worksheets("Sheet1")

LastRow = x.Cells.SpecialCells(xlCellTypeLastCell).Row

x.Range("B4:B" & LastRow).Copy z.Cells(Rows.Count, "A").End(xlUp).Offset(1, 0)
x.Range("C4:C" & LastRow).Copy z.Cells(Rows.Count, "B").End(xlUp).Offset(1, 0)
x.Range("K4:K" & LastRow).Copy z.Cells(Rows.Count, "C").End(xlUp).Offset(1, 0)

LastRow = y.Cells.SpecialCells(xlCellTypeLastCell).Row

y.Range("B2:B" & LastRow).Copy z.Cells(Rows.Count, "E").End(x1Up).Offset(1, 0)
y.Range("C2:C" & LastRow).Copy z.Cells(Rows.Count, "F").End(x1Up).Offset(1, 0)
y.Range("D2:D" & LastRow).Copy z.Cells(Rows.Count, "G").End(x1Up).Offset(1, 0)
y.Range("H2:H" & LastRow).Copy z.Cells(Rows.Count, "H").End(x1Up).Offset(1, 0)

Application.CutCopyMode = False

End Sub

【问题讨论】:

    标签: vba excel macros


    【解决方案1】:

    看看你在使用Range()之前是如何放置工作表的? (y.Range(...)) - 您需要在使用 Cells()Rows.CountColumns.Count(和其他范围)时执行此操作。否则,它将查看 ActiveSheet 是什么,并使用它。当您将非活动工作表与活动工作表混合时,您会收到错误消息。

    Sub SellPrice()
    
    Dim x As Worksheet, y As Worksheet, z As Worksheet, LastRow&
    
    Workbooks.Open ("C:\Users\tsmith\Desktop\SellPrice\PRODUCT.XLS")
    Workbooks.Open ("C:\Users\tsmith\Desktop\SellPrice\GrossProfit.xls")
    
    Set x = Workbooks("PRODUCT.XLS").Worksheets("ProductFile")
    Set y = Workbooks("GrossProfit.xls").Worksheets("Sellprice")
    Set z = Workbooks("SellPriceMacro.xlsm").Worksheets("Sheet1")
    
    LastRow = x.Cells.SpecialCells(xlCellTypeLastCell).Row
    
    x.Range("B4:B" & LastRow).Copy z.Cells(z.Rows.Count, "A").End(xlUp).Offset(1, 0)
    x.Range("C4:C" & LastRow).Copy z.Cells(z.Rows.Count, "B").End(xlUp).Offset(1, 0)
    x.Range("K4:K" & LastRow).Copy z.Cells(z.Rows.Count, "C").End(xlUp).Offset(1, 0)
    
    LastRow = y.Cells.SpecialCells(xlCellTypeLastCell).Row
    
    y.Range("B2:B" & LastRow).Copy z.Cells(z.Rows.Count, "E").End(xlUp).Offset(1, 0)
    y.Range("C2:C" & LastRow).Copy z.Cells(z.Rows.Count, "F").End(xlUp).Offset(1, 0)
    y.Range("D2:D" & LastRow).Copy z.Cells(z.Rows.Count, "G").End(xlUp).Offset(1, 0)
    y.Range("H2:H" & LastRow).Copy z.Cells(z.Rows.Count, "H").End(xlUp).Offset(1, 0)
    
    Application.CutCopyMode = False
    
    End Sub
    

    【讨论】:

    • 除非我没有正确阅读您的回复,否则代码应该可以工作,因为我将工作簿放在 Range 之前,y.Range
    • 这可以清理掉CellsRows.Count等吗?我什至尝试运行此程序以删除所有工作簿“x”行,但仍然出现相同的错误。我在想也许工作簿“y”?
    • @T.Smith 只是复制/粘贴到 SO,还是您的代码也有 .end(x1up) ...请注意,它是 1 而不是 l。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-09
    • 1970-01-01
    • 1970-01-01
    • 2023-01-10
    • 1970-01-01
    • 2017-02-26
    相关资源
    最近更新 更多