有人可以帮我解决一些VBA代码。
我正在尝试在工作簿之间复制2个单元格区域(两个工作簿都应该事先创建,因为我不希望代码在运行时创建新的工作簿。)
首先,我需要复制这些范围─ 从booka.xls的“Sheet 3”,Range:Cell H5到H列的最后一行,带有数据 将其复制到bookb.xls的“Sheet 1”,从Cell B2开始,在B列中找到尽可能多的单元格
其次我需要复制这些范围 - 从booka.xls的“Sheet 3”,Range:Cell K5到数据K中的最后一行 将其复制到bookb.xls的“Sheet 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
答案 0 :(得分:1)
以下是如何执行其中一个列的示例:
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
理想情况下,您可以将其转换为一个子例程,该子例程包含原始工作簿名称,工作表名称/编号和范围,以及目标工作簿名称,工作表名称/编号和范围。然后你就不必重复一些代码了。
答案 1 :(得分:1)
假设您有wksFrom
和wksTo
的引用,以下是代码应该是
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")
答案 2 :(得分:0)
您可以使用Jonsca建议的特殊单元格。但是,我通常只是循环细胞。我发现它让我能够更好地控制我正在复制的内容。对性能的影响非常小。但是,我觉得在办公室里,确保数据的准确性和完整性是首要任务。我写了一个类似于这个问题的回复,可以在这里找到:
iDevelop还展示了如何将特殊细胞用于同一目的。我认为它会对你有所帮助。祝你好运!
回应......
良好的开端,但它没有复制任何东西后第一个空白单元格 - 行李箱2011年6月9日5:08
我只想补充一点,上面链接中的教程将解决您评论中提出的问题。而不是使用.End(xlDown)
方法,循环遍历单元格,直到到达最后一行,您使用.UsedRange.Rows.Count
检索。