首页 文章

在工作簿之间复制单元格

提问于
浏览
7

有人可以帮我一些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”,从Cell 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

3 回答

  • 0

    假设你有 wksFromwksTo 的引用,这里的代码应该是什么

    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")
    
  • 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

    您可以使用Jonsca建议的特殊单元格 . 但是,我通常只是循环细胞 . 我发现它让我能够更好地控制我正在复制的内容 . 对性能的影响非常小 . 但是,我觉得在办公室里,确保数据的准确性和完整性是首要任务 . 我写了一个类似于这个问题的回复,可以在这里找到:

    • StackOverflow - Copying Cells in VBA for Beginners

    iDevelop还展示了如何将特殊细胞用于同一目的的小型演示 . 我认为它会对你有所帮助 . 祝好运!

    更新

    回应......

    良好的开端,但它不会在第一个空白单元格之后复制任何内容 - 中继线于2011年6月9日5:08发送

    我只是想补充一点,上面链接中的教程将解决您的评论中提出的问题 . 而不是使用 .End(xlDown) 方法,循环遍历单元格,直到到达最后一行,您使用 .UsedRange.Rows.Count 检索 .

相关问题