2017-04-25 3 views
0

Ich versuche, einen VBE-Code zum Erstellen eines neuen Excel-Arbeitsblatt erstellen.So erstellen Sie, wenn Bedingung zum Erstellen von Excel-Blättern

Um ein neues Arbeitsblatt zu erstellen ich den Code unten bin mit und arbeitet wirklich gut:

Dim ws As Worksheet 
    With ThisWorkbook 
     Set ws = .Sheets.Add(After:=.Sheets(.Sheets.count)) 
     ws.Name = "Savings" 
    End With 

Aber jetzt brauche ich diesen Code in ein ZF-Zustand zu ändern, die auf dieser Logik funktionieren wird: wenn es Ein Arbeitsblatt mit dem Namen "Savings" löscht es und erstellt ein neues Arbeitsblatt mit dem Namen "Savings". Ansonsten erstellen Sie einfach das Blatt "Savings".

Nachdem ich das Arbeitsblatt "Savings" erstellt habe, möchte ich als neue Datei speichern und möchte einen Namen (wie Savings) im Namensfeld des Speichern unter-Dialogfelds vorschlagen.

Danke Jungs für mich immer helfen

Antwort

0

etwas zu erreichen, sollte für Sie arbeiten:

Sub tgr() 

    Dim wsSav As Worksheet 
    Dim sSavePath As String 
    Dim sExt As String 
    Dim lFileFormat As Long 

    With ThisWorkbook 
     On Error Resume Next 'Prevent error if worksheet doesn't exist 
     Set wsSav = .Sheets("Savings") 
     On Error GoTo 0   'Remove error condition 

     If Not wsSav Is Nothing Then 
      Application.DisplayAlerts = False 'Suppress "Are you sure?" worksheet delete prompt 
      wsSav.Delete 
      Application.DisplayAlerts = True 
     End If 
     Set wsSav = .Sheets.Add(After:=.Sheets(.Sheets.Count)) 
     wsSav.Name = "Savings" 

     sSavePath = Application.GetSaveAsFilename("Savings") 
     If sSavePath = "False" Then Exit Sub 'user pressed cancel 

     sExt = Mid(sSavePath, InStrRev(sSavePath, ".") + 1) 
     If Len(sExt) = 0 Then 
      sExt = "xlsm" 
      sSavePath = sSavePath & sExt 
     End If 

     Select Case LCase(sExt) 
      Case "xlsm": lFileFormat = 52 
      Case "xlsx": lFileFormat = 51 
      Case "xls":  lFileFormat = 56 
      Case Else: 
       MsgBox "Invalid Excel file extension """ & sExt & """" & Chr(10) & _ 
         "Unable to save file." 
       Exit Sub 
     End Select 

     Application.DisplayAlerts = False 'Suppress overwrite prompt (if any) 
     .SaveAs sSavePath, lFileFormat 
     Application.DisplayAlerts = True 
    End With 

End Sub 
+0

Wissen Sie, wie Sie den Befehl .show einfügen, der beim Speichern der Datei diese neue Datei öffnet? In meinem Code, wenn ich das Makro ausführen, speichert es, aber die neue Datei bleibt geschlossen, also muss ich zu dem Ordner gehen, in dem ich die Datei gespeichert habe, und sie öffnen. Und auch ich möchte nur diese spezifische Arbeitssammlung speichern (auf dieser Excel-Datei habe ich zahlreiche Arbeitsblätter) –

+0

@LucasSenne ??? Ein SaveAs speichert die Datei und dann wird Ihre aktive Datei diese gespeicherte Datei. Es sollte nicht notwendig sein, es zu schließen und erneut zu öffnen. – tigeravatar

+0

@LucasSenne Um nur das spezifische Arbeitsblatt zu sparen, müssen Sie ein 'Worksheet.Move' durchführen, um es in seine eigene Arbeitsmappe zu übernehmen und diese Arbeitsmappe zu speichern (mit ActiveWorkbook). Wenn Sie Hilfe dabei brauchen, wäre es eine neue Frage – tigeravatar

0

Dies sollte den Trick:

Dim ws As Worksheet 
With ThisWorkbook 
    For Each ws In .Worksheets 
     If ws.Name = "Savings" Then 'If Savings exists 
      Application.DisplayAlerts = False 'Disable warnings 
      ws.Delete 'Delete Worksheet 
      Application.DisplayAlerts = True 'Enable warnings 
      Exit For 
     End If 
    Next ws 

    'Add Savings Worksheet 
    Set ws = .Worksheets.Add(After:=.Worksheets(.Worksheets.Count)) 
    ws.Name = "Savings" 
End With 

With Application.FileDialog(msoFileDialogSaveAs) 'SaveAs Dialog 
    .InitialFileName = "Savings" 'Suggested Name 
    .AllowMultiSelect = False 

    .Show 
    If .SelectedItems.Count > 0 Then 
     ThisWorkbook.SaveAs .SelectedItems(1) 'Save File 
    End If 
End With 
+0

Fast gearbeitet, die SaveAs Fenster Pop-up perfekt, aber wenn Ich klicke auf die Schaltfläche "Speichern". Dieser Fehler tritt auf ...................................... Fehlernummer 1004 auf der Codezeile ThisWorkbook.SaveAs.SelectedItems (1) –

1

Dies wird das Arbeitsblatt auf Ihre Variable und Test gesetzt, wenn es vorhanden ist. Wenn dies der Fall ist, wird es gelöscht, bevor Sie den Code zum Erstellen des neuen Blattes verwenden. Das Schöne an dieser Art und Weise wird man keine Schleife erfordern es so

Dim ws as worksheet 

On Error Resume Next 
Set ws = ThisWorkbook.Sheets("Savings") 
On Error GoTo 0 

If not ws is nothing then 
    With Application 
     ' Disable Alerts 
     .DisplayAlerts = False 
     ' Delete sheet 
     ws.delete 
     ' Re-enable Alerts 
     .DisplayAlerts = True 
    End With 
End If 

With ThisWorkbook 
    Set ws = .Sheets.Add(After:=.Sheets(.Sheets.count)) 
    ws.Name = "Savings" 
End With 
+0

Schön, aber was ist mit dem zweiten Teil der Post? –

Verwandte Themen