【问题标题】:VBA - Copy and Pasting the correct dataVBA - 复制和粘贴正确的数据
【发布时间】:2017-08-24 00:24:07
【问题描述】:

我无法将不同范围的内容复制到相应的工作表中。

dateRng = 12/19/2016 00:00:00 - 12/19/2016 23:59:59
num = 11
NumPts = 33
Sheets.Count = 16

在这个例子中,这就是每个变量等于 ^。

Dim dateRng As String, num As Integer, j As Integer, sh As Worksheet
dateRng = Sheets("Input Raw Data").Range("B" & counter + 2).Value
num = Sheets("Tool Setup").Range("C18").Value
NumPts = num * 3

For s = 1 To Sheets.Count
    For y = 1 To NumPts
        With Sheets(s)
        For j = 1 To num
            If .Name = j Then
                Sheets("Reporting").Range("A" & (12 * y - 7) & ":" & fConvertToLetter & (12 * y + 1)) _
                .Copy (.Range("A2"))
                .Range("A1") = dateRng
                .Name = Sheets("Point Names").Range("B" & (3 * j - 1))
            End If
            Columns("B:B").EntireColumn.AutoFit
        Next j
        End With
    Next y
Next s

所以目前,我将第一个范围复制到第一个相应的工作表中。但之后它也会粘贴到所有其余的工作表中。而不是将第二个范围与第二个表配对。提前感谢您的帮助。

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    我不太明白这个问题。如果您想通过不同的工作表粘贴到不同的范围,我相信您的周期混淆了。

    由于您的 For j 在 For s 内运行,因此在传递到下一张表之前,您会遍历第一张表中的所有范围。

    所以也许:

    For s = 1 To Sheets.Count
    For y = 1 To NumPts
        With Sheets(s)
            If .Name = s Then
                Sheets("Reporting").Range("A" & (12 * y - 7) & ":" & fConvertToLetter & (12 * y + 1)) _
                .Copy (.Range("A2"))
                .Range("A1") = dateRng
                .Name = Sheets("Point Names").Range("B" & (3 * s - 1))
            End If
            Columns("B:B").EntireColumn.AutoFit
        End With
    Next y
    Next s
    

    这仅适用于我理解正确并且您希望您的范围随下一张纸移动的情况。

    【讨论】:

    • 我忘了定义Sheets.Count = 16,在这个例子中。所以我需要For j 声明。我尝试将For y 行取消缩进以与For s 保持一致,这产生了相同的结果
    【解决方案2】:

    我能够通过将For Statements 分成两个块来解决此问题。

    For s = 1 To Sheets.Count
        With Sheets(s)
        For j = 1 To num
            If .Name = j Then
                .Range("A1:C1").Merge
                .Range("A1") = dateRng
                .Name = Sheets("Point Names").Range("B" & (3 * j - 1))
            End If
        Next j
        End With
    Next s
    For s = 1 To Sheets.Count
        With Sheets(s)
        For y = 1 To NumPts
            If .Name = Sheets("Reporting").Range("B" & (12 * y - 5)) Then
                Sheets("Reporting").Range("A" & (12 * y - 6) & _
            ":" & fConvertToLetter & (12 * y + 20)) _
            .Copy (.Range("A2"))
            .Columns("A:A").ColumnWidth = 12
            .Columns("B:B").EntireColumn.AutoFit
        End If
        y = y + 2
        Next y
    End With
    Next s
    

    【讨论】:

      猜你喜欢
      • 2019-09-06
      • 1970-01-01
      • 1970-01-01
      • 2019-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多