2015-01-09 2 views
0

Я нашел этот код онлайн, и он делает почти то, что я хочу. В настоящее время он предоставляет список рабочих листов в рабочей книге (в пользовательской форме), после чего я могу выбрать, какие рабочие листы удалить (через флажок), и он сохранит не выбранные листы.Выбор и удаление листов 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 
+0

И какие ошибок вы столкнулись, когда вы пытались изменить код, чтобы обеспечить требуемое поведение? – EWit

+0

Наряду с предоставленным ответом вы захотите изменить MsgBox на что-то вроде этого, пожалуйста, снимите флажки, которые вы хотите удалить. Или что-то в этом роде. – peege

+0

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

ответ

2

Попробуй изменить этот раздел кода от Верного Ложных

For i = 0 To .ListCount - 1 
    'Change the next line 
    If .Selected(i) = False Then 
     Cnt = Cnt + 1 
     ReDim Preserve MyArray(1 To Cnt) 
     MyArray(Cnt) = .List(i) 
    End If 
    Next i 
+0

Это работало !! Большое спасибо, я подчеркиваю это в течение 2 дней! – JAEKMA

+0

Добро пожаловать. Я рад, что это было полезно. –