Excel VBA将特殊的不相交范围从一个工作簿粘贴到另一个工作簿

时间:2016-08-23 21:29:15

标签: excel vba excel-vba

这是我第一篇关于堆栈溢出的帖子,它已经帮助我如此了很多 - 希望这次也是如此。我完全被困在一个简单的复制粘贴宏上。我试图遍历特定文件夹中的所有xlsx文件,一个接一个地打开它们,并始终复制相同的4个单元格内容。应将这4个值粘贴到运行宏但已转置的原始工作簿。

根据我的理解,我需要使用.copy .pastespecial命令,因为我想要转置,因此无法使用范围。我也明白粘贴需要在工作簿关闭之前发生,否则剪贴板将在关闭文件时清空。

宏正确循环遍历所有文件(在适当的时间打开和关闭它们)并正确评估if语句。但是,.Copy实际上似乎并没有将任何内容复制到剪贴板,因此,也没有粘贴任何内容。但是,我也没有使用下面的代码弹出任何错误消息。

Sub Copypaste()

Dim i As Integer
Dim path As String
Dim fname As String
Dim ws1 As Worksheet: Set ws1 = ActiveWorkbook.Worksheets("Sheet name")

'Define path of active excel workbook 
path = ActiveWorkbook.path
'Get list of all templates (xlsx)
templates = GetFiles(path & "\Output", "*.xlsx")
'Loop through all templates
On Error GoTo 0
For i = LBound(templates) To UBound(templates)
'First filename from list of all files in Output folder taken and opened
fname = CStr(templates(i))
Workbooks.Open Filename:=path & "\Output\" & fname
If ActiveWorkbook.Worksheets("Copy worksheet").Range("M40") <> 0 Or _  
ActiveWorkbook.Worksheets("Copy worksheet").Range("M45") <> 0 Or _ 
ActiveWorkbook.Worksheets("Copy worksheet").Range("M73") <> 0 Then

ActiveWorkbook.Worksheets("Copy worksheet").Range("F4", "M40", "M45", "M73").Copy
ws1.Range("B5").PasteSpecial Paste:=xlPasteValues, Transpose:=True
End If
Workbooks(fname).Activate
ActiveWorkbook.Close savechanges:=False

Next i
End Sub

从我到目前为止阅读的内容来看,我只能将这些值粘贴为连续范围,是吗?在理想情况下,我会将前3个单元格值粘贴到3个相邻单元格中,然后将最后一个值(从&#34; M73&#34;)粘贴到另一个单元格中。

如果我让它工作,我想扩展代码,使得粘贴到文件中的新值不会覆盖以前的值,即不是所有粘贴都发生在B5中,而是发生在下一个空行中。我不知道如何做到这一点,但这是我猜的下一个问题,一旦我在你的帮助下解决了这个问题。

非常感谢!

1 个答案:

答案 0 :(得分:0)

我不认为您可以复制不在同一行或列中的脱节范围。尝试在Excel中复制范围F4,M40,M45,M73以查看是否出现错误。我的猜测是它适用于M40,M45,M73但不适用于F4,M40

如果你只复制那些4个单元格而不是像

那样
Set rngFrom = ActiveWorkbook.Worksheets("Copy worksheet").Range("F4,M40,M45,M73")
Set rngTo = ActiveWorkbook.Worksheets("Sheet name").Range("B5:B8")

For i = 1 To 4
    rngTo(i).Value = rngFrom.Areas(i).Value ' rngTo(i) is short for rngTo.Cells(i, 1)
Next