【问题标题】:Copying columns including blanks without skipping rows..leave "blanks" blank VBA复制包含空白的列而不跳过行..将“空白”留空 VBA
【发布时间】:2019-03-11 20:26:54
【问题描述】:

Aplication Defined error 复制指定的列和范围,包括带有运行多个宏的嵌入式按钮的空白。我知道所有行都将填充在 A 列中,所以如果我可以将其余的宏引用到 A.end

我查看了 Google youtube 和这里​​虽然有很多关于复制和粘贴的信息,但我找不到适用于运行多个宏的。

宏 5 和 6 是我开始遇到问题的地方,因为这些列自始至终都有多个空白。

要复制的原始数据:

目的地:

私有子 CommandButton1_Click()

Worksheets("Sheet1").Range("a2", Range("a2").End(xlDown)).Copy _
        Worksheets("Sheet2").Range("a2") 'macro1

Worksheets("Sheet1").Range("d2", Range("d2").End(xlDown)).Copy _
        Worksheets("Sheet2").Range("b2")  'Macro2

Worksheets("Sheet1").Range("c2", Range("c2").End(xlDown)).Copy _
        Worksheets("Sheet2").Range("c2") 'macro3

Worksheets("Sheet1").Range("g2", Range("g2").End(xlDown)).Copy _
        Worksheets("Sheet2").Range("d2") 'macro4


If Worksheets("Sheet1").Range("e2", Range("e2").End(xlDown)).Value = "<0" Then
    Worksheets("Sheet2").Range("i2").Copy  'macro5

If Worksheets("Sheet1").Range("e2", Range("e2").End(xlDown)).Value = ">0" Then
        Worksheets("Sheet2").Range("j2").Copy 'macro6

Worksheets("Sheet2").Activate 'macro7

【问题讨论】:

  • 我想帮忙,但老实说不明白这个问题。尝试编辑问题并重新表述问题(第一段)。
  • 我有原始数据 (sheet1) 我需要的原始数据信息在 (Sheet2) 的标题中我正在尝试逐列复制我需要的信息从 (Sheet1) 到 (表 2)。所以要运行的第一个宏是将所有数据从“A2”复制到A列中数据的末尾,然后从A2向下复制到(Sheet2)。现在该列不是问题,因为 A 列中的所有行都将包含数据。一旦我到达 Macro4 就是问题开始的地方,因为 g2: down 的每个单元格中都没有信息。找到空白后宏将停止,不处理任何其他数字。
  • 如果 g 列的单元格中有一个空白,我仍然需要该空白来保持其当前位置,同时复制数据并粘贴到与行号相关的(表 2)。感谢您的回复,因为我是该网站的新手并正在学习 VBA。

标签: vba if-statement copy paste no-data


【解决方案1】:

Range.end(xldown) 只会为您提供一个连续的范围(实际上它会在第一个空白单元格处停止)。

由于您想要包含空白,您可能希望从工作表的最后一行开始工作,直到该列中遇到的第一个非空白单元格(这是获取最后一行的一种方式)。

这意味着类似:

' If you are new to With statements (below), any objects within the With block that begin with a . relate to "Sheet1". Saves us typing Sheet1 repeatedly, and makes sense to use it since we access a lot of Sheet1's members like range/cells/rows

With Worksheets("Sheet1")

.Range("a2", .cells(.rows.count, "A").End(xlup)).Copy Worksheets("Sheet2").Range("a2") 'macro1

End with

未经测试,在移动设备上编写 - 但希望它有效或让您更接近解决方案。您需要复制粘贴上述内容并将A 更改为 B、C、D、E 等。我不太确定您要使用宏 5 中的“

(如果您将代码转换为参数化的Sub 并仅将列字母/数字作为参数提供给 sub 会更好,但这取决于您对 VBA 和一般编程的新程度——以及暂时是您更容易理解/维护的时间。)

修改宏 5 和 6

With Worksheets("Sheet1")

Dim cell as range

For each cell in .Range("E2", .Cells(.Rows.Count, "E").End(xlUp))

If cell.Value <= 0 Then 'Get rid of the equal sign if you don't want it in your logic/condition'

Cell.Copy Worksheets("Sheet2").cells(cell.row, "I") 'Macro5

ElseIf cell.value > 0 Then

Cell.Copy Worksheets("Sheet2").cells(cell.row, "J") 'Macro6
End If

Next cell

End With



Worksheets("Sheet2").Activate 'macro7

【讨论】:

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