尝试在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。
答案 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列。