Workbook_open nach Ablauf speichern und sperren
#1
Hallo Community!

Ich habe ein Tool welches mir die Datensätze als Excel-Datei exportiert. Um diese zu strukturieren und zu ordnen werden beim Öffnen der Datei durch das Event "Workbook_Open" einige Prozeduren durchlaufen.
Ich möchte hierbei nun, dass nach der letzten Prozedur die Datei gespeichert wird und das Workbook_Open-Event nicht mehr stattfinden. Ich möchte nur nicht, dass das Workbook_Open gelöscht wird.

Kann mir hierzu etwas empfehlen?


Code:
Sub Workbook_Open()

  XXX
  YYY
  ZZZ
    
End Sub
Beste Grüße
Top
#2
Hallo,

was willst du machen? Deine Beschreibung ist nicht verständlich - was heißt das, dass das Open-Event nicht mehr stattfinden soll? Erkläre deine gewollten Schritte doch bitte genauer!
[Bild: attachment-190.gif]
Gruß Günter
aus der Helden-, Messe-, Musik-, Buch-, Universitäts- und Autostadt Leipzig
Top
#3
Es soll beim erstmaligen Öffnen der Datei nur das "Workbook_Open" durchlaufen.
Nach dem Durchlaufen soll die Datei gespeichert werden und das Workbook_Open beim nächsten Öffnen nicht mehr gestartet werden.
Top
#4
Hallo,

Zitat:Nach dem Durchlaufen soll die Datei gespeichert werden und das Workbook_Open beim nächsten Öffnen nicht mehr gestartet werden.

den Sinn oder Unsinn habe ich nicht richtig verstanden, aber wenn es denn so ist,
daß ein im Workbook_Open Ereignis tatsächlich nur einmal ausgeführt werden soll,
dann könnte man den Code nach einmaligem Durchlauf per Variable abschalten.

Ich muß nicht begreifen, was für einen Sinn das machen soll, oder??? :16:
Top
#5
Hallo,

also mir geht es wie dem Käpt'n.

Wenn es denn sein soll, dann baue in dein einmaliges Workbook_Open-Event folgendes ein:

1. Nach dem Durchlauf schreibst du einen Merkwert in eine versteckte Zelle deiner Datei (formatieren benutzerdefiniert mit ;;; ).

2. Vor das End Sub kommen folgende Befehle
     Application.DisplayAlerts = False    
     Thisworkbook.Save

3. Als 2. Zeile des Workbook_Open-Events erfolgt die Abfrage des Merkwertes:
    If Range("deine Merkzelle") = 1 then Exit Sub
    wobei die Merkzelle vorher den Wert 0 zum Durchlaufen der Routine hatte

Viel Erfolg!
[Bild: attachment-190.gif]
Gruß Günter
aus der Helden-, Messe-, Musik-, Buch-, Universitäts- und Autostadt Leipzig
Top
#6
Hallo Günter,

vor lauter Nichtverstehen habe ich doch glatt vorausgesetzt, daß im  Code

Sub Workbook_Open()
  XXX
  YYY
  ZZZ   
End Sub

die Speicherroutine bereits enthalten ist.  :05:

Die Zeile mit den drei "Z" bietet sich doch dafür an
Top
#7
Hallo, danke für eure Beiträge.


Nein, Käptn Blaubär, Du musst es nicht verstehen, aber ich beschreibe es Dir gerne ausführlicher.



Ich erhalte Datensätze in einem Excel-Dokument. Diese müssen jedoch sortiert, strukturiert, geordnet, nummeriert werden. Zusätzlich müssen einige Berechnungen erfolgen. 
Dies ist alles initial. Am Ende erhalte ich einen Report, welchen ich als PDF-Datei exportiere. 

Diese Datei mit all den Prozeduren gilt es Vorlage/ Template. D.h. der Anwender erhält durch ein Tool seine Datensätze in dieses Dokument. Wenn er dies öffnet, so passiert das oben beschriebene.
Dies sollte jedoch nicht zweimal passieren, da sonst der ganze Report nicht mehr stimmt.


Ich dachte es gibt vielleicht eine elegantere Lösung, um als letzte Prozedur die Datei zu speichern und das Workbook zu resetten. 


Danke
Top
#8
Hallo,

Zitat:Ich dachte es gibt vielleicht eine elegantere Lösung, um als letzte Prozedur die Datei zu speichern und das Workbook zu resetten. 

tja, die könnte es mit einiger Sicherheit in der Tat geben.
Das ist aber, zumindest was mich angeht, eine WENN ... DANN-Bedingung.

WENN Du mir nämlich zeigst, was Du haben willst und schon hast ... bevorzugt wird eine Datei,
damit man auch was zum Testen hat ... keine noch so schönen Bildchen, die geben zum Helfen nichts her,
DANN schau ich mal, was mir dazu einfällt.
Ich bin mir sicher, auch für den einen oder anderen der potentiellen Helfer hier ebenfalls sprechen/schreiben zu dürfen.

Schau'n wir mal, dann seh'n wir schon
Top
#9
So,

ich bin nun einen Schritt weiter.

Mit folgedenem Code wird eine Zeile in das Workbook eingefügt:

PHP-Code:
   For i 1 To 26
    ThisWorkbook
.VBProject.VBComponents("DieseArbeitsmappe").CodeModule.InsertLines i"'"
 
   Next 
Leider wird nur eine Zeile eingefügt und nicht an den Zeilenanfang ein "'" gesetzt.
Mit Deletelines kann ich das komplette Workbook_open löschen, würde es jedoch gerne temporär lagern
Top
#10
Hi,

wenn das eine Vorlage ist, können doch beim Abspeichern der Datei dann einfach alle Makros entfernt werden durch abspeichern als xlsx.
Das ändert doch nichts an der Vorlage.


Beachte: Vorlage hat als Dateiextension: *.xltm
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 2 Gast/Gäste