Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.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 复制和粘贴多个单元格_Excel_Vba_Loops_Cells - Fatal编程技术网

Excel 复制和粘贴多个单元格

Excel 复制和粘贴多个单元格,excel,vba,loops,cells,Excel,Vba,Loops,Cells,我正在尝试将多个单元格从一个工作簿复制并粘贴到另一个工作簿中。我试图将源单元格放在一行中,并与其他工作簿循环,以复制和粘贴上一行下的单元格(因此是lastrow语句) 我的代码似乎不起作用,而且效率极低!正如您将注意到的,单元格不在易于复制的整洁范围内 See below: ... lastrow2 = shtBatchwbkBGAsumm.Range("B65536").End(xlUp).Row + 1 shtWBc2.Unprotec

我正在尝试将多个单元格从一个工作簿复制并粘贴到另一个工作簿中。我试图将源单元格放在一行中,并与其他工作簿循环,以复制和粘贴上一行下的单元格(因此是lastrow语句)

我的代码似乎不起作用,而且效率极低!正如您将注意到的,单元格不在易于复制的整洁范围内

See below:
    ...        
        lastrow2 = shtBatchwbkBGAsumm.Range("B65536").End(xlUp).Row + 1
        shtWBc2.Unprotect Password:="QC"

        shtWBc2.Range("C4").Value = shtBatchwbkBGAsumm.Range("B" & lastrow2).Value
        shtWBc2.Range("C5").Value = shtBatchwbkBGAsumm.Range("C" & lastrow2).Value
        shtWBc2.Range("D10").Value = shtBatchwbkBGAsumm.Range("D" & lastrow2).Value
        shtWBc2.Range("G10").Value = shtBatchwbkBGAsumm.Range("E" & lastrow2).Value
        shtWBc2.Range("J10").Value = shtBatchwbkBGAsumm.Range("F" & lastrow2).Value
        shtWBc2.Range("M10").Value = shtBatchwbkBGAsumm.Range("G" & lastrow2).Value
        shtWBc2.Range("P10").Value = shtBatchwbkBGAsumm.Range("H" & lastrow2).Value
        shtWBc2.Range("S10").Value = shtBatchwbkBGAsumm.Range("I" & lastrow2).Value
        shtWBc2.Range("C14").Value = shtBatchwbkBGAsumm.Range("J" & lastrow2).Value
        shtWBc2.Range("C15").Value = shtBatchwbkBGAsumm.Range("K" & lastrow2).Value
        shtWBc2.Range("D20").Value = shtBatchwbkBGAsumm.Range("L" & lastrow2).Value
        shtWBc2.Range("G20").Value = shtBatchwbkBGAsumm.Range("M" & lastrow2).Value
        shtWBc2.Range("J20").Value = shtBatchwbkBGAsumm.Range("N" & lastrow2).Value
        shtWBc2.Range("M20").Value = shtBatchwbkBGAsumm.Range("O" & lastrow2).Value
        shtWBc2.Range("P20").Value = shtBatchwbkBGAsumm.Range("P" & lastrow2).Value
        shtWBc2.Range("S20").Value = shtBatchwbkBGAsumm.Range("Q" & lastrow2).Value
        shtWBc2.Range("C24").Value = shtBatchwbkBGAsumm.Range("R" & lastrow2).Value
        shtWBc2.Range("C25").Value = shtBatchwbkBGAsumm.Range("S" & lastrow2).Value
        shtWBc2.Range("D30").Value = shtBatchwbkBGAsumm.Range("T" & lastrow2).Value
        shtWBc2.Range("G30").Value = shtBatchwbkBGAsumm.Range("U" & lastrow2).Value
        shtWBc2.Range("J30").Value = shtBatchwbkBGAsumm.Range("V" & lastrow2).Value
        shtWBc2.Range("M30").Value = shtBatchwbkBGAsumm.Range("W" & lastrow2).Value
        shtWBc2.Range("P30").Value = shtBatchwbkBGAsumm.Range("X" & lastrow2).Value
        shtWBc2.Range("S30").Value = shtBatchwbkBGAsumm.Range("Y" & lastrow2).Value
        shtWBc2.Range("C34").Value = shtBatchwbkBGAsumm.Range("Z" & lastrow2).Value
        shtWBc2.Range("C35").Value = shtBatchwbkBGAsumm.Range("AA" & lastrow2).Value
        shtWBc2.Range("D40").Value = shtBatchwbkBGAsumm.Range("AB" & lastrow2).Value
        shtWBc2.Range("G40").Value = shtBatchwbkBGAsumm.Range("AC" & lastrow2).Value
        shtWBc2.Range("J40").Value = shtBatchwbkBGAsumm.Range("AD" & lastrow2).Value
        shtWBc2.Range("M40").Value = shtBatchwbkBGAsumm.Range("AE" & lastrow2).Value
        shtWBc2.Range("P40").Value = shtBatchwbkBGAsumm.Range("AF" & lastrow2).Value
        shtWBc2.Range("S40").Value = shtBatchwbkBGAsumm.Range("AG" & lastrow2).Value
        shtWBc2.Range("C54").Value = shtBatchwbkBGAsumm.Range("AH" & lastrow2).Value
        shtWBc2.Range("C55").Value = shtBatchwbkBGAsumm.Range("AI" & lastrow2).Value
        shtWBc2.Range("D60").Value = shtBatchwbkBGAsumm.Range("AJ" & lastrow2).Value
        shtWBc2.Range("G60").Value = shtBatchwbkBGAsumm.Range("AK" & lastrow2).Value
        shtWBc2.Range("J60").Value = shtBatchwbkBGAsumm.Range("AL" & lastrow2).Value
        shtWBc2.Range("M60").Value = shtBatchwbkBGAsumm.Range("AM" & lastrow2).Value
        shtWBc2.Range("P60").Value = shtBatchwbkBGAsumm.Range("AN" & lastrow2).Value
        shtWBc2.Range("S60").Value = shtBatchwbkBGAsumm.Range("AO" & lastrow2).Value
        shtWBc2.Range("V56").Value = shtBatchwbkBGAsumm.Range("AP" & lastrow2).Value
        shtWBc2.Range("V57").Value = shtBatchwbkBGAsumm.Range("AQ" & lastrow2).Value
        shtWBc2.Range("W65").Value = shtBatchwbkBGAsumm.Range("AR" & lastrow2).Value
        shtWBc2.Range("C44").Value = shtBatchwbkBGAsumm.Range("AS" & lastrow2).Value
        shtWBc2.Range("C45").Value = shtBatchwbkBGAsumm.Range("AT" & lastrow2).Value
        shtWBc2.Range("D50").Value = shtBatchwbkBGAsumm.Range("AU" & lastrow2).Value
        shtWBc2.Range("G50").Value = shtBatchwbkBGAsumm.Range("AV" & lastrow2).Value
        shtWBc2.Range("J50").Value = shtBatchwbkBGAsumm.Range("AW" & lastrow2).Value
        shtWBc2.Range("M50").Value = shtBatchwbkBGAsumm.Range("AX" & lastrow2).Value
        shtWBc2.Range("P50").Value = shtBatchwbkBGAsumm.Range("AY" & lastrow2).Value
        shtWBc2.Range("S50").Value = shtBatchwbkBGAsumm.Range("AZ" & lastrow2).Value
        shtWBc2.Range("V46").Value = shtBatchwbkBGAsumm.Range("BA" & lastrow2).Value
        shtWBc2.Range("V47").Value = shtBatchwbkBGAsumm.Range("BB" & lastrow2).Value
        shtWBc2.Range("P65").Value = shtBatchwbkBGAsumm.Range("BC" & lastrow2).Value
        shtWBc2.Range("G65").Value = shtBatchwbkBGAsumm.Range("BD" & lastrow2).Value


        Application.CutCopyMode = False
        WBc.Close SaveChanges:=False

    End If
Next F........
目前,没有任何东西被复制过来,需要很长时间才能完成四个循环——我将完成多达40个循环

提前谢谢

 lastrow2 = shtBatchwbkBGAsumm.Range("B65536").End(xlUp).Row + 1
这将为您提供ColB中包含no内容的第一行的行号,而不是ColB中包含任何内容的最后一行。也许您需要删除
+1

编辑以反转复制方向:

a) copying *from* shtBatchwbkBGAsumm 
b) copying *to* shtBatchwbkBGAsumm
这里有一种替代方法:

Dim arr, i As Long, rw As Range

'create an array of your "destination" ranges
arr = Array("C4", "C5", "G10", "J10", "M10", "P10") 'add the rest here...

'(a) assign the last row with data to the variable "rw"
'Set rw = shtBatchwbkBGAsumm.Range("B65536").End(xlUp).EntireRow

'(b) assign the first empty row to the variable "rw"
Set rw = shtBatchwbkBGAsumm.Range("B65536").End(xlUp).EntireRow.Offset(1,0)

shtWBc2.Unprotect Password:="QC"

'lbound here will be zero, ubound=(# of ranges-1)
For i = LBound(arr) To UBound(arr)

    'shtWBc2.Range(arr(i)).Value = rw.Cells(i + 2).Value 'direction (a)
    rw.Cells(i + 2).Value = shtWBc2.Range(arr(i)).Value 'direction (b)

Next i

Application.CutCopyMode = False
WBc.Close SaveChanges:=False
下面是我使用
rw
来表示
shtBatchwbkBGAsumm
上的一个范围(行),这使得语法更清晰

例如,比较:

rw.cells(,"B").Value
vs


谢谢你,蒂姆。您的代码看起来确实很逻辑且紧凑。它的处理速度也比我的方式快。但是,数组在其应该位于的位置不可见。我对“最后一行”争论的理由正如你所指出的。。。找到第一个可用的空行并将数据粘贴到其中。正在将数据复制到一个模板中,其中a列、第1行和第2行的标题已被占用。因此,第一个可用的空行将是B3:BD3。。。在第一个循环之后,下一个可用行是B4:BD4…B5:BD5…等等。目前的问题是没有任何东西被复制过来……嗯,我在这方面没有成功。。。这些值只是没有出现在它们应该出现的地方(或者根本没有出现)。我试图重新安排一些过去对我有用的争论,但没有任何结果。有什么想法吗?你可以编辑你的问题来添加你的新代码,也许还可以准确地解释你在复制哪些工作表以及它们在哪里。在上面的评论中,您似乎建议您复制到
shtBatchwbkBGAsumm
,但您问题中的代码建议向相反方向复制…感谢您的评论。我确实在早些时候发布了详细说明我的代码的帖子,但没有被版主接受。我确实在将数组从shtWBc2粘贴到shtBatchBGAsumm中的一行,最好是按照数组的说明顺序-我为错误的方向道歉…我认为我的代码可以双向工作,决定方向的是哪个工作表处于活动状态。我想你试图更新我的答案-在我看到它之前它被拒绝了。最好更新你自己的问题。如果你需要副本在两个方向上工作,那就更复杂了。
shtBatchwbkBGAsumm.Range("B" & lastrow2).Value