Я нашел этот код онлайн, и он делает почти то, что я хочу. В настоящее время он предоставляет список рабочих листов в рабочей книге (в пользовательской форме), после чего я могу выбрать, какие рабочие листы удалить (через флажок), и он сохранит не выбранные листы.Выбор и удаление листов Excel с помощью пользовательской формы
Я бы хотел, чтобы он работал напротив: выберите листы, которые я хочу сохранить, и удалите невыделенные.
Option Explicit
'thanks domenic mrexcel mvp
Private Sub SubmitButton_Click()
Dim MyArray() As Variant
Dim i As Long
Dim Cnt As Long
With Me.ListBox1
Cnt = 0
For i = 0 To .ListCount - 1
If .Selected(i) Then
Cnt = Cnt + 1
ReDim Preserve MyArray(1 To Cnt)
MyArray(Cnt) = .List(i)
End If
Next i
If Cnt > 0 Then
If Worksheets.Count > UBound(MyArray) Then
Application.DisplayAlerts = False
Worksheets(MyArray).Delete
Application.DisplayAlerts = True
Call UpdateSheetList
Else
MsgBox "A workbook must contain at least one visible sheet.", vbExclamation
End If
Else
MsgBox "Please select one or more sheets for deletion...", vbExclamation
End If
End With
End Sub
Private Sub CancelButton_Click()
'unload form
Unload Me
End Sub
Private Sub UserForm_Initialize()
Call UpdateSheetList
End Sub
Private Sub UpdateSheetList()
Dim wks As Worksheet
With Me.ListBox1
.Clear
For Each wks In Worksheets
.AddItem wks.Name
Next wks
End With
End Sub
И какие ошибок вы столкнулись, когда вы пытались изменить код, чтобы обеспечить требуемое поведение? – EWit
Наряду с предоставленным ответом вы захотите изменить MsgBox на что-то вроде этого, пожалуйста, снимите флажки, которые вы хотите удалить. Или что-то в этом роде. – peege
Добро пожаловать в переполнение стека. Если вы получите ответ на свой вопрос, вы можете принять его как ответ, позволяя будущим читателям быстро узнать решение, не прочитав все комментарии. Он также вознаградит вас и человека, который ответил с некоторыми точками репутации. – peege