Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1172to1176
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
Inhaltsverzeichnis

ActveWorkbook.Save

ActveWorkbook.Save
Peter
Hallo!
Wenn ich eine Arbeitsmappe über den normalen Weg (Speichern-Icon im Menü oben) speichere, dann wird auf ein Event zugegriffen im Modul "Diese Arbeistmappe". Dort wird u.a. auf ein Sub zugegriffen, das mir den Schutz der Arbeitmappe und des Tabellenblattes aufhebt, eine Zelle in dem nun ungeschützten Tabellenblatt neu schreibt und danach wird über ein weiteres Sub der Schutz wieder getätigt. Das sieht dann angerissen etwa so aus:
"DieseArbeitsmappe"

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Call Sub SchutzAufheben(Worksheets("Tabelle1"))
Worksheets("Tabelle1").Range("A1").Value = "Hallo"
Call Sub Schutz(Worksheets("Tabelle1"))
End Sub

Die beiden Sub im Modul1 sehen etwa so aus:
Sub SchutzAufheben (ByVal TabBlatt as Worksheet)
ThisWorkbook.Unprotect Password:=Passwort
TabBlatt.Unprotect Password:=Passwort
...
End Sub
Sub Schutz ist quasi ähnlich.
So. Nun habe ich aber einen Knopf auf das Tabellenblatt gelegt, der mit diesem Sub im Modul1 verbunden ist:
Sub KnopfSpeichern()
ActiveWorkbook.Save
End Sub Jetzt bin ich davon ausgegangen, dass dadurch die Prozedur Workbook_BeforeSave von oben abläuft. Tut sie auch. Nur bekomme ich eine Fehlermeldung, wenn etwas in die Zelle eingetragen werden soll.....ich vergaß: die Zelle ist schreibgeschützt. Grund ist, dass das Blatt und die Mappe noch geschützt ist!!!!
Wie kann das sein, trotzdem der gleiche Weg gegangen wird?
P
AW: ActveWorkbook.Save
20.08.2010 14:56:29
Oli
Hi,
verwende statt RANGE("A1"), CELLS(1, "A"), dann geht es.
Grüße
Oli
AW: ActveWorkbook.Save
20.08.2010 15:05:03
Peter
Nein.
Das ändert ja nichts an dem Blattschutz, daher kann ich da auch nichts über den "Cells-Weg" einfügen.
Der Fehler betrifft den Blattschutz, das Blatt bleibt trotz der gleichen Prozedur geschützt!!!!
AW: ActveWorkbook.Save
20.08.2010 15:14:54
Oli
Hi Peter,
das bedeutet, dass der Blattschutz nicht deaktiviert wird. Du kannst das wie folgt checken:
Klicke vor Zeile in Deinem Makro wo der Blattschutz gesetzt wird (Die Zeile wird rot markiert und ein roter Kreis erscheint vor der Zeile im Code). Jetzt ist ein sog. Haltepunkt gesetzt.
1. Lasse das Makro laufen, es bleibt am Haltepunkt stehen.
2. Drücke F8 (Einzelschritt). Jetzt sollte Dein Makro den Blattschutz aufheben.
3. Wechsle ins Tabellenblatt und überprüfe, ob die Zelle ungeschützt ist.
4. Falls der Schutz noch aktiv ist, ist wahrscheinlich das Passwort falsch geschrieben.
5. Makro mit Stopp-Taste abbrechen.
Grüße
Oli
Anzeige
AW: ActveWorkbook.Save
20.08.2010 16:01:20
Peter
Äh...ja. Das ist alles klar. Daher weiß ich ja, dass alles so ist wie es ist, also, dass eben der Blattschutz noch existiert. Das Passwort ist zentral definiert und eben immer das gleiche.
AW: ActveWorkbook.Save
20.08.2010 22:12:15
fcs
Hallo Peter,
es gibt irgendwie ein Problem (oder wurde bewusst so von den MS-Programmierern so gewollt, nur kann ich es zumindest nicht nachvollzien) bei der Verarbeitung der aufeinander folgenden Ereignisprozeduren.
Warum die SchutzAufheben abgearbeitet wird ohne Fehlermeldung, aber auch ohne den Schutz aufzuheben?
Mit folgenden Anpassungen kriegst du es in deinem Fall in den Griff:
1. Lagere alle Anweisungen in BeforeSave in eine eigene Public Sub in einem allgemeinen Modul aus.
2.Füge in BeforeSave die Call-Anweisung für die Prozedur ein.
3. in der KnopfSpeichern-Prozedur muss du die Ereignismakros deaktivieren und ebenfalls die BeforeSave-Prozedur einfügen, danach die Speichern-Anweisung, und die Reaktivierung der Ereignismakros.
Schaut dann etwa wie folgt aus. Damit sollte siích das Umschreiben deiner Prozeduren in Grenzen halten.
Gruß
Franz
Unter DieseArbeitsmappe:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Call BeforeSaveProcedure
End Sub
In einem allgemeinen Modul:
Public Const sPW As String = "test"
Public Sub SchutzAufheben(oSheet As Object)
ThisWorkbook.Unprotect sPW
oSheet.Unprotect sPW
End Sub
Public Sub Schutz(oSheet As Object)
oSheet.Protect sPW
ThisWorkbook.Protect sPW
End Sub
Public Sub BeforeSaveProcedure()
Call SchutzAufheben(Worksheets("Tabelle1"))
Worksheets("Tabelle1").Range("A1").Value = "Hallo " & Date & "  " & Time
Call Schutz(Worksheets("Tabelle1"))
End Sub
Sub KnopfSpeichern()
Application.EnableEvents = False
Call BeforeSaveProcedure
ThisWorkbook.Save
Application.EnableEvents = True
End Sub

Anzeige
AW: ActveWorkbook.Save
21.08.2010 13:35:36
Peter
Hi Franz!
Besten Dank! Kann das erst am Montag nachprüfen, ob das so passt. Wenn nicht, melde ich mich nochmal!
Ich kann mich ganz dunkel erinnern, vor einiger Zeit eine solche Sache schon mal gehabt zu haben.
Mal ehrlich, das ist schon ganz schön merkwürdig, wenn die MS-Programmierer das so beabsichtigt haben?!
P
Diese Verfahrensweise ist abzulehnen,...
20.08.2010 16:47:31
Luc:-?
…Oli,
da sie nicht den VBA-Konventionen entspricht! Beide Parameter von Cells haben numerisch zu sein! Will man es anders, muss man eben Range mit alfanumerischem Textparameter benutzen! Dass Cells auch in dieser Form fktt, ist der Autoumwandlung zu verdanken. Führt aber bei massenhafter Anwendung nicht nur zur Performance-Verschlechterung, sondern kann auch Fehler provozieren. Auf jeden Fall ist das ganz schlechter Pgmierstil!
Gruß Luc :-?
Anzeige
Warum willst du den Schutz überhpt...
20.08.2010 16:53:35
Luc:-?
…aufheben, Peter?
Das ist doch gar nicht nötig, wenn du das Passwort per VBA setzt und dabei auch noch den Parameter UserInterfaceOnly:=True angibst! Damit wird der Zugriff von Pgmm auf die Mappe erlaubt.
Das kam heute oder gestern schon mal. Viell solltest du hier einfach mal 'n bisschen mehr lesen als nur die Antworten auf deine Fragen… ;->
Gruß+schöWE, Luc :-?
AW: Warum willst du den Schutz überhpt...
20.08.2010 17:29:34
Peter
...dann hätte ich den ganzen Tag nichts anderes zu tun, als auf jede einzelne Nachricht zu schauen, die hier ins Forum kommt...also, das geht bei besten Willen nicht.
Könntest du mir etwas mehr Erklärung um diesen Hinweis mit dem UserInterfaceOnly geben?
Die Arbeitsmappe und das Tabellenblatt sind zunächst "normal" geschützt. UserFaceOnly kenne ich nicht.
Dank für den Hinweis!
Ach so.... Meine Frage an sich ist immer noch nicht beantwortet. Denn im Grunde müsste es auf meinem Weg auch funktionieren. Das ist mir unverständlich.
Anzeige
Sieh mal in der VBEditor-Hilfe unter...
20.08.2010 18:25:47
Luc:-?
Protect nach, Peter!
Übrigens, wir Helfer müssen das ja auch machen, sonst gäbe es ja keine Antworten! Außerdem sehen wir das Forum eigentl auch als eine Art Weiterbildung bzw „Hilfe zur Selbsthilfe“ an und eher nicht als preiswerte Bezugsquelle von Fertiglösungen, obwohl das für manch Einen der HptBesuchsgrund sein mag. Die Fertiglösungen kann's, aber muss es nicht geben… :->
Die Lösung deines urprgl Problems interessiert mich kaum, da ich so nicht vorgehen würde!
Gruß, Luc :-?
AW: Sieh mal in der VBEditor-Hilfe unter...
20.08.2010 20:41:51
Peter
Ich will hier keine Grundsatzduskussion vom Stapel lassen und ich entferne mich hier auch davon, das letzte Wort haben zu müssen....aber mich nervt es!!!
Ich bin Gelegenheitsprogrammierer, seit Jahren., meine aber trotzdem, gewisse Fähigkeiten zu besitzen. Allerdings sind meine Lösungen sicherlich nie perfekt oder gar die kürzesten. Wären sie es, bräuchte ich mich nie in einem solchen Forum zu melden.
Und ich bin mir nach deinen Aussagen auch nicht sicher, was du hier treibst. Mir kommt es so vor, als ob du sowas wie nen Schwanzlängenvergleich durchziehst...man entschuldige mir hier die Fäkalsprache. Schön, dass dich die Wege der anderen nicht interessieren. Aber das ist der Grund, wieso sich manche, womöglich die allermeisten hier melden: Sie kommen mit ihrem Weg nicht weiter!
Meinst du nicht, dass ich vorher diese VBA-Hilfe durchstöbert habe? Meinst du nicht, dass ich vorher das Forum durchsucht habe?
Es ist definitiv nicht möglich - meiner Meinung nach - hier eine Fertiglösung abzugreifen, weil jedes Projekt ein anderes ist und entsprechend abgestimmt ist. Oder meinst du, dass ich irgendwas in Zelle A1 schreibe? Oder denkst du, dass mein Quellcode nur 8 Zeilen umfasst?
Mich nerven solche Aussagen nur noch.....
Und, wenn ich deine Aussagen richtig verstehe, hängst du den ganzen Tag vor solchen Foren und versuchst "besser zu sein". Gut, jedem das seine. Eine wirkliche Hilfe bzw. ein toller Helfer bist du jedenfalls nicht.
Danke dennoch für den Hinweis! Vielleicht schreibe ich ja doch 200 Zeilen Quellcode um....
Und viel Spaß beim Antworten ;-)
Und, wenn noch jemand anderes eine Idee hat, wäre ich sehr dankbar!!
Anzeige
An deiner Antwort sieht man. dass du genau...
20.08.2010 22:28:09
Luc:-?
…das bist, was du schreibst, ein gelegentlicher Ignorant, der selbst J-Walk für einen …gleichen halten würde, nur, weil er ihn nicht kennt…!
Du hast eine hilfreiche Antwort bekommen! Warum soll ich mich dann noch mit der schlechteren Variante befassen, nur, weil du das gerne hättest?!
Luc :-?

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige