Excel VBA - 复制多个范围并按选择顺序粘贴它们而不覆盖

时间:2013-11-14 14:46:37

标签: excel vba

所以我没有VBA背景,但我已经设法通过搜索互联网把它放在一起。它适用于工作簿,其最终目标是让用户(工程师)选择某些复选框。完成后(并会有很多复选框),他们点击“Build”按钮,根据他们的选择,他们将生成一个新的工作表或新的工作簿(尚未确定那个)与所有按顺序粘贴到其中的所选信息。

以下是代码:

Sub Merge()

    If Range("F3") = True Then

            Sheets("Data").Select
            Range("A1:A8").Select
           Selection.Copy

            Sheets("UI").Select
            Cells(1, 1).Select
            Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
               False, Transpose:=False
            Selection.PasteSpecial Paste:=xlFormats, Operation:=xlNone, SkipBlanks:= _
               False, Transpose:=False
        Else
              MsgBox "Part 1 - Failed."
    End If

    If Range("F6") = True Then

            Sheets("Data").Select
            Range("A10:A17").Select
            Selection.Copy

            Sheets("UI").Select
            Cells(10, 1).Select
            Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
               False, Transpose:=False
            Selection.PasteSpecial Paste:=xlFormats, Operation:=xlNone, SkipBlanks:= _
               False, Transpose:=False
        Else
            MsgBox "Part 2 - Failed"
    End If

    If Range("F9") = True Then

            Sheets("Data").Select
            Range("A19:A26").Select
            Selection.Copy

            Sheets("UI").Select
            Cells(19, 1).Select
            Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
               False, Transpose:=False
            Selection.PasteSpecial Paste:=xlFormats, Operation:=xlNone, SkipBlanks:= _
               False, Transpose:=False
        Else
            MsgBox "Part 3 - Failed"
    End If

End Sub

这里是我的google驱动器中的文件,如果这样可以让您更轻松: https://drive.google.com/file/d/0Bza853yM-QSMSlFWbElBc1dsbGM/edit?usp=sharing

目前,它将“True”范围粘贴到预定义的单元格区域中。 但是,我想要的是如果Red = True和Green = True,那么红色被粘贴到A1:A8中,Green将被粘贴到A10:A18中。类似地,如果蓝色和绿色为真,或者只有蓝色或绿色为真,则它们粘贴到A1:A8中,下一个“True”语句粘贴在它们下面。这样你可以有任意数量的True语句,它们将按顺序粘贴,它们之间只有1行,而不是8或20行。

我浏览了这个网站和其他人,但没有找到任何东西。所以我不确定这是否可能,或者我对这个主题过于无知,无法搜索我正在寻找的概念。

感谢您的智慧! -Dan

1 个答案:

答案 0 :(得分:0)

您可以在“UI”工作表上找到下一个空白单元格,然后将下一组结果粘贴到该区域,而不是将副本粘贴到静态范围中。

查找下一个空白单元格的代码......

Sheets("UI").Select
Range("A2").Select
Selection.End(xlDown).Select
Selection.Offset(1, 0).Select