Vba 如何仅将可见单元格从工作簿复制到工作簿?

Vba 如何仅将可见单元格从工作簿复制到工作簿?,vba,excel,excel-formula,Vba,Excel,Excel Formula,我以前从未使用过VBA,我不知道命令和其他东西。我真的很努力,我需要一些帮助。我必须只复制指定列中的可见数据并粘贴到另一个工作表,但在运行代码时收到下标超出范围错误。在代码中,我必须从第7行中选择行,我想我的代码有点粗糙。有人能检查我的代码吗?为什么不工作?如有任何关于更好解决方案的建议,我们将不胜感激 Sub CopyData() Windows("Source.xlsx").Activate Range("D7, F7, G7, I7, J7, K7, L7, M7, O7, AD7, A

我以前从未使用过VBA,我不知道命令和其他东西。我真的很努力,我需要一些帮助。我必须只复制指定列中的可见数据并粘贴到另一个工作表,但在运行代码时收到下标超出范围错误。在代码中,我必须从第7行中选择行,我想我的代码有点粗糙。有人能检查我的代码吗?为什么不工作?如有任何关于更好解决方案的建议,我们将不胜感激

Sub CopyData()

Windows("Source.xlsx").Activate
Range("D7, F7, G7, I7, J7, K7, L7, M7, O7, AD7, AX7, CO7, CQ7, CR7, AX7").Select
Range(Selection, Selection.End(xlDown)).Select

If Selection.EntireColumn.Hidden = False Then
Selection.Copy

End If

Windows("Destination.xlsx").Activate
Range("A2").Select
ActiveSheet.Paste

End Sub
试一试:

Sub CopyData()

'set variables for wkb and ws to copy
Dim wbSource As Workbook
Set wbSource = Workbooks("Source.xlsx")

Dim wsCopy As Worksheet
Set wsCopy = wbSource.Worksheets("Sheet1") 'change name as needed

'set variables for wkb and ws to paste
Dim wbDest As Workbook
Set wbDest = Workbooks("Destination.xlsx")

Dim wsDest As Worksheet
Set wsDest = wbDest.Worksheets("Sheet1")

'copy visible cells for specific range
With wsCopy

    Dim lRow As Long
    lRow = .Range("D" & .Rows.Count).End(xlUp).Row

    Dim rCopy As Range
    Set rCopy = Union(.Range("D7:D" & lRow), .Range("F7:F" & lRow), _
        .Range("G7:G" & lRow), .Range("I7:I" & lRow), .Range("J7:J" & lRow), _
        .Range("K7:K" & lRow), .Range("L7:L" & lRow), .Range("M7:M" & lRow), _
        .Range("O7:O" & lRow), .Range("AD7:AD" & lRow), .Range("AX7:AX" & lRow), _
        .Range("CO7:CO" & lRow), .Range("CQ7:CQ" & lRow), .Range("CR7:CR" & lRow))

End With

'paste
rCopy.SpecialCells(xlCellTypeVisible).Copy wsDest.Range("A2")

End Sub
或者你只是用

ActiveSheet.UsedRange.SpecialCells(xlCellTypeVisible)

无交点法。完全取决于您的工作。

如果您愿意,您可以选择一个不是vba的简单解决方案。转到“主页”选项卡中的“查找”部分。选择“去特别的”。仅可选择可见单元格。复制并粘贴到所需位置的其他工作簿。只有可见的单元格将被粘贴。我需要将其自动化,因为我需要每周报表的数据
ActiveSheet.UsedRange.SpecialCells(xlCellTypeVisible)