Supportnet / Forum / Tabellenkalkulation
Makro oeffnen - schliessen
Frage
Habe ein Dokument mit 6 verschiedenen Arbeitsblaettern. Habe nun folgende 2 kleine Probleme.
1. Moechte, dass wenn das Dokument geoeffnet wird immer das "Blatt 1" geoeffnet wird.
2. Wenn das Dokument geschlossen wird sollen die Aenderungen gespeichert werden, jedoch sollen alle anderen Blaetter geloescht werden (bis auf die 6 (Ausgangs-)Blaetter).
Hoffe es haben alle verstanden. Duerfte ne Kleinigkeit sein, jedoch weiss ich nicht genau wie ich es anstellen soll. Vielen Dank
Antwort 1 von Guenter
Hallo Rasta,
zu 1.
In der Entwicklungsumgebung (Alt F11) in der Projektansicht kannst Du bei Diese Arbeitsmappe folgenden Code eingeben:
Gegebenenfalls "Tabelle1" in "Blatt 1" ändern.
An Frage 2. arbeite ich noch, geht aber so ähnlich mit
Gruß
Günter
zu 1.
In der Entwicklungsumgebung (Alt F11) in der Projektansicht kannst Du bei Diese Arbeitsmappe folgenden Code eingeben:
Private Sub Workbook_Open()
Sheets("Tabelle1").Select
End Sub
Gegebenenfalls "Tabelle1" in "Blatt 1" ändern.
An Frage 2. arbeite ich noch, geht aber so ähnlich mit
Private Sub Workbook_BeforeClose(Cancel As Boolean)
' Hier die Bedingungen
End Sub
Gruß
Günter
Antwort 2 von Guenter
Hallo Rasta,
das Makro zu Frage 2.
Du musst entsprechend Deinen Names des Arbeitsblatts ändern.
Gruß
Günter
das Makro zu Frage 2.
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim n As Integer
For n = Worksheets.Count To 1
Sheets(n).Select
If Not ActiveSheet.Name = "Tabelle1" Or Not _
ActiveSheet.Name = "Tabelle2" Or Not _
ActiveSheet.Name = "Tabelle3" Or Not _
ActiveSheet.Name = "Tabelle4" Or Not _
ActiveSheet.Name = "Tabelle5" Or Not _
ActiveSheet.Name = "Tabelle6" Then
Application.DisplayAlerts = False
Sheets(n).Delete
End If
Next
End Sub
Du musst entsprechend Deinen Names des Arbeitsblatts ändern.
Gruß
Günter
Antwort 3 von Rasta
Vielen Dank. Guenter du bist der Beste *schleim*. Meistens machen mir die einfachsten Sachen die meisten Probleme. Vielen vielen Dank. Werde es mal spaeter ausprobieren.
Antwort 4 von Rasta
@Guenter
Habe Excel 2000. Mit Workbook_open funktioniert es nicht, jedoch mit Auto_open. Wieso ist mir allerdings nicht ganz klar. Habe neues Modul angelegt und dieses Makro reingeschrieben.
Sub Auto_open()
Sheets("Blatt1").Select
Range("F7").Select
End Sub
Makro 2 probiere ich jetzt aus
Habe Excel 2000. Mit Workbook_open funktioniert es nicht, jedoch mit Auto_open. Wieso ist mir allerdings nicht ganz klar. Habe neues Modul angelegt und dieses Makro reingeschrieben.
Sub Auto_open()
Sheets("Blatt1").Select
Range("F7").Select
End Sub
Makro 2 probiere ich jetzt aus
Antwort 5 von Rasta
@Guenter
Ich bins nochmal *g*. Also verstehe dein 2tes Makro schon. Aber ich kann es nicht ausfuehren. Weder manuell (in Excel auswaehlen und dann RUN) noch wird es manuell ausgefuehrt. Kann sein, dass der Befehl "Workbook_Beforeclose" nicht richtig erkannt wird (aehnlich wie bei Makro ???)
PS: Kann es manuell ausfuehren (wenn ich das in Klammer weglasse (Zeile 1)) jedoch funktioniert es nicht
Ich bins nochmal *g*. Also verstehe dein 2tes Makro schon. Aber ich kann es nicht ausfuehren. Weder manuell (in Excel auswaehlen und dann RUN) noch wird es manuell ausgefuehrt. Kann sein, dass der Befehl "Workbook_Beforeclose" nicht richtig erkannt wird (aehnlich wie bei Makro ???)
PS: Kann es manuell ausfuehren (wenn ich das in Klammer weglasse (Zeile 1)) jedoch funktioniert es nicht
Antwort 6 von coros@online
Moin,
wohin hast Du denn den VBA-Code kopiert? Der Code sollte nicht in Module oder in den Tabellen eingefügt werden sondern muss in Diese Arbeitsmappe eingefügt werden.
Ich hoffe, ich konnte Dir ein wenig helfen,
coros
wohin hast Du denn den VBA-Code kopiert? Der Code sollte nicht in Module oder in den Tabellen eingefügt werden sondern muss in Diese Arbeitsmappe eingefügt werden.
Ich hoffe, ich konnte Dir ein wenig helfen,
coros
Antwort 7 von Guenter
Hallo und Guten Morgen,
richtig, wie coros schon sagte, den Code in Diese Arbeitsmappe kopieren.
Dort findest Du links Workbook und rechts die Ereignisse, also auch Workbook Open, usw.
Falls Du es nicht finden kannst, nochmals melden.
Gruß
Günter
richtig, wie coros schon sagte, den Code in Diese Arbeitsmappe kopieren.
Dort findest Du links Workbook und rechts die Ereignisse, also auch Workbook Open, usw.
Falls Du es nicht finden kannst, nochmals melden.
Gruß
Günter
Antwort 8 von Rasta
Habe es jetzt in diese Arbeitsmappe kopiert und Makro 1 funktioniert. Jedoch Makro 2 nicht. Es passiert einfach nix. Habe es genau so uebernommen und die Blattnamen geaendert (also Tabelle1, Tabelle2...)
Werde daraus einfach nicht schlau.
Kannst mir genau sagen, was worksheets.count to 1 macht? Zaehlt es Sheets von 1 beginnend?
Und was macht Application.DisplayAlerts=False genau?
Vielen Dank
Werde daraus einfach nicht schlau.
Kannst mir genau sagen, was worksheets.count to 1 macht? Zaehlt es Sheets von 1 beginnend?
Und was macht Application.DisplayAlerts=False genau?
Vielen Dank
Antwort 9 von Guenter
Hallo,
in der Tat, Worksheets.count zählt alle Arbeitsblätter und wenn Du nur von Tabelle1 bis Tabelle6 hast, passiert auch nichts.
Wenn Du mehr Arbeitsblätter hast, z.B. Tabelle7, Tabelle8, usw., werden diese gelöscht. Wenn in diesen Tabellen etwas steht, erfolgt vor dem löschen von Excel eine Nachfrage. Diese wird mit Application.DisplayAlerts = False verhindert, also kommt nichts.
Mir ist aufgefallen, dass Du noch speichern wolltest. Das habe ich jetzt nicht eingebaut in das Makro.
Das musst Du noch nachtragen.
Gruß
Günter
in der Tat, Worksheets.count zählt alle Arbeitsblätter und wenn Du nur von Tabelle1 bis Tabelle6 hast, passiert auch nichts.
Wenn Du mehr Arbeitsblätter hast, z.B. Tabelle7, Tabelle8, usw., werden diese gelöscht. Wenn in diesen Tabellen etwas steht, erfolgt vor dem löschen von Excel eine Nachfrage. Diese wird mit Application.DisplayAlerts = False verhindert, also kommt nichts.
Mir ist aufgefallen, dass Du noch speichern wolltest. Das habe ich jetzt nicht eingebaut in das Makro.
Das musst Du noch nachtragen.
Gruß
Günter
Antwort 10 von Rasta
Mir ist das Prinzip schon klar wie es funktioniert (ausser Count to 1=beginnt bei 1 zu zaehlen). Ich habe manuell eine Tabelle eingefuegt und habe das Dokument geschlossen. Allerdings wird diese Tabelle nicht geloescht, sollte sie aber. Weiss nicht wo der Fehler liegt. Hast ne Idee? Danke
Antwort 11 von Guenter
Hallo,
Worksheets.count zählt die Anzahl aller Arbeitsblätter. Die Schleife geht also von der Gesamtzahl (Worksheets.Count) bis 1. Möglicherweise fehlt da noch Step -1. Ich habe z.Z. kein Excel und kann das nicht nachprüfen.
Melde dich nochmals, wenn es am Montag immer noch nicht läuft.
Gruß
Günter
Worksheets.count zählt die Anzahl aller Arbeitsblätter. Die Schleife geht also von der Gesamtzahl (Worksheets.Count) bis 1. Möglicherweise fehlt da noch Step -1. Ich habe z.Z. kein Excel und kann das nicht nachprüfen.
Melde dich nochmals, wenn es am Montag immer noch nicht läuft.
Gruß
Günter
Antwort 12 von Rasta
Komme wirklich nicht drauf. Bin grad noch ne davor gesessen.
Antwort 13 von Rasta
Das ist meine aktuelle Version, allerdings ignoriert er die ifs und moechte alles loeschen.
Sub Workbook_BeforeClose(Cancel As Boolean)
Dim n As Integer
For n = Worksheets.Count To 1 Step -1
Sheets(n).Select
If Not ActiveSheet.Name = "Tabelle1" Or Not _
ActiveSheet.Name = "Tabelle2" Or Not _
ActiveSheet.Name = "Tabelle3" Or Not _
ActiveSheet.Name = "Tabelle4" Or Not _
ActiveSheet.Name = "Tabelle5" Or Not _
ActiveSheet.Name = "Tabelle6" Then
Application.DisplayAlerts = True
End If
Sheets(n).Delete
ActiveWorkbook.Save
Next
End Sub
Sub Workbook_BeforeClose(Cancel As Boolean)
Dim n As Integer
For n = Worksheets.Count To 1 Step -1
Sheets(n).Select
If Not ActiveSheet.Name = "Tabelle1" Or Not _
ActiveSheet.Name = "Tabelle2" Or Not _
ActiveSheet.Name = "Tabelle3" Or Not _
ActiveSheet.Name = "Tabelle4" Or Not _
ActiveSheet.Name = "Tabelle5" Or Not _
ActiveSheet.Name = "Tabelle6" Then
Application.DisplayAlerts = True
End If
Sheets(n).Delete
ActiveWorkbook.Save
Next
End Sub
Antwort 14 von Guenter
Hallo,
das "End If" ist an der falschen Stelle, deshalb will er alle löschen.
"Sheets(n).Delete" steht nicht in der Schleife.
Gruß
Günter
das "End If" ist an der falschen Stelle, deshalb will er alle löschen.
"Sheets(n).Delete" steht nicht in der Schleife.
Option Explicit
Sub Workbook_BeforeClose(Cancel As Boolean)
Dim n As Integer
For n = Worksheets.Count To 1 Step -1
Sheets(n).Select
If Not ActiveSheet.Name = "Tabelle1" Or Not _
ActiveSheet.Name = "Tabelle2" Or Not _
ActiveSheet.Name = "Tabelle3" Or Not _
ActiveSheet.Name = "Tabelle4" Or Not _
ActiveSheet.Name = "Tabelle5" Or Not _
ActiveSheet.Name = "Tabelle6" Then
Application.DisplayAlerts = True
Sheets(n).Delete
End If
ActiveWorkbook.Save
Next
End Sub
Gruß
Günter
Antwort 15 von Rasta
Geht nicht. Er will mir immer alles loeschen.
Antwort 16 von Rasta
Das Problem liegt definitiv an der If Not Funktion. Irgendwie muss da eine andere Funktion verwendet werden. Habe allerdings keine Ahnung wie ich es anstellen soll.
Antwort 17 von Guenter
Hallo,
schicke mir doch mal eine Excel-Datei.
Es reichen im Prinzip viel(mehr als 6) Tabellenblätter. Es muss nichts auf den Blättern drauf stehen, aber das Makro soll vorhanden sein bei Tabelle1.
Meine e-mail:
guenter.hoelzemann@lycos.de
Gruß
Günter
schicke mir doch mal eine Excel-Datei.
Es reichen im Prinzip viel(mehr als 6) Tabellenblätter. Es muss nichts auf den Blättern drauf stehen, aber das Makro soll vorhanden sein bei Tabelle1.
Meine e-mail:
guenter.hoelzemann@lycos.de
Gruß
Günter
Antwort 18 von Rasta
Habe nun die Loesung. Vielen Dank Guenter fuer deine Bemuehen.
---
Sub Workbook_BeforeClose(Cancel As Boolean)
Dim n As Integer
Application.DisplayAlerts = False
For n = Worksheets.Count To 1 Step -1
Sheets(n).Select
Select Case ActiveSheet.Name
Case "Tabelle1", "Tabelle2".....
Case Else
ActiveSheet.Delete
End Select
Next
ActiveWorkbook.Save
Application.DisplayAlerts = True
End Sub
---
Sub Workbook_BeforeClose(Cancel As Boolean)
Dim n As Integer
Application.DisplayAlerts = False
For n = Worksheets.Count To 1 Step -1
Sheets(n).Select
Select Case ActiveSheet.Name
Case "Tabelle1", "Tabelle2".....
Case Else
ActiveSheet.Delete
End Select
Next
ActiveWorkbook.Save
Application.DisplayAlerts = True
End Sub
Antwort 19 von dr.druff
hey rasta
hat jetzt leider nichts mit deiner frage zu tun :)
das ich mich nicht gemeldet hab(wegen der vba-bücher-sache)tut mir leid,hatte keinen "kontakt" mehr zuraussenwelt :)
falls du das liest und das angebot mit den pdf-büchern noch steht würde ich mich sehr freun wenn du sie mir schickst.
e-mail addi steht
danke schon mal im voraus
gruß dr.druff
hat jetzt leider nichts mit deiner frage zu tun :)
das ich mich nicht gemeldet hab(wegen der vba-bücher-sache)tut mir leid,hatte keinen "kontakt" mehr zuraussenwelt :)
falls du das liest und das angebot mit den pdf-büchern noch steht würde ich mich sehr freun wenn du sie mir schickst.
e-mail addi steht
danke schon mal im voraus
gruß dr.druff

