首页 文章

Excel VBA - 将2个工作簿中的多个列复制到1个工作簿中

提问于
浏览
0

我有两个工作簿,我想要复制多列中的数据并将其放入包含此宏的新工作簿中 . 基本上我希望能够打开当前工作簿“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

1 回答

  • 0

    在使用 Range() 之前了解如何放置工作表? ( y.Range(...) ) - 您需要在使用 Cells()Rows.CountColumns.Count (以及其他范围)时执行此操作 . 否则,'s going to look to whatever the ActiveSheet is, and use that. When you mix inactive sheets with active sheets, you'将收到错误 .

    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
    

相关问题