对象'_Global的方法'Union'失败

时间:2019-07-03 07:18:23

标签: excel vba

更新:我意识到我不能在多张纸上使用联合。 那我最好的选择是什么?

我只想将工作簿中的所有工作表合并到第一个工作表中。

在研究完现有问题之后,我尝试添加Set rng = none来清除我的范围,但这无济于事。

Sub Combine()

     Dim J As Long
     Dim Combine As Range
     Dim rng As Range


      'I want to start from the second sheet and go through all of them
      For J = 2 To Sheets.Count    

      With Sheets(J)
      Set rng = .Range("A1", .Range("A" & .Rows.Count).End(xlUp))
      End With

      For Each Cell In rng
                If Combine Is Nothing Then
                Set Combine = Cell.EntireRow
            Else
                Set Combine = Union(Combine, Cell.EntireRow)
            End If

      Next Cell
      Set rng = Nothing
      Next J

    'Paste the whole union into the 1st sheet
    Combine.Copy Destination:=Sheets(1).Range("A1")

End Sub

所有这些代码使我出错对象'_Global的方法'Union'失败

更新2

Sub Combine2()

 Dim rowcount As Long


  For Each Sheet In Sheets

  If Sheet.Index <> 1 Then
  rowcount = Sheet.UsedRange.Rows.Count

  Sheet.UsedRange.Copy Destination:=Sheets(1).Cells(Lastrow + 1, 1)
  Lastrow = Lastrow + rowcount

  End If
  Next Sheet


End Sub

非常简单的代码,效果很好,这要感谢@luuklag在此方面的领导。

1 个答案:

答案 0 :(得分:0)

实际上.Union方法不适用于工作表。

相反,您可以尝试遍历所有工作表,复制相应的范围并将其粘贴到目标工作表中。

类似以下的内容可以实现:

Sub test()
Dim destinationSheet As Worksheet
Dim sht As Worksheet
Dim destinationRng As Range
Dim rng As Range
Set destinationSheet = ThisWorkbook.Worksheets("Name of your worksheet")

For Each sht In ThisWorkbook.Worksheets

    If sht.Name <> destinationSheet.Name Then

        With sht
            Set rng = .Range(.Range("A1"), .Range("A" & .Rows.Count).End(xlUp))
            rng.Copy
        End With

        With destinationSheet
            Set destinationRng = .Range("A" & .Rows.Count).End(xlUp)
            If destinationRng.Address = .Range("A1").Address Then
                destinationRng.PasteSpecial xlPasteValues
            Else
                destinationRng.Offset(1, 0).PasteSpecial xlPasteValues
            End If
        End With
    End If
Next sht

End Sub

上面的代码将范围一一粘贴到同一列中。可以很容易地对其进行修改,以将范围粘贴到不同的列中,一个接一个。