2016-05-13 15 views
0

Ich habe einen VBA-Code geschrieben, um zu sehen, ob ein Blatt existiert und ob es gelöscht wird und dann ein anderes Codemodul wieder aufnimmt. Aus irgendeinem Grund tut der Code, den ich unten habe, nichts und ich kann nicht herausfinden warum.Arbeitsblatt löschen, wenn Code vorhanden ist

Sub delete() 
    Dim ws As Worksheet 

    If worksheetexists("Export Worksheet") Then 
     Set ws = Worksheets("Export Worksheet")   
     Application.DisplayAlerts = False   
     ws.delete   
     Call GetData   
    Else 
     Call GetData 
    End If 

End Sub 

Public Function worksheetexists(sheetname As String, Optional wrkbk As Workbook) As Boolean 
    Dim wrksht As Worksheet 

    If wrkbk Is Nothing Then 
     Set wrkbk = ActiveWorkbook   
    End If 

    On Error Resume Next 

    Set wrksht = wrkbk.Worksheets(sheetname) 
    worksheetexists = (Err.Number = 0) 
    Set wrksht = Nothing 

    On Error GoTo 0 
End Function 
+1

Der Code sieht syntaktisch korrekt aus. Sind Sie sicher, dass das aktive Workbook ein Blatt mit dem Namen "Export Worksheet" enthält? – user3561813

+0

Ja, das ist der Grund, warum ich so verwirrt bin ... Ich frage mich, ob ich den Code an der falschen Stelle habe. Was ich tun möchte, ist das Ausführen von einem Knopfdruck, bevor ein anderer Code ausgeführt wird. –

+0

Ich denke, wir sollten das Problem eingrenzen. Wir können zuerst prüfen, ob 'worksheetexists 'wahr oder falsch zurückgibt. Vielleicht können Sie eine 'MsgBox' in die' If' Anweisung in der 'delete() 'Prozedur einfügen. Wenn 'worksheetexists' zutrifft, muss die' MsgBox' 'True' anzeigen, sonst wird 'false' angezeigt. Auf diese Weise können wir feststellen, ob dieser Fehler in der Funktion auftritt. – user3561813

Antwort

0

ich Ihren Code leicht aktualisiert:

Sub delete() 
    Dim ws As Worksheet 

    If worksheetexists("Export Worksheet") Then 
     Set ws = Worksheets("Export Worksheet") 
     Application.DisplayAlerts = False 
     ws.delete 
     Call GetData("pass") 
    Else 
     Call GetData("fail") 
    End If 

End Sub 

und verwendet diese für GetData():

Sub GetData(s) 
    MsgBox s 
End Sub 

und es funktionierte perfekt sowohl für den Pass und scheitern Fälle. Überprüfen Sie die Schreibweise des Arbeitsblattnamens ............................ insbesondere die Anzahl der Leerzeichen.

+0

Wo haben Sie den Code in einem eigenen Modul oder in der Arbeitsmappe abgelegt? –

+0

@BriannaCates Ich habe den gesamten Code in ein Standardmodul gesteckt. –

+0

Ok, da habe ich auch meine Ich habe keine Ahnung, warum es nicht funktioniert –

0

@BriannaCates, die Funktion funktioniert für mich, funktioniert vielleicht für Sie.

Public Function deleteWorksheet(sheet As String, Optional work As Workbook) As Boolean 
    Dim ws As Worksheet 
    Dim deleted As Boolean 

    If work Is Nothing Then 
     Set work = ThisWorkbook 
    End If 

    deleted = False 
    For Each ws In work.Worksheets 
     If ws.Name = sheet Then 
      ws.Delete 
      deleted = True 
      Exit For 
     End If 
    Next 

    deleteWorksheet = deleted 

End Function 
Verwandte Themen