Live-Forum - Die aktuellen Beiträge
Datum
Titel
17.04.2024 18:57:33
17.04.2024 16:56:58
Anzeige
Archiv - Navigation
1520to1524
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
prüfen ob Worksheet vorhanden
24.10.2016 16:46:16
Gerhard
Hallo zusammen,
mit einem Makro erzeuge ich monatlich/oder an beliebigem Datum das Blatt "wksMonat" mit dem Blattname Januar 2016, Februar 2016 usw.
Dieses jeweils neu erzeugte Blatt wird in die gleichzeitig geöffnete Datei "Monate" kopiert.
Sub codeschnipsel()
Workbooks.Open Filename:=ThisWorkbook.Path & "\Monate.xlsx"
With wksMonat
.Copy After:=Workbooks("Monate.xlsx").Sheets(2)
End With
ActiveWorkbook.Save
ActiveWindow.Close
wksMonat.Delete
ActiveWindow.SelectedSheets.Delete
Application.ScreenUpdating = True
End Sub

Mit diesem .copy Befehl gelingt dies. ABER wenn das Monatsblatt bereits vorhanden ist wird als Januar 2016(2) oder Januar 2016(3) kopiert. Dies muss/möchte ich vermeiden. Deshalb sollte die Meldung kommen :"xxxx 2016" ist bereits vorhanden: Abbrechen? Überschreiben? oder Speichern mit Namenszusatz HEUTE?
Der erzeugte Blattname wäre dann z.B. Januar 2016_24.10 (weil heute am 24.10. erzeugt).
Diese Anpassung übersteigt meine Möglichkeiten weit!
Könnte mir jmd. diesen Code schreiben?
Sehr gerne erhalte ich dazu Nachrichten!
Gruß
Gerhard

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: prüfen ob Worksheet vorhanden
24.10.2016 17:17:49
Anton
Hi Gerhard,
mit dieser Funktion hier z.B:
Function TabDa(strBlatt As String) As Boolean
Dim wksBlatt As Worksheet
For Each wksBlatt In ThisWorkbook.Worksheets
If wksBlatt.Name = strBlatt Then
TabDa = True
Exit For
End If
Next wksBlatt
End Function
Dann Funktion in Sub aufrufen.
Sub TabellenBenennenMitPrüfung()
If TabDa("Tabelle10") = False Then
Worksheets.Add.Name = "Januar 2016"
Else
MsgBox "Die Januar 2016 ist bereits in der Mappe!"
End If
End Sub
VG Anton
AW: prüfen ob Worksheet vorhanden
24.10.2016 19:06:47
Gerhard
Hallo Anton,
Danke für deine Antwort.
Leider hatte ich in der Anfrage dies nicht deutlich genug beschrieben:
In der Ursprungsdatei "Anwesenheit.xlsm" werden Monatsblätter (= wksMonat) z. B. "Januar 2016" als Kopie eines Tabellenbereichs einmalig erzeugt. Das erzeugte Blatt ist vorher nicht vorhanden und wird nach dem Kopiervorgang wieder gelöscht. Deshalb kann/muss in der Ursprungsdatei auf Duplikat nicht geprüft werden.
Das aktuelle, neu erzeugte Monatsblatt z. B. Worksheet("Januar 2016") wird in die Ziel-Datei "Monate.xlsm" kopiert und anschließend in der Ursprungsdatei "Belegungsplanung" gelöscht. In der Zieldatei könnte das Monatsblatt Worksheet("Januar 2016") aber bereits vorhanden sein. Mit meinem bisherigen Code wird ungeprüft kopiert und evtl. das Blatt "Januar 2016(2) oder ...(3) zugefügt. Hier in der Ziel-Datei "Monate.xlsm" soll vor dem Einfügen des Blattes auf Überschreiben? oder Anderer Blattname? geprüft werden. Die Überprüfung muss im Makro in der Ursprungsdatei erfolgen.
Mit (..With wksMonat .Copy After:=Workbooks("Monate.xlsx").Sheets(2)...) geschieht KEINE Prüfung.
Ich hoffe, dass es dafür eine Lösung gibt.
Gruß
Gerhard
Anzeige
AW: prüfen ob Worksheet vorhanden
24.10.2016 19:32:07
Anton
Hallo Gerhard,
danke für die ausführliche Erklärung. Die Funktion sollte nur ein Denkanstoß sein, wie die Prüfung gelöst werden kann. Ich werde versuchen den von Dir gewünschten Code umzusetzen.
Vielleicht haben ja andere Mitglieder eine schnellere Lösung parat :)
VG Anton
AW: prüfen ob Worksheet vorhanden
24.10.2016 23:04:03
Anton
Hi Gerhard,
hab mich noch mal hingesetzt. Bin zwar kein VBA-Profi aber hier mein Vorschlag. Ich hoffe, dass es in die Richtung geht. Wahrscheinlich gibts auch eine elegantere Variante. Verbesserungsvorschläge sind herzlich willkommen!
Function TabDa2(strBlatt As String) As Boolean
Dim wksBlatt As Worksheet
Dim wkbziel As Workbook
Set wkbziel = Workbooks("Monate.xlsm")
For Each wksBlatt In wkbziel.Worksheets
If wksBlatt.Name = strBlatt Then
TabDa2 = True
Exit For
End If
Next wksBlatt
End Function
Sub codeschnipsel()
Dim wkbziel As Workbook
Dim wkbQuelle As Workbook
Dim wksMonat As Worksheet
Dim strPfad As String
Dim strPfadZiel As String
Dim tabName As String
Dim byWert As Byte
Application.DisplayAlerts = False
Application.ScreenUpdating = False
strPfad = "C:\" 'Pfad Quelldatei "Anwesenheit.xlsm" anpassen
strPfadZiel = "C:\" 'Pfad Zielmappe "Monate.xlsm" anpassen
Set wkbQuelle = Application.Workbooks.Open(strPfad)
Set wkbziel = Application.Workbooks.Open(strPfadZiel)
For Each wksMonat In wkbQuelle.Worksheets
If TabDa2(wksMonat.Name) = False Then
wksMonat.Copy After:=Workbooks("Monate.xlsm").Worksheets(Worksheets.Count)
wksMonat.Delete
Else
byWert = MsgBox(wksMonat.Name & " ist bereits vorhanden! Soll überschrieben werden?" _
, 4, "Abfrage bei vorhanden")
On Error GoTo fehler: 'Wenn wkbQuelle nach Schleife leer, Default Tabelle  _
hinzufügen
If byWert = 6 Then
Workbooks("Monate.xlsm").Worksheets(wksMonat.Name).Delete
wksMonat.Copy After:=Workbooks("Monate.xlsm").Worksheets(Worksheets.Count)
wksMonat.Delete
ElseIf byWert = 7 Then
byWert = MsgBox("Soll für das vorhandene Blatt " & wksMonat.Name & _
" ein neuer Tabellenname angelegt werden?", 4, "Vorhandener  _
Tabellenname")
If byWert = 6 Then
wiederholen:
tabName = InputBox(prompt:="Bitte Namen eingeben")
If Len(tabName) > 0 Then
wksMonat.Name = tabName
wksMonat.Copy After:=Workbooks("Monate.xlsm").Worksheets(Worksheets. _
Count)
wksMonat.Delete
GoTo next_i 'Nächste wksMappe, wenn Name eingegeben wurde
ElseIf byWert = 7 Then GoTo next_i
Else: GoTo wiederholen 'Wenn kein Name eingegeben wurde
End If
End If
End If
End If
next_i:
Next wksMonat
fehler:
While wkbQuelle.Worksheets.Count > 1 'Falls nicht alle Tabellen in wkbQuelle gelöscht  _
wurden
Worksheets(1).Delete
Wend
Workbooks("Anwesenheit.xlsm").Close savechanges:=True
Workbooks("Monate.xlsm").Close savechanges:=True
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
VG Anton
Anzeige
AW: prüfen ob Worksheet vorhanden
25.10.2016 09:24:10
Gerhard
Hallo Anton,
erst heute Abend werde ich deine Makros übernehmen und testen können. Ich melde mich dann anschließend. Danke einstweilen für deine investierte Zeit!!
Gruß
Gerhard

18 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige