Worksheets(ListBox2.List(K, 0)).Copy
Делая слишком много вещей одновременно, делая слишком много предположений: предполагается, что ActiveWorkbook
имеет рабочий лист с именем ListBox2.List(K, 0)
.Также предполагается, что ListBox2.List(K, 0)
будет успешным.
Разбейте его.
Dim sheetName As String
sheetName = ListBox2.List(K, 0)
Если это удастся, мы можем приступить к получению рабочего листа:
Dim ws As Worksheet
Set ws = ActiveWorkbook.Worksheets(sheetName)
Если это удастся, мы можем приступить к копированию листа:
ws.Copy
Но мы находимся в цикле ... и ws.Copy
собирается изменить ActiveWorkbook
- так что если первая итерация сработалавторой гарантированно взорвется.
Поэтому первое, что нужно сделать, - это захватить «исходную» книгу еще до того, как мы начнем:
Dim srcBook As Workbook
Set srcBook = ActiveWorkbook
И затем использовать эту ссылку на объектчтобы квалифицировать Worksheets
вызов:
...
Set ws = srcBook.Worksheets(sheetName)
...
Теперь следующая проблема заключается в том, что каждый выбранный лист будет скопирован в новую рабочую книгу - это означает, что каждый выбранный лист получает свою собственную новуюРабочая тетрадь.
Если это задумано, все хорошо.Но это не то, как я прочитал « скопировать листы в новую рабочую книгу » - верно?
Чтобы все копии оказались в одной и той же книге назначения, вам необходимо сохранить ссылкук этой книге.И поскольку он будет создан и активирован на лету с помощью первой сделанной вами копии, я сделаю что-то вроде этого:
Dim dstBook As Workbook
...
If dstBook Is Nothing Then
'destination workbook doesn't exist yet
ws.Copy
Set dstBook = ActiveWorkbook
Else
'copy worksheet to destination workbook, after the last sheet
With dstBook
ws.Copy After:=.Worksheets(.Worksheets.Count)
End With
End If
...
Итак:
Dim srcBook As Workbook
Set srcBook = ActiveWorkbook ' ThisWorkbook?
Dim dstBook As Workbook
For K = 0 To ListBox2.ListCount - 1
If ListBox2.Selected(K) Then
Dim sheetName As String
sheetName = ListBox2.List(K, 0)
Dim ws As Worksheet
Set ws = srcBook.Worksheets(sheetName)
If dstBook Is Nothing Then
'destination workbook doesn't exist yet
ws.Copy ' creates & activates a new workbook
Set dstBook = ActiveWorkbook 'there's our destination
Else
'copy worksheet to destination workbook, after the last sheet
With dstBook
ws.Copy After:=.Worksheets(.Worksheets.Count)
End With
End If
End If
Next