Метод 'Союз' объекта '_Global не удался - PullRequest
0 голосов
/ 03 июля 2019

Обновление: Я понял, что не могу использовать объединение на нескольких листах.Какой лучший выбор у меня тогда?

Я просто хочу объединить все листы в рабочей книге в первый лист.

После того, как я прошел через существующие вопросы, я попытался добавить Наборrng = ничего, чтобы очистить мой диапазон, но это не помогло.

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 fail *

Обновление 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 голосов
/ 03 июля 2019

На самом деле .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

Приведенный выше код вставляет диапазоны один за другим в один и тот же столбец.Его можно легко изменить, чтобы вставить диапазоны в разные столбцы, один рядом с другим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...