/ / Відфільтруйте аркуш і скопіюйте виділення на новий аркуш за допомогою VBA - excel, vba, excel-vba

Відфільтруйте аркуш і скопіюйте вибір на новий аркуш за допомогою VBA - excel, vba, excel-vba

Спроба фільтрувати, а потім копіювати відфільтровані комірки в циклі, отримуючи повідомлення про помилку "метод вставлення класу робочого аркуша не вдався".

Здається, це не вдається, тому що я використовую цикл, я пробував інші методи спеціальної вставки, але це, здається, не працює, будь ласка, допоможіть

Sub Split()

Dim wsYes As Worksheet
Set wsYes = Worksheets("YES")

With wsYes

Dim myRange As Range
Set myRange = .Range("A2", .Range("A2").End(xlDown))

myRange.Copy .Cells(1, .Columns.Count) "copy to far right column
.Cells(1, .Columns.Count).Resize(myRange.Rows.Count, 1).RemoveDuplicates 1, xlNo

Set myRange = .Range(.Cells(1, .Columns.Count), .Cells(1, .Columns.Count).End(xlDown))

For Each MyCell In myRange



Dim sName As String
sName = UCase(MyCell.Value)


Range("A1").Select
Selection.AutoFilter
ActiveSheet.Range("$A$1:$B$9").AutoFilter Field:=1, Criteria1:= _
sName

Range("B:B").Select
Selection.Copy

Dim wsNew As Worksheet
Set wsNew = Sheets.Add(After:=Sheets(Sheets.Count)) " creates a new worksheet
wsYes.Range("B:B").Copy
With wsNew
.Name = sName
.Range("A1").Value = "Column Name"
.Range("A1").Font.Bold = True
.Range("A2").Value = sName
.Range("B1").Select
ActiveSheet.Paste


End With

Next MyCell

myRange.Clear

End With



End Sub

Спасибі заздалегідь

Відповіді:

0 для відповіді № 1

Вам потрібно мати Копіювати та Вставляти разом, а не робити інші речі wsNew аркуш

Sub Split()

Dim wsYes As Worksheet
Set wsYes = Worksheets("YES")

With wsYes

Dim myRange As Range
Set myRange = .Range("A2", .Range("A2").End(xlDown))

myRange.Copy .Cells(1, .Columns.Count) "copy to far right column
.Cells(1, .Columns.Count).Resize(myRange.Rows.Count, 1).RemoveDuplicates 1, xlNo

Set myRange = .Range(.Cells(1, .Columns.Count), .Cells(1, .Columns.Count).End(xlDown))

For Each MyCell In myRange

Dim sName As String
sName = UCase(MyCell.Value)

wsYes.Select
Range("A1").Select
Selection.AutoFilter
ActiveSheet.Range("$A$1:$B$9").AutoFilter Field:=1, Criteria1:=sName

wsYes.Range("B:B").Select
Selection.Copy

Dim wsNew As Worksheet
Set wsNew = Sheets.Add(After:=Sheets(Sheets.Count)) " creates a new worksheet

With wsNew
.Name = sName
.Range("A1").Value = "Column Name"
.Range("A1").Font.Bold = True
.Range("A2").Value = sName

" moved copy and paste tasks one after the other
wsYes.Range("B:B").Copy
.Columns("B:B").Select
ActiveSheet.Paste
End With

Next MyCell
myRange.Clear

End With

End Sub

0 для відповіді № 2

Спробуйте цей код.

Sub Split()

Dim MyCell As Range

Dim wsYes As Worksheet
Set wsYes = Worksheets("YES")

With wsYes

Dim myRange As Range
Set myRange = .Range("A2", .Range("A2").End(xlDown))

myRange.Copy .Cells(1, .Columns.Count) "copy to far right column
.Cells(1, .Columns.Count).Resize(myRange.Rows.Count, 1).RemoveDuplicates 1, xlNo

Set myRange = .Range(.Cells(1, .Columns.Count), .Cells(1, .Columns.Count).End(xlDown))

For Each MyCell In myRange



Dim sName As String
sName = UCase(MyCell.Value)

With wsYes
.Range("A1").Select
.Selection.AutoFilter
.Range("$A$1:$B$9").AutoFilter Field:=1, Criteria1:=sName

Dim wsNew As Worksheet
Set wsNew = Sheets.Add(After:=Sheets(Sheets.Count)) " creates a new worksheet
End With
With wsNew
.Name = sName
.Range("A1").Value = "Column Name"
.Range("A1").Font.Bold = True
.Range("A2").Value = sName
.Range("B1").Select
wsYes.Range("B:B").Copy
ActiveSheet.Paste


End With

Next MyCell

myRange.Clear

End With



End Sub

Здається, після виготовлення A1 напівжирним шрифтом це очищало буфер, щоб у вас нічого не копіювалось.