宏-将同一行中的某些单元格(由复选框触发)复制到其他工作表

时间:2018-10-29 20:50:20

标签: excel vba excel-vba

需要一些帮助。我有一个模板,可以将数据从其他程序导出到其中。数据行因导出而异,每次导出都需要一个新的工作簿。

我目前编写了一个“主”宏,用于清理工作表(格式,文本到数字等),并且还在包含数据的每一行的末尾添加复选框。这些复选框链接到单元格。一旦操作员完成了工作表,他们将需要为“超出规格”的每一行数据选中一个复选框。这些行将被复制到工作簿的下一个工作表中。这由一个按钮触发。当我只想复制列“ A”至“ I”中的单元格时,当前的宏除了复制整个数据行以外,还可以工作。列“ J”中和列之外的单元格包含不需要复制的数据。

这是我当前的宏,如我所说,它会复制整行:

Sub CopyRows() 
    Dim LRow As Long, ChkBx As CheckBox, WS2 As Worksheet
    Set WS2 = Worksheets("T2 FAIR (Single Cavity)")
    LRow = WS2.Range("A" & Rows.Count).End(xlUp).Row

    For Each ChkBx In ActiveSheet.CheckBoxes
        If ChkBx.Value = 1 Then
            LRow = LRow + 1
            WS2.Cells(LRow, "A").Resize(, 14) = Range("A" & _
            ChkBx.TopLeftCell.Row).Resize(, 14).Value
        End If
    Next
End Sub

2 个答案:

答案 0 :(得分:1)

在等式的右侧,您的Range()对象未正确限定(带有工作表)。因此,在此示例中,我使用了伪造的wsX

此外,我使用了“ D”的结尾列-但您可以更改为所需的任何内容。

LRow = LRow + 1
r = ChkBx.TopLeftCell.Row

ws2.Range(ws2.Cells(LRow, "A"), ws2.Cells(LRow, "D")) = wsX.Range( _
            wsX.Cells(r, "A"), wsX.Cells(r, "D"))

ws2.Range("A" & LRow & ":D" & LRow) = wsX.Range("A" & r & ":D" & r)

  

From Comment:   模板始终以导入的数据从“ A19”开始。当我运行此宏时,要将检查的数据复制到下一个工作表,它从单元格“ A18”开始。我不知道为什么。如何在下一个工作表上指定要复制的检查数据以“ A19”开头?

     
    

如果总是不一,则只需添加1。我不确定您的布局如何,因此必须将其添加到LRowr中。所以

ws2.Range("A" & LRow + 1 & ":D" & LRow + 1) = ...
         

... = wsX.Range("A" & r + 1 & ":D" & r + 1)
  

答案 1 :(得分:1)

感谢所有花时间帮助我解决此问题的人。您的帮助比您知道的要多。答案如下:

Sub CopyRows()

    Dim ws1 As Worksheet
    Set ws1 = Worksheets("T1 FAIR (Single Cavity)")

    Dim ws2 As Worksheet
    Set ws2 = Worksheets("T2 FAIR (Single Cavity)")

    Dim LRow As Long
    LRow = ws2.Range("A" & rows.count).End(xlUp).row

    Dim r As Long

    Dim ChkBx As CheckBox
    For Each ChkBx In ws1.CheckBoxes
        If ChkBx.value = 1 Then

            LRow = LRow + 1
            r = ChkBx.TopLeftCell.row

            ws2.Range("A" & LRow + 1 & ":I" & LRow + 1).value = _
            ws1.Range("A" & r & ":I" & r + 1).value

        End If
    Next

End Sub