VBA将单元格范围复制到另一本工作簿上的范围

时间:2020-10-21 19:00:42

标签: excel vba

Sub foo2()
Dim x As Workbook
Dim y As Workbook

'## Open both workbooks first:
Set x = Workbooks.Open("pathoffile.xlsx")
Set y = Workbooks.Open("pathoffile.xlsm")

'Now, transfer values from x to y:
y.Sheets("Main").Range("AH5:AH994").Value = x.Sheets("Database").Range("B2:B991")

'Close x:
x.Close

End Sub

我的代码如下。我正在尝试从一个工作簿复制一系列数据并将其放置到另一个工作簿上。我无法在一系列数据上使用它。例如,如果我为工作表y提供范围AH5:AH994,为工作表x提供范围B2,它将运行并使用来自B2的数据填充该范围。如果它们的大小相同,是否有可能占领整个范围B2:B991并将其复制到AH5:AH994?

2 个答案:

答案 0 :(得分:0)

x.Sheets("Database").Range("B2:B991").Copy Destination:=y.Sheets("Main").Range("AH5:AH994")

或者如果您只想要值:

x.Sheets("Database").Range("B2:B991").Copy 
y.Sheets("Main").Range("AH5:AH994").PasteSpecial(xlPasteValues)

但价值转移应该有效,并避免使用剪贴板:

y.Sheets("Main").Range("AH5:AH994").Value = x.Sheets("Database").Range("B2:B991").Value

答案 1 :(得分:0)

将列范围复制到另一个工作簿

设置

  • 在一个工作簿中,列数据B从第二行开始(单元格B2)。行数将在运行时计算。
  • 目标是将数据(仅值)复制到另一个工作簿的单元格AH5中开始的列范围。

结果

  • 计算后例如sRng = .Range("B2:B5")tCell = .Range("AH5")的值可以像这样复制:

    tCell.Resize(sRng.Rows.Count).Value = sRng.Value   
    

代码

Option Explicit

Sub ValuesFromRangeToFirstCell()
    
    Const sFirstCell As String = "B2"
    Const tFirstCell As String = "AH5"
    
    Dim src As Workbook
    Set src = Workbooks.Open("pathoffile.xlsx")
    With src.Sheets("Database")
        ' Define Source Column Number.
        Dim sColumn As Long
        sColumn = .Range(sFirstCell).Column
        ' Define Source Last Row Number.
        Dim sLastRow As Long
        sLastRow = .Cells(.Rows.Count, sColumn).End(xlUp).Row
        ' Define Source Column Range.
        Dim sRng As Range
        Set sRng = .Range(sFirstCell, .Cells(sLastRow, sColumn))
    End With
    
    Dim tgt As Workbook
    Set tgt = Workbooks.Open("pathoffile.xlsm")
    With tgt.Sheets("Main")
        ' Define Target First Cell Range.
        Dim tCell As Range
        Set tCell = .Range(tFirstCell)
    End With
    
    ' Copy values from Source Column Range to Target Column Range.
    tCell.Resize(sRng.Rows.Count).Value = sRng.Value
    
    src.Close

End Sub
相关问题