2

这是一个困难的 Visual Basic 问题,所以我不确定这个论坛中是否有人能提供帮助。但值得一试。

我用 Visual Basic 编写了一个程序,用作 Excel 中的宏。

在宏中,我在 sheet1(最终)中获取数据并将值复制并粘贴到 sheet2(数据)中。我在 sheet1 中的数据范围有很多空白单元格,所以我想创建一个程序,它只会粘贴带有值的行(而不是只有空白单元格的行)。

我的程序现在在粘贴到 sheet2 之前修改了表 1 中的数据范围,我不希望这样……..我的格式也因此被搞砸了。相反,我希望 sheet1 中的数据保持完全相同,并且在粘贴操作中删除空白行进入 sheet2。

我在 sheet1 中的数据从 AL 列开始,然后到 CD 列。

保持行的完整性非常重要。我不希望在粘贴过程中删除空白单元格,而是希望在粘贴过程中删除范围中的空白行。因此,如果列 AL 和 CD 之间有一行甚至只有一个数据点,则该行作为一个整体必须保留在粘贴中。但是对于列 AL 和 CD 之间完全空白的任何行,需要在进入 sheet2 的粘贴操作中将其删除。

我现有的程序如下。任何帮助将不胜感激。

Dim ws As Worksheet

Set ws1 = Worksheets("FINAL")
Set ws2 = Worksheets("Data")

With ws1.UsedRange
lastcolumn = .Cells(1, 1).Column + .Columns.Count - 1
lastrow = .Cells(1, 1).Row + .Rows.Count - 1
End With

ws1.Range(Cells(1, 38), Cells(lastrow, lastcolumn)).AutoFilter field:=1, Criteria1:="<>"
ws1.Range(Cells(1, 38), Cells(lastrow, lastcolumn)).Copy

ws2.Range("A1").PasteSpecial xlPasteValues

Application.CutCopyMode = False
4

1 回答 1

2

这是一个困难的 Visual Basic 问题,所以我不确定这个论坛中是否有人能提供帮助。但值得一试。

希望值得一试:P

这是你正在尝试的吗?

Sub Sample()
    Dim wsInput As Worksheet, wsOutput As Worksheet
    Dim rng As Range, CellsTobeCopied As Range, aCell As Range

    '~~> Sheet which has range that you want to copy
    Set wsInput = ThisWorkbook.Sheets("Sheet1")

    '~~> Set range that you would like to copy
    Set rng = wsInput.Range("A1:E4")

    '~~> Output Sheet where you want to paste
    Set wsOutput = ThisWorkbook.Sheets("Sheet2")

    For Each aCell In rng.Rows
        '~~> Check if the entire row is blank
        If Application.WorksheetFunction.CountA(aCell) <> 0 Then
            '~~> Construct your range to be copied
            If CellsTobeCopied Is Nothing Then
                Set CellsTobeCopied = aCell
            Else
                Set CellsTobeCopied = Union(CellsTobeCopied, aCell)
            End If
        End If
    Next

    '~~> Copy final range
    If Not CellsTobeCopied Is Nothing Then
        CellsTobeCopied.Copy
        '~~> In case you want to preserve formats
        wsOutput.Range("A1").PasteSpecial xlPasteAll

        '~~> If you wan tto paste values then comment the above and use this
        ' CellsTobeCopied.Copy wsOutput.Range("A1")
    End If
End Sub

截屏

在此处输入图像描述

于 2013-04-17T14:05:03.813 回答