值未复制到正确的范围

时间:2019-02-14 00:11:21

标签: excel vba

我在同一工作簿中有多个工作表,并且我试图从工作表1、2等复制某些单元格,然后粘贴到工作表“声明”中的G列中。

表1、2和&x具有相同的格式。

复制时,我想从第一个空白单元格粘贴到工作表1/2 / x的总记录数。

问题是

  1. 处理多张纸时,粘贴到Column上的值将继续被覆盖。
  2. 从值复制-我只需要同一单元格的一个组件,但不确定如何实现。例如MID(Cell,5,11)

第1、2和x页是受保护的工作表,我是从其他地方导入的,我真的不想写

Sub AddClaimRef()
Dim nrow As Long
Dim Lastrow As Long


'Add Claim Reference
For x = 1 To Sheets.Count
If Worksheets(x).Range("A2").Value = "STORE NAME:" Then
Worksheets(x).Select
Lastrow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
Cells(1, 9).Copy


Worksheets("Claim").Select
nrow = ActiveSheet.Cells(Rows.Count, 7).End(xlUp).Row
Range(Cells(nrow + 1, 7), Cells(Lastrow - 9, 7)).Select
ActiveSheet.Paste
End If
Next


End Sub

预期结果-

  1. Mid(Cell(1,9),5,11)从工作表1-x复制,但我不知道该怎么做,我只能复制cell(1,9)

  2. 如果工作表1具有100个具有单元格值的记录 “ SHEET1”,工作表2包含200条记录,单元格值为“ SHEET2” 我希望G列从第2行到第101行填充值“ SHEET1”, 从第102行的“ SHEET2”填充到302

但是实际输出是第2行到第101行被值“ SHEET2”覆盖

1 个答案:

答案 0 :(得分:0)

  1. NO .SelectNO .ActivateNO .ActiveSheet
  2. 声明所有变量(x)并限定所有范围[What Sheet?].Cells(.....
  3. 随着循环的变化,您需要计算粘贴纸上的最后一行
  4. 设置为从您循环通过的每张图纸上的Range("I9")复制
  5. 设置为粘贴在Last Row + 1上的Column G上,并将重复由ws.Column A确定的值
  6. 正确缩进代码可使以后的循环和步骤更容易跟踪/调试/更新

Option Explicit

Sub Update()

Dim Claim As Worksheet: Set Claim = ThisWorkbook.Sheets("Claim")
Dim ws As Worksheet, LRp As Long, LRc As Long

For Each ws In Worksheets
    If ws.Name <> Claim.Name Then
        If ws.Range("A2") = "STORE NAME:" Then

            LRc = ws.Range("A" & ws.Rows.Count).End(xlUp).Row
            LRp = Claim.Range("G" & Claim.Rows.Count).End(xlUp).Offset(1).Row
            Claim.Range(Claim.Cells(LRp, 7), Claim.Cells(LRp + LRc - 1, 7)).Value = Mid(ws.Range("I9"), 5, 11)

        End If
    End If
Next ws

End Sub