Supportnet Computer
Planet of Tech

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:

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.


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

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

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

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

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

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

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

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


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.


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

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


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


Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: