Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA将单元格区域复制到另一工作簿上的区域_Excel_Vba - Fatal编程技术网

Excel VBA将单元格区域复制到另一工作簿上的区域

Excel VBA将单元格区域复制到另一工作簿上的区域,excel,vba,Excel,Vba,我的代码如下。我试图从一个工作簿复制一系列数据,并将其放到另一个工作簿上。我无法在一系列数据上实现这一点。例如,如果我为图纸y提供范围AH5:AH994,为图纸x提供单个范围B2,它将运行并使用B2中的数据填充该范围。如果B2:B991和AH5:AH994的尺寸相同,是否可以获取整个范围并将其复制到AH5:AH994 Sub foo2() Dim x As Workbook Dim y As Workbook '## Open both workbooks first: Set x = Wor

我的代码如下。我试图从一个工作簿复制一系列数据,并将其放到另一个工作簿上。我无法在一系列数据上实现这一点。例如,如果我为图纸y提供范围AH5:AH994,为图纸x提供单个范围B2,它将运行并使用B2中的数据填充该范围。如果B2:B991和AH5:AH994的尺寸相同,是否可以获取整个范围并将其复制到AH5:AH994

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
或者,如果您只需要值:

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)
或者,如果您只需要值:

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)
将列范围复制到其他工作簿 设置

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

  • 在计算后,例如,
    sRng=.Range(“B2:B5”)
    tCell=.Range(“AH5”)
    可以这样复制值:

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

tCell.Resize(sRng.Rows.Count).Value = sRng.Value   
将列范围复制到其他工作簿 设置

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

  • 在计算后,例如,
    sRng=.Range(“B2:B5”)
    tCell=.Range(“AH5”)
    可以这样复制值:

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

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

我会在
范围(“B2:B991”)
的末尾添加缺少的
值。。。如果你只想使用
Range(“B2”)
,你可以
将其调整为与
Range(“AH5:AH994”)
@BigBen不知道我需要.Value标签,现在就可以了。谢谢你!因为我不能接受您的评论作为答案,我将接受另一个答案来关闭此线程。我将在
.Range(“B2:B991”)
的末尾添加缺少的
.Value
。。。如果你只想使用
Range(“B2”)
,你可以
将其调整为与
Range(“AH5:AH994”)
@BigBen不知道我需要.Value标签,现在就可以了。谢谢你!因为我不能接受你的评论作为答案,我将接受另一个答案来关闭此线程。感谢提供替代解决方案,BigBen的评论解决了我的问题,但我将为其他可能有类似问题的人标记此答案。希望你不介意我在此处添加价值转移作为一个潜在选项。这样,未来的读者就会知道如何使用它并避免使用剪贴板。我同意Bigben的答案更好,但我也确实认为使用带有目标参数的copy方法可以避免使用剪贴板,但在测试它时,它实际上似乎清除了剪贴板…奇怪的是,感谢提供了替代解决方案,BigBen的评论解决了我的问题,但我会为其他可能有类似问题的人标记这个答案。希望你不介意我在这里添加价值转移作为一个潜在的选择。这样,未来的读者就会知道如何使用它,避免使用剪贴板。我同意Bigben的答案更好,但我也确实认为使用带有目标参数的复制方法可以避免使用剪贴板,但在测试它时,它实际上似乎清除了剪贴板…奇怪