将所有已用单元格从一个工作簿工作表复制到另一个现有工作簿工作表

时间:2017-03-30 21:50:35

标签: excel vba excel-vba

我正在尝试将excel工作表中的所有已用单元格从已关闭的工作簿复制到使用VBA的当前工作簿中已创建的工作表中。

已经看到很多关于将工作表复制为新工作表的示例,但不仅仅是将已使用的内容复制到现有工作表中。

谢谢! 麦克

1 个答案:

答案 0 :(得分:0)

  1. 使用以下命令打开源工作簿: set wb = Workbooks.Open FileName:="fullPathAndFileName.xlsx", UpdateLinks:=0, ReadOnly:=True, AddToMru:=False
  2. 使用对要复制的工作表的引用,例如wb.Sheets(1)(指工作簿中的第一个工作表),以及对目标工作表的引用,例如。 destWorkSheet运行这样的循环:

    For Each cel in wb.Sheets(1).UsedRange.Cells
        destWorkSheet.Cells(cel.Row, cel.Column) = cel
    Next
    
  3. 这会将值逐个单元格复制到目标工作表中与源工作表中相同的位置。您可能希望先关闭计算。当然也有其他方法可以做到。

    您仍然需要打开源工作簿,但另一种方法是直接写入值。只要目标和源范围具有相同的大小和形状,就可以执行此操作。这个子程序将为您完成:

        Private Sub CopyValuesSourceToDest(src As Range, dest As Range)
        'dest should be one cell, src can be a range of cells
        If dest.Cells.Count <> 1 Then MsgBox "Only pass one cell as the destination.": Exit Sub
        Dim rws As Long, cols As Long, trueDest As Range
        rws = src.Rows.Count
        cols = src.Columns.Count
        Set trueDest = dest.Parent.Range(dest.Cells(1, 1), dest.Cells(1, 1).Offset(rws - 1, cols - 1))
        trueDest.Value = src.Value
        End Sub
    

    然后你会像这样调用sub:

        CopyValuesSourceToDest sourceSheet.UsedRange, destSheet.Range("B7") 'B7, or whatever