Excel 从包含隐藏行的外部工作表复制一组数据

Excel 从包含隐藏行的外部工作表复制一组数据,excel,vba,Excel,Vba,因此,我想从外部工作表(源)复制一组外部数据,但源有一个过滤器,并隐藏了一些行。现在我希望它能复制所有的数据,包括隐藏的数据。下面是我的代码,其中“ROCV”是内部目标表,“PROJECT DETAIL”是外部数据源: (顺便说一句,我是第一次来这里,也是一个非常业余的VBA编码器,所以请耐心听我说:D) 使用ShowAllData Sub test() Dim wb1 As Workbook, wb2 As Workbook Dim Ret1, Ret2 Dim Ws

因此,我想从外部工作表(源)复制一组外部数据,但源有一个过滤器,并隐藏了一些行。现在我希望它能复制所有的数据,包括隐藏的数据。下面是我的代码,其中“ROCV”是内部目标表,“PROJECT DETAIL”是外部数据源: (顺便说一句,我是第一次来这里,也是一个非常业余的VBA编码器,所以请耐心听我说:D)


使用ShowAllData

Sub test()

    Dim wb1 As Workbook, wb2 As Workbook
    Dim Ret1, Ret2
    Dim Ws As Worksheet
    Dim vDB As Variant
    
    Set wb1 = ActiveWorkbook
    
    '~~> Get the File
    Ret1 = Application.GetOpenFilename("Excel Files (*.xls*), *.xls*", _
    , "Please select file")
    If Ret1 = False Then Exit Sub
    
    Set wb2 = Workbooks.Open(Ret1, UpdateLinks:=False)
    Set Ws = wb2.Sheets("PROJECT DETAIL")
    
    If Ws.FilterMode Then
        Ws.ShowAllData
    End If
    
    '** Receives values into a two-dimensional array, and assigns the values of the array back to the target worksheet.
    vDB = Ws.Range("a7").CurrentRegion
    wb1.Worksheets("ROCV").Range("A7").Resize(UBound(vDB, 1), UBound(vDB, 2)) = vDB
    
    'Ws.Range("a7").CurrentRegion.Copy Destination:=wb1.Worksheets("ROCV").Range("A7")
    'wb2.Sheets("PROJECT DETAIL").Range("a7").CurrentRegion.Copy Destination:=wb1.Worksheets("ROCV").Range("A7")
    wb2.Close SaveChanges:=False
    
    
    
    Set wb2 = Nothing
    Set wb1 = Nothing
End Sub

使用ShowAllData

Sub test()

    Dim wb1 As Workbook, wb2 As Workbook
    Dim Ret1, Ret2
    Dim Ws As Worksheet
    Dim vDB As Variant
    
    Set wb1 = ActiveWorkbook
    
    '~~> Get the File
    Ret1 = Application.GetOpenFilename("Excel Files (*.xls*), *.xls*", _
    , "Please select file")
    If Ret1 = False Then Exit Sub
    
    Set wb2 = Workbooks.Open(Ret1, UpdateLinks:=False)
    Set Ws = wb2.Sheets("PROJECT DETAIL")
    
    If Ws.FilterMode Then
        Ws.ShowAllData
    End If
    
    '** Receives values into a two-dimensional array, and assigns the values of the array back to the target worksheet.
    vDB = Ws.Range("a7").CurrentRegion
    wb1.Worksheets("ROCV").Range("A7").Resize(UBound(vDB, 1), UBound(vDB, 2)) = vDB
    
    'Ws.Range("a7").CurrentRegion.Copy Destination:=wb1.Worksheets("ROCV").Range("A7")
    'wb2.Sheets("PROJECT DETAIL").Range("a7").CurrentRegion.Copy Destination:=wb1.Worksheets("ROCV").Range("A7")
    wb2.Close SaveChanges:=False
    
    
    
    Set wb2 = Nothing
    Set wb1 = Nothing
End Sub

谢谢你,李迪!这工作这么好,我很惊讶!除了其中一个变化。如下所示,“set wb2”字符串有一个“updatelinks”属性,用于在打开文件时禁用链接更新请求功能。然而,我认为随着您添加了“Set WS”,它现在要求找到公式的链接位置。我可以简单地取消i,但我仍然希望在宏运行时将其完全禁用。您能再帮我一次吗我再次感谢你
Set wb2=Workbooks.Open(Ret1,UpdateLinks:=False)Set Ws=wb2.Sheets(“项目详细信息”)
现在我知道了,它应该在这个部分的某个地方有一个“粘贴为值”,但我似乎不知道正确的代码在哪里,是什么。显然,它复制的一些隐藏行中有外部链接源,应该忽略这些链接源。”Ws.Range(“a7”).CurrentRegion.Copy Destination:=wb1.Worksheets(“ROCV”).Range(“a7”)”@BoyDespasito,如果您试图检索一个值,则可以方便地使用数组。更正了答案。谢谢你,李迪!这工作这么好,我很惊讶!除了其中一个变化。如下所示,“set wb2”字符串有一个“updatelinks”属性,用于在打开文件时禁用链接更新请求功能。然而,我认为随着您添加了“Set WS”,它现在要求找到公式的链接位置。我可以简单地取消i,但我仍然希望在宏运行时将其完全禁用。您能再帮我一次吗我再次感谢你
Set wb2=Workbooks.Open(Ret1,UpdateLinks:=False)Set Ws=wb2.Sheets(“项目详细信息”)
现在我知道了,它应该在这个部分的某个地方有一个“粘贴为值”,但我似乎不知道正确的代码在哪里,是什么。显然,它复制的一些隐藏行中有外部链接源,应该忽略这些链接源。”Ws.Range(“a7”).CurrentRegion.Copy Destination:=wb1.Worksheets(“ROCV”).Range(“a7”)”@BoyDespasito,如果您试图检索一个值,则可以方便地使用数组。更正了答案。