Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1256to1260
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

Makro bricht nach Excel-Dialogfenster ab

Makro bricht nach Excel-Dialogfenster ab
Selina
schönen guten Tag
Ich habe ein merkwürdiges Problem, bei welchem Ihr mir hoffentlich weiterhelfen könnt.
Und zwar habe ich eine grosse Excel-Arbeitsmappe, die Schreibgeschützt geöffnet- / gespeichert wird.
(die Mappe ist leider zu Gross um sie hier hochzuladen)
Um in dieser Mappe irgendwelche Datensätze mutieren zu können, hab ich hinter einer Schaltfläche folgenden Code (dieser wird noch um eine Password-Abfrage erweitert)
Sub Schreib_Lesestatus_Ändern()
MsgBox "Schreibschutz freigeschaltet !", vbInformation, "SCHREIBSCHUTZ"
ActiveWorkbook.ChangeFileAccess Mode:=xlReadWrite, notify:=True 'Schreibschutz wird aufgehoben
End Sub
Nun mein eigentliches Problem:
Sobald der Schreibschutz auf der Arbeitsmappe entfernt wurde, erscheint ein Dialogfenster von Excel 2010 das folgendes besagt:
Sie haben die Datei "test.xlsm" geändert
Ein anderer Benutzer hat ebenfalls Änderungen vorgenommen. Was möchten Sie jetzt tun ?
Klicken Sie auf "Verwerfen", um Ihre Änderungen zu verwerfen und die letzte Version zu bearbeiten
Klicken Sie auf "Speichern unter", um Ihre Änderungen in einer anderen Datei zu speichern und die letzte Version zu öffnen.
Natürlich hab ich weder die Datei irgendwo vorgängig geöffnet, noch hatte ein anderer User irgendwelche Änderungen vorgenommen
(ich bin alleiniger Besitzer dieser Datei)
Egal welche Schaltfläche ich in diesem Dialogfenster drücke, der Makrocode bricht dann ab.
Aber dieser müsste natürlich nun weitergehen. D.h. es sollten ab dem obenstehenden Code dann weitere Subs augerufen werden
Diese hab ich natürlich in meinem obigem Beispielscode der Einfachheitshalber mal weggelassen.
Woran liegt diese Dialogbox-Meldung ?
Wie kann ich diese Umgehen ?
Die Datei selber starte ich ab meinem Desktop (Windows7)
Herzlichen Dank für die Tips und Hilfe
Der andere Nutzer wird wohl das Makro ...
23.03.2012 01:11:29
Luc:-?
…sein, Selina,
und du bist ja angemeldet, hast die Mappe geöffnet und trägst damit die Verantwortung. ;-)
Viell hilft ja Application.DisplayAlerts = False (später b.Bed. wieder True setzen!) u/o Setzen des Schutzes per Ereignisprozedur Workbook_Open, Workbook_SheetActivate bzw Worksheet_Activate mit 4.Parameter UserInterfaceOnly:=True.
Gruß Luc :-?
AW: Der andere Nutzer wird wohl das Makro ...
23.03.2012 08:07:06
Selina
Hallo Luc
Besten Dank schon mal für Deine Antwort. Aber leider komm ich da nicht so recht draus, was genau Du damit meinst.
Ich meine.... Ich starte ja das Excel-Makro aus einer Arbeitsmappe raus. Die Arbeitsmappe ist mit Schreibschutz versehen. Auf der Mappe gibts nen UserForm mit Button, hinter dem mein obiger Code steht.
die Userform wird gleich bei Workbook-Open geladen.
Nun möchte ich einfach per Mausklick auf diese Schaltfläche bewirken, dass der Schreibschutz der Mappe aufgehoben wird, das Makro selber aber weiterläuft (d.h. die UserForm, welche ich habe soll nicht geschlossen werden)
Geht das irgendwie ?
Muss ich irgendwie meinen Makro-Code für das Aufheben des Schreibschutzes umbauen oder gar neu programmieren ?
Und ...
Wenn ich die Arbeitsmappe mit Makro auf einen anderen Rechner kopier und das Ganze dort laufen lasse, so wird Schreibschutz aufgehoben per Makro (Makro bricht da aber auch ab) und es erscheint KEINE Dialogmeldung
Irgendwie schnall ich das ned so recht :-(
Danke für die Hilfe !
Anzeige
Dein Code/Schnipselleinchen sah nicht nach UF-...
24.03.2012 03:44:44
Luc:-?
…Benutzung aus, Selina;
eine UForm würde auch stehen bleiben, wenn sie nicht geschlossen wird und du könntest dann nichts auf dem Blatt machen, falls das nicht per UF-Modus oder ggf DoEvents anders geregelt ist. Das hat dann aber eigentl auch nichts mit dem Mappenschutz zu tun — allerdings schreibst du Schreibschutz → das ist natürlich etwas Anderes als Mappen- oder Blattschutz und ich weiß nicht, ob die Aufhebung sofort (ohne vorheriges Speichern) wirksam wdn würde. Vielleicht solltest du mal etwas mehr (problemrelevanten) PgmCode zeigen?! Allerdings befürchte ich, dass du das ggf anders meinst als du schreibst…
Gruß + schöWE, Luc :-?
Anzeige
AW: Dein Code/Schnipselleinchen sah nicht nach UF-...
24.03.2012 11:46:52
Selina
Hallo Luc
Danke für Deine Antwort. Bitte entschulidge, dass meine Frage vielleicht etwas wirr formuliert ist. Ich versuche es nochmals, mein Problem besser zu erklären.
Also:
Ich habe eine Excel-Arbeitsmappe mit einigen Tabellenblättern (leider zu Gross, um hier posten zu können)
Beim öffnen der Workbook hab ich eine public Sub, in welcher u.A. folgendes drin steht:
Public Sub Workbook_Open()
ThisWorkbook.ChangeFileAccess xlReadOnly
'verschiedener Code, welcher Daten auf den verschiedenen Tabellenblättern formatiert, sortiert  _
etc...
UserForm1.Show (0)
End Sub
Auf der UserForm1 hab ich dann verschiedene Textfelder drauf, in welche die Daten aus den Tabellenblättern dargestellt- und ausgegeben werden.
Ebenfalls auf dieser UserForm gibts dann eine Schaltfläche "Mutationsmodus"
Sobald einer diese Schaltfläche drückt, wird eine weitere UserForm (PW_Abfrage_Mutation) angezeigt (über die UserForm1) in welcher der User aufgefordert wird, ein Password einzugeben um den Schreibschutz (welcher ja mittels obigem Code beim Öffnen der Arbeitsmappe gesetzt wurde) aufzuheben:
Private Sub CommandButton1_Click()
pw = "Admin_Mutation"
If PW_Abfrage_Mutation.Password_Text = pw Then
PW_Abfrage_Mutation.Hide
Schreib_Lesestatus_Ändern       'es wird ins Programm "Schreib_Lesestatus_Ändern verzweigt
Else: MsgBox "falsches Kennwort !", vbExclamation, "Falsches Kennwort"
PW_Abfrage_Mutation.Password_Text = ""
Exit Sub
End If
End Sub
Wenn das Password richtig eingegeben wurde, so wird nun in folgende Sub gesprungen:
Sub Schreib_Lesestatus_Ändern()
MsgBox "Administrationsbereich freigeschaltet !", vbInformation, "ADMINISTRATION"
ActiveWorkbook.ChangeFileAccess Mode:=xlReadWrite, notify:=True 'Schreibschutz wird aufgehoben
End Sub
Mein Problem ist jetzt:
Der Schreibschutz wird nun über die ganze Arbeitsmappe aufgehoben, und ich kann nun Daten in die Excel-Tabellenblätter einfügen.
Aber ... es ist keine UserForm mehr ersichtlich. D.h. die UserForms werden geschlossen.
Ich möchte aber eigentlich eine UserForm offen behalten in welche der User Daten eintippt, welche dann in die Excel-Tabellenblätter (in verschiedene) geschrieben werden.
Wie also kann ich bewerkstelligen, dass nach Ändern des Lese-/Schreibschutzes (oder wie wir dem nun sagen wollen) Eine UserForm (Mutationsmaske) angezeigt bleibt ?
Eigentlich funktioniert bis dahin alles prima. Ausser eben ... dass ich die Daten nicht direkt ins Excel reinschreiben will, sondern über eine UserForm (Namens: Mutationsmaske)
Besten Dank für jegliche Hilfe ! Ich hoffe, meine Frage komme so nun verständlich daher.
Anzeige
Ja, besser, aber deine UF-Regie ist noch ...
24.03.2012 16:24:32
Luc:-?
…nicht ganz klar, Selina;
was ist bspw PW_Abfrage_Mutation? Sieht nach anderer UF aus, denn du verwendest den Hide-Befehl, der sie verbirgt. Welche UF soll denn dann nun offen bleiben? Wurde die überhaupt schon gestartet? Das ist unklar! Und, wenn du schon einer UF (falls die o.g. eine ist) einen eigenen Namen gibst, warum dann nicht allen (UserForm1 ist Standardname!), damit man gleich weiß, worum es geht? Etwas verwirrend. Schreib doch mal auf, welche UF erhalten bleiben soll und wann/wie die gestartet wird! Oder ist das die UF1? Viell gerät die bloß in den Hintergrund, denn du hast nicht erwähnt, wann bzw wodurch die geschlossen wird.
Gruß + schöSo, Luc :-?
Anzeige
AW: Ja, besser, aber deine UF-Regie ist noch ...
24.03.2012 16:59:41
Selina
Hallo
Ok, zugegeben, meine UserForms haben vielleicht nicht alle ganz selbstsprechende Namen.
Aber das kommt bei mir halt davon, dass ich mein Makro-Code über eine lange Zeit immer wieder erweiterte und immer wieder was hinzugefügt habe.
Also..
Die allererste UserForm ist die UserForm1. Diese wird ja bereits in der Workbook-Open - Anweisung geöffnet.
Ab dieser UserForm gibt es eine Schaltfläche welche dann die UserForm mit dem Namen _ PW_Abfrage_Mutation öffnet. Wenn man auf dieser UserForm das Password korrekt eingibt und bestätigt, so wird dann diese PW_Abfrage_Mutation wieder per Hide geschlossen. Das Makro startet nun eine weitere

Sub mit dem Namen Schreib_Lesestatus_Ändern. (wohlverstanden: die allererste gestartete  _
UserForm1 ist immer noch im Vordergrund offen !)
in dieser Schreib_Lesestatus_Ändern 

Sub drin steht folgender Code:

Sub 

Sub Schreib_Lesestatus_Ändern()
MsgBox "Administrationsbereich freigeschaltet !", vbInformation, "ADMINISTRATION"
ActiveWorkbook.ChangeFileAccess Mode:=xlReadWrite, notify:=True 'Schreibschutz wird aufgehoben
End Sub
()
MsgBox "Administrationsbereich freigeschaltet !", vbInformation, "ADMINISTRATION"
ActiveWorkbook.ChangeFileAccess Mode:=xlReadWrite, notify:=True 'Schreibschutz wird aufgehoben
End Sub
Dieser Code wird korrekt abgearbeitet und der Schreibschutz auch korrekt aufgehoben. Aber ... obwohl ich nirgends einen UserForm1.Hide - Befehl starte, wird die allererste gestartete UserForm genau hier nun geschlossen. Warum ?
Ziel soll es sein:
Die UserForm1 bleibt voerst immer noch geöffnet.
Es soll nun die

Sub Schreib_Lesestatus_Ändern komplett durchlaufen werden. Diese 

Sub will ich noch um eine Zeile ergänzen, welche mir eine noch zu bauende UserForm (mit Namen  _
Mutationsmaske) öffnet.
Erst wenn diese Mutationsmaske geöffnet ist, soll die UserForm1 geschlossen werden.
Ist es nun irgendwie verständlich ? - und ... weisst Du nun wo ich meine Fehler begraben habe ?
Besten Dank für die Unterstützung

Anzeige
AW: Ja, besser, aber deine UF-Regie ist noch ...
24.03.2012 18:31:17
Selina
Jetzt hab ichs !
Und zwar lag die Lösung darin, statt über ActiveWorkbook.ChangeFileAccess Mode:=xlReadWrite den Schreibschutz zu setzen, hab ichs nun mit dem folgenden Code gemacht:
in der Variable Passwort hab ich vorgängig ein Password zugewiesen
For Each Ws In ThisWorkbook.Worksheets
Ws.Protect Passwort
Next Ws
Und so kann ich dann auch über die UserForm mit der Password-Abfrage das WS.Protect wieder aufheben, ohne dass das Makro gleich abbricht:
Sub Schreib_Lesestatus_Ändern()
Dim Ws As Worksheet
Dim Passwort As Variant, B As Boolean
For Each Ws In ThisWorkbook.Worksheets
Ws.Unprotect Passwort
Next Ws
UserForm1.Hide 'Die Haupt-UserForm wird jetzt ausgeblendet
UserForm2.Show
End Sub

Anzeige
Na, siehste! War's das dann? Gruß owT
24.03.2012 19:45:47
Luc:-?
:-?
AW: Na, siehste! War's das dann? Gruß owT
24.03.2012 20:18:27
Pascal
Ja, ich habe dank Euren Hinweisen schliesslich das Problem selber lösen können. Und ... habe mal wieder ordentlich was dazugelernt.
Herzlichen Dank
Wie? Was? Eure? Wer ist Pascal? owT
25.03.2012 01:38:15
Luc:-?
:-?

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige