Vba 在工作簿之间复制单元格
有人能帮我写一些VBA代码吗 我试图在工作簿之间复制两个单元格区域(两个工作簿都应该事先创建,因为我不希望代码动态创建新工作簿) 首先,我需要复制这些范围- 从booka.xls的“第3页”,范围:单元格H5到H列的最后一行,带数据 将其复制到bookb.xls的“第1页”,从B2单元格开始,在B列中复制尽可能多的单元格 其次,我需要复制这些范围- 从booka.xls的“第3页”,范围:单元格K5到包含数据的第K列的最后一行 将其复制到bookb.xls的“第1页”,从D2单元格开始,在D列中复制尽可能多的单元格 以下是我到目前为止的情况:Vba 在工作簿之间复制单元格,vba,excel,Vba,Excel,有人能帮我写一些VBA代码吗 我试图在工作簿之间复制两个单元格区域(两个工作簿都应该事先创建,因为我不希望代码动态创建新工作簿) 首先,我需要复制这些范围- 从booka.xls的“第3页”,范围:单元格H5到H列的最后一行,带数据 将其复制到bookb.xls的“第1页”,从B2单元格开始,在B列中复制尽可能多的单元格 其次,我需要复制这些范围- 从booka.xls的“第3页”,范围:单元格K5到包含数据的第K列的最后一行 将其复制到bookb.xls的“第1页”,从D2单元格开始,在D列中
Sub CopyDataBetweenBooks()
Dim iRow As Long
Dim wksFr As Worksheet
Dim wksTo As Worksheet
wksFr = "C:\booka.xls"
wksTo = "C:\bookb.xls"
Set wksFrom = Workbooks(wksFr).Worksheets("Sheet 3")
Set wksTo = Workbooks(wksTo).Worksheets("Sheet 1")
With wksFrom
For iRow = 1 To 100
.Range(.Cells(iRow, 8), .Cells(iRow, 9)).Copy wksTo.Cells(iRow, 8)
Next iRow
End With
End Sub
以下是如何执行其中一列操作的示例:
Option Explicit
Sub CopyCells()
Dim wkbkorigin As Workbook
Dim wkbkdestination As Workbook
Dim originsheet As Worksheet
Dim destsheet As Worksheet
Dim lastrow As Integer
Set wkbkorigin = Workbooks.Open("booka.xlsm")
Set wkbkdestination = Workbooks.Open("bookb.xlsm")
Set originsheet = wkbkorigin.Worksheets("Sheet3")
Set destsheet = wkbkdestination.Worksheets("Sheet1")
lastrow = originsheet.Range("H5").End(xlDown).Row
originsheet.Range("H5:H" & lastrow).Copy 'I corrected the ranges, as I had the src
destsheet.Range("B2:B" & (2 + lastrow)).PasteSpecial 'and destination ranges reversed
End Sub
正如您在注释中所述,上面的代码不适用于带空格的范围,因此请在下面的代码中替换lastrow
行:
lastrow = originsheet.range("H65536").End(xlUp).Row
现在,理想情况下,您可以将其生成一个子例程,该子例程包含原始工作簿名称、工作表名称/编号和范围,以及目标工作簿名称、工作表名称/编号和范围。这样您就不必重复某些代码。假设您从
和wksTo
中引用了wksf,那么代码应该是这样的
wksFrom.Range(wksFrom.Range("H5"), wksFrom.Range("H5").End(xlDown)).Copy wksTo.Range("B2")
wksFrom.Range(wksFrom.Range("K5"), wksFrom.Range("K5").End(xlDown)).Copy wksTo.Range("D2")
您可以使用Jonsca建议的特殊单元格。然而,我通常只是通过细胞循环。我发现它能让我更好地控制我到底在复制什么。对性能的影响很小。然而,我觉得在办公室里,确保数据准确、完整是首要任务。我写了一篇关于类似问题的回复,可以在这里找到:
iDevelop还提供了一个小型演示,演示如何将特殊电池用于相同目的。我想这会对你有帮助。祝你好运
更新
作为对
很好的开始,但在第一个空白单元格之后,它不会复制任何内容–trunks Jun 9'11 5:08
我只是想补充一点,上面链接中的教程将解决您在评论中提出的问题。不要使用.End(xlDown)
方法,而是在单元格中循环,直到到达最后一行,然后使用.UsedRange.Rows.Count
检索最后一行 任何列中是否有空格?是的,单元格值会有所不同,但预计会有一些空格查找工作簿。打开函数,因为我不相信您可以像现在这样打开工作簿。如果有空格,请查找范围的SpecialCells属性。再试试看,我会帮你做我所拥有的。好的开始,但在第一个空白之后,它不会复制任何东西cell@trunks是的,这就是为什么我指出您需要范围
的SpecialCells
属性。如果你想保持空白,你必须从65536(最后一个单元格)开始你的范围,然后使用xlUp一直到最后一个填充点。我推了你一下,但你得做一些步法。如果我没弄错的话,我也会在第一个空白单元格停止。@Lopsided:是的。然而,OP的代码不需要检查空格。假设列中填充了值,并且单元格之间没有空格。@shahkalpesh在对其答案的评论中没有明确指出值会有所不同,但预计会有一些空格吗?也许我误解了他。@不平衡:是的,他误解了。直到你指出来我才看。他的准则和另一个经过投票表决的答案都没有考虑到这一点。如果OP的评论被整合在问题中,以获得详细的需求,而不是在评论中,当OP被要求时,这会更好。非常感谢。