在Excel VBA上复制粘贴列

时间:2017-12-15 10:09:56

标签: excel vba excel-vba

尝试在excel VBA上复制粘贴列数天,代码无论如何都无法正常工作

Sub CopyRangeofCellsanotherone()
    Dim x As Workbook
    Dim y As Workbook
    Dim LastRow As Long
    Dim LastRowToCopy As Long

    Set x = Workbooks.Open("C:\trabalho da DELL\source.xlsx")
    Set y = Workbooks.Open("C:\trabalho da DELL\destination.xlsx")

    LastRowToCopy = x.Sheets("sourcesheet").Cells(x.Sheets("sourcesheet").Rows.Count, "A").End(xlUp).Row

    x.Sheets("sourcesheet").Range("A" & LastRowToCopy).Copy 'copy from A1 to lastrow

    LastRow = y.Sheets("destsheet").Cells(y.Sheets("destsheet").Rows.Count, "A").End(xlUp).Row 'find the last row

    y.Sheets("destsheet").Range("A" & LastRow).PasteSpecial 'paste on the lastrow of destination + 1 (so next empty row)

    x.Close

End Sub

我认为代码大多是不言自明的(或至少,我打算做什么),但它不起作用!!如何将内容从A列 - 源表复制到A列 - 目标表? 然后,我如何将其应用于一组列? (例如从A到G)。 我的VBA不到5个小时,所以对你们这些人来说看起来很简单...... 编辑:忘了提它它给了我在LastRowToCopy行上的运行时错误91。

2 个答案:

答案 0 :(得分:2)

尝试以下代码。

关于你所写的内容的注释:

将其扩展为完全引用一个范围而不仅仅是一个单元格

 sourceSheet.Range("A1:A" & sourceLastRow)

在此处添加+ 1以粘贴到下一个可用行

destSheet.Range("A" & destLastRow + 1)

为工作表本身设置变量,以便代码更具可读性

Set sourceSheet = sourceBk.Sheets("sourcesheet")

在lastRow变量中包含更多描述,以便您知道正在引用哪个工作簿和工作表

sourceLastRow = sourceSheet.Cells(sourceSheet.Rows.Count, "A").End(xlUp).Row

当然,请在顶部设置Option Explicit来检查变量声明。

完整代码:

Option Explicit

Sub CopyRangeofCellsanotherone()

    Dim sourceBk As Workbook
    Dim destBK As Workbook
    Dim sourceLastRow As Long
    Dim destLastRow As Long
    Dim sourceSheet As Worksheet
    Dim destSheet As Worksheet

    Set sourceBk = Workbooks.Open("C:\trabalho da DELL\source.xlsx")
    Set destBK = Workbooks.Open("C:\trabalho da DELL\destination.xlsx")

    Set sourceSheet = sourceBk.Sheets("sourcesheet")
    Set destSheet = destBK.Sheets("destsheet")

    sourceLastRow = sourceSheet.Cells(sourceSheet.Rows.Count, "A").End(xlUp).Row
    destLastRow = destSheet.Cells(destSheet.Rows.Count, "A").End(xlUp).Row 'find the last row

    sourceSheet.Range("A1:A" & sourceLastRow).Copy 'copy from A1 to lastrow

    destSheet.Range("A" & destLastRow + 1).PasteSpecial 'paste on the lastrow of destination + 1 (so next empty row)

    sourceBk.Close

End Sub

扩展复制范围:

有多种方法可以将其扩展到一系列列(您需要进一步解释)。

例如,如果您事先知道最后一栏,例如" C",您可以修改sourceSheet范围的行,如下所示:

sourceSheet.Range("A1:C" & sourceLastRow)

如果您不知道可以找到最后一栏,例如根据{{​​3}}

 sourceLastCol =sourceSheet.Cells(1,sourceSheet.Columns.Count).End(xlToLeft).Column

复制源范围的语法将更改为

sourceSheet.Range(sourceSheet.Cells(1, 1), sourceSheet.Cells(sourceLastRow, sourceLastCol)).Copy

答案 1 :(得分:2)

Sub foo2()
Dim x As Workbook
Dim y As Workbook

Set x = Workbooks.Open("C:\trabalho da DELL\source.xlsx")
Set y = Workbooks.Open("C:\trabalho da DELL\destination.xlsx")

y.Sheets("destsheet").Range("A:A").Value = x.Sheets("sourcesheet").Range("A:A").Value

x.Close

End Sub

检查上述代码是否成功复制了A列 如果是,则重复该行
y.Sheets(“destsheet”)。范围(“A:A”)。Value = x.Sheets(“sourcesheet”)。范围(“A:A”)。值
用其他列替换A列。