Excel 将数据从多张图纸复制到一张图纸的循环

Excel 将数据从多张图纸复制到一张图纸的循环,excel,vba,Excel,Vba,我浏览了其他问题,没有找到一个与我的情景相匹配的问题 我有多个工作表,想复制/粘贴到另一个名为“市场”的工作簿/工作表中 接下来的步骤是从“A1”中取出数据并将其添加到A列和B列(分别) 但是,复制的数据当前正在粘贴到以前的数据上。 我的公式也没有拖到数据的末尾 Dim Mkts As Worksheet Dim ws As Worksheet Dim aDestLastRow As Long Dim cDestLastRow As Long Dim FR

我浏览了其他问题,没有找到一个与我的情景相匹配的问题

我有多个工作表,想复制/粘贴到另一个名为“市场”的工作簿/工作表中

接下来的步骤是从“A1”中取出数据并将其添加到A列和B列(分别)

但是,复制的数据当前正在粘贴到以前的数据上。 我的公式也没有拖到数据的末尾

    Dim Mkts As Worksheet
    Dim ws As Worksheet
    Dim aDestLastRow As Long
    Dim cDestLastRow As Long
    Dim FR As Range    'first row
    Dim LR As Range    'last row
    
        'Destination Worksheet
        Set Mkts = Workbooks("Nielsen SC Template.xlsm").Worksheets("Markets")
    
        'Find first blank row in the destination range based on data in Column A
        aDestLastRow = Mkts.Cells(Mkts.Rows.Count, "A").End(xlUp).Row
        
        'Find first blank row in the destination range based on data in Column C
        cDestLastRow = Mkts.Cells(Mkts.Rows.Count, "C").End(xlUp).Offset(1).Row

    
    'Copy 4Wk Data
        Dim Wb4 As Workbook
             Set Wb4 = Workbooks("4Wk Data.xlsx")
    
    For Each ws In Wb4.Worksheets
        With ws
            If .Index <> 1 Then
    
        'Find last used row in the copy range based on data in Column A
        Dim CopyLastRow4 As Long
            CopyLastRow4 = .Cells(.Rows.Count, "A").End(xlUp).Row
        
        If .Index = 2 Then
        'Copy and Paste Data into C3
            .Range("A4:V" & CopyLastRow4).Copy Mkts.Range("C" & cDestLastRow)
        
        'Add Dates
            Set FR = Mkts.Range("A" & cDestLastRow)
            Set LR = Mkts.Range("A" & aDestLastRow)
                Range(FR, LR).Formula = "=Mid('[4Wk Data.xlsx]Report1'!$A$1, 9, 28)"
        'Add Markets
            Set FR = Mkts.Range("B" & cDestLastRow)
            Set LR = Mkts.Range("B" & aDestLastRow)
                Range(FR, LR).Formula = "=Mid('[4Wk Data.xlsx]Report1'!$A$1, 48, 13)"
        End If
        
        If .Index = 3 Then
        'Copy and Paste Data
            .Range("A4:V" & CopyLastRow4).Copy Mkts.Range("C" & cDestLastRow)

etc...
Dim Mkts作为工作表
将ws设置为工作表
昏暗的夜色和长的一样
暗淡的CDEST最后一行与长
变暗FR作为范围的第一行
变暗LR作为“最后一行”范围
'目标工作表
设置Mkts=工作簿(“尼尔森SC Template.xlsm”)。工作表(“市场”)
'根据A列中的数据查找目标范围中的第一个空行
aDestLastRow=Mkts.Cells(Mkts.Rows.Count,“A”).End(xlUp).Row
'根据C列中的数据查找目标范围中的第一个空行
cDestLastRow=Mkts.Cells(Mkts.Rows.Count,“C”).End(xlUp).Offset(1).Row
'复制4Wk数据
将Wb4设置为工作簿
设置Wb4=工作簿(“4Wk Data.xlsx”)
对于Wb4.工作表中的每个ws
与ws
如果。索引1那么
'根据A列中的数据查找复制范围中最后使用的行
暗拷贝最后一行4等长
CopyLastRow4=.Cells(.Rows.Count,“A”).End(xlUp).Row
如果.Index=2,则
'将数据复制并粘贴到C3中
.Range(“A4:V”和CopyLastRow4)。复制Mkts.Range(“C”和cDestLastRow)
'添加日期
设置FR=Mkts.Range(“A”&cDestLastRow)
设置LR=Mkts.Range(“A”和aDestLastRow)
Range(FR,LR).Formula=“=Mid('[4Wk Data.xlsx]Report1'!$A$1,9,28)”
"增加市场"
设置FR=Mkts.Range(“B”和cDestLastRow)
设置LR=Mkts.范围(“B”和aDestLastRow)
Range(FR,LR).Formula=“=Mid('[4Wk Data.xlsx]Report1'!$A$1,48,13)”
如果结束
如果.Index=3,则
'复制并粘贴数据
.Range(“A4:V”和CopyLastRow4)。复制Mkts.Range(“C”和cDestLastRow)
等

由于我无法测试您的代码,我只能看到两个问题:

问题1您没有更新所提供代码中的
aDestLastRow
cDestLastRow
(至少)

问题2要分配
aDestLastRow
的值,您似乎忘记了将行逐行偏移

一个简单的解决方法是将这些赋值移动到循环中。另一个修复方法是通过添加复制的行数来简单地更新
aDestLastRow
cDestLastRow
的值,我可以将其视为
CopyLastRow4-4
,但显然这需要测试。在下面的代码中,我将分配行移到了代码中,这是效率较低的选项。我希望这有帮助

    Dim Mkts As Worksheet
    Dim ws As Worksheet
    Dim aDestLastRow As Long
    Dim cDestLastRow As Long
    Dim FR As Range    'first row
    Dim LR As Range    'last row
    
        'Destination Worksheet
        Set Mkts = Workbooks("Nielsen SC Template.xlsm").Worksheets("Markets")
    
    'Copy 4Wk Data
        Dim Wb4 As Workbook
             Set Wb4 = Workbooks("4Wk Data.xlsx")
    
    For Each ws In Wb4.Worksheets
        '*****Moved these lines into loop
        '*****You forgot to offset the first assignment
        'Find first blank row in the destination range based on data in Column A
        aDestLastRow = Mkts.Cells(Mkts.Rows.Count, "A").End(xlUp).Row + 1
        
        'Find first blank row in the destination range based on data in Column C
        cDestLastRow = Mkts.Cells(Mkts.Rows.Count, "C").End(xlUp).Offset(1).Row
        '******End of edit
        
        With ws
            If .Index <> 1 Then
    
        'Find last used row in the copy range based on data in Column A
        Dim CopyLastRow4 As Long
            CopyLastRow4 = .Cells(.Rows.Count, "A").End(xlUp).Row
        
        If .Index = 2 Then
        'Copy and Paste Data into C3
            .Range("A4:V" & CopyLastRow4).Copy Mkts.Range("C" & cDestLastRow)
        
        'Add Dates
            Set FR = Mkts.Range("A" & cDestLastRow)
            Set LR = Mkts.Range("A" & aDestLastRow)
                Range(FR, LR).Formula = "=Mid('[4Wk Data.xlsx]Report1'!$A$1, 9, 28)"
        'Add Markets
            Set FR = Mkts.Range("B" & cDestLastRow)
            Set LR = Mkts.Range("B" & aDestLastRow)
                Range(FR, LR).Formula = "=Mid('[4Wk Data.xlsx]Report1'!$A$1, 48, 13)"
        End If
        
        If .Index = 3 Then
        'Copy and Paste Data
            .Range("A4:V" & CopyLastRow4).Copy Mkts.Range("C" & cDestLastRow)

Dim Mkts作为工作表
将ws设置为工作表
昏暗的夜色和长的一样
暗淡的CDEST最后一行与长
变暗FR作为范围的第一行
变暗LR作为“最后一行”范围
'目标工作表
设置Mkts=工作簿(“尼尔森SC Template.xlsm”)。工作表(“市场”)
'复制4Wk数据
将Wb4设置为工作簿
设置Wb4=工作簿(“4Wk Data.xlsx”)
对于Wb4.工作表中的每个ws
“******将这些线移动到循环中
“******你忘了抵消第一个任务
'根据A列中的数据查找目标范围中的第一个空行
aDestLastRow=Mkts.Cells(Mkts.Rows.Count,“A”).End(xlUp).行+1
'根据C列中的数据查找目标范围中的第一个空行
cDestLastRow=Mkts.Cells(Mkts.Rows.Count,“C”).End(xlUp).Offset(1).Row
“******编辑结束
与ws
如果。索引1那么
'根据A列中的数据查找复制范围中最后使用的行
暗拷贝最后一行4等长
CopyLastRow4=.Cells(.Rows.Count,“A”).End(xlUp).Row
如果.Index=2,则
'将数据复制并粘贴到C3中
.Range(“A4:V”和CopyLastRow4)。复制Mkts.Range(“C”和cDestLastRow)
'添加日期
设置FR=Mkts.Range(“A”&cDestLastRow)
设置LR=Mkts.Range(“A”和aDestLastRow)
Range(FR,LR).Formula=“=Mid('[4Wk Data.xlsx]Report1'!$A$1,9,28)”
"增加市场"
设置FR=Mkts.Range(“B”和cDestLastRow)
设置LR=Mkts.范围(“B”和aDestLastRow)
Range(FR,LR).Formula=“=Mid('[4Wk Data.xlsx]Report1'!$A$1,48,13)”
如果结束
如果.Index=3,则
'复制并粘贴数据
.Range(“A4:V”和CopyLastRow4)。复制Mkts.Range(“C”和cDestLastRow)

在哪里更新
cDestLastRow
?每次设置
FR
LR
之前都需要更新此值。请原谅,我还在学习,
aDestLastRow
cDestLastRow
的值基于确实发生变化的“主”工作表。当你说我没有更新代码时。。?不幸的是,
CopyLastRow4
是整个工作簿的简称。复制的行数从来都不一样。
.End(xlUp).行+1
.End(xlUp).偏移量(1).行
请?@CariDay“基于确实发生变化的“主”工作表”-这是什么意思?因为它确实发生了变化,所以每次向其粘贴更多数据时,都必须不断更新最后一行的值。当您第一次设置该变量时,会给它一个静态值,该值需要在循环的每次迭代中手动更新-它不会自行更新。对不起,我的意思是“主”工作表不会更改。我想我是糊涂了。
aDestLastRow
设置为查看A列中的最后一行数据。
cDestLast