Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
24.04.2024 17:19:09
Anzeige
Archiv - Navigation
1448to1452
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

Makros über "DieseArbeitsmappe" aktivieren

Makros über "DieseArbeitsmappe" aktivieren
22.09.2015 15:30:48
r2d2
Hallo,
leider bin ich immer noch nicht weiter, meine Datei vor dem Öffnen mit Shift zu schützen.
Beim öffnen mit der Shift-Taste wird der Code, der sich unter "DieseArbeitsmappe" befindet unterdrückt. Der andere Code, der sich in Modulen befindet, kann aber ausgeführt werden.
Nun möchte ich, daß wenn jemand die Datei mit Shift öffnet, gar kein Code mehr geht.
Kann man irdendwie den ganzen Code nur dann "freischalten", wenn über einen "speziellen Code" in "DieseArbeitsmappe" der restliche Code sozusagen "freigeschaltet" wird und wenn man mit der Shift-Taste die Datei öffnet geht gar kein Makro ?
Danke
Gruß
r2d2

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makros über "DieseArbeitsmappe" aktivieren
22.09.2015 15:47:33
Daniel
Hi
wenn jemand die Datei mit SHIFT öffnet oder die Makros deaktiviert, dann sollten generell keine Makros laufen.
wenn du verhindern willst, dass jemand mit der Datei arbeiten kann ohne die Makros zu aktivieren, dann kannst du so vorgehen:
1. im BeforeSave-Event alle Sheets bis auf ein Begrüssungsblatt auf .Visible = xlsheetveryhidden setzten.
merke dir aber das aktive Blatt.
2. im AfterSave-Event machst du alle Blätter wieder sichtbar und aktivierst das gemerkte Blatt. Setze Thisworkbook.Saved = True
3. im WorkbookOpen-Event machst du das gleiche wie im AfterSave-Event, dh alle Blätter einblenden.
dadurch werden beim Speichern mit aktiven Makros die Blätter ausgeblendet.
wenn jetzt der Anwender die Datei öffnet ohne die Makros zu aktivieren, dann bekommt er nur das Begrüssugnsblatt zu sehen, dh er kann ohne aktivierte Makros nichts mit der Datei anfangen.
allerdings schützt auch dieser Code nur vor neugieriegen, aber ansonsten unkundigen, aber niemals vor wissenden mit böser Absicht. Ein solcher Schutz ist in Excel mit Bordmitteln nicht möglich.
Gruß Daniel

Anzeige
öffnen mit SHIFT ...
22.09.2015 16:01:17
Rudi
Hallo,
... deaktiviert nur Workbook_open und Auto_open und aktiviert gleichzeitig den Entwurfsmodus.
Deaktiviert man den Entwurfsmodus, läuft wieder alles.
Gruß
Rudi

AW: Makros über "DieseArbeitsmappe" aktivieren
23.09.2015 08:15:26
r2d2
Hallo,
erstmal danke für die Tips.
Daniel, du schreibst: "wenn jemand die Datei mit SHIFT öffnet oder die Makros deaktiviert, dann sollten generell keine Makros laufen."
Also wenn ich hier eine Datei mit Makros mit Shift öffne, dann wird zwar der Code in "DieseArbeitsmappe" nicht ausgeführt, aber alle anderen in Modulen verarbeiteten Makros laufen.
Wie kann das sein?
Gruß
r2d2

Anzeige
AW: Makros über "DieseArbeitsmappe" aktivieren
22.09.2015 15:53:37
Rudi
Hallo,
geht bedingt.
in dieseArbeitsmappe
Private Sub Workbook_BeforeClose(Cancel As Boolean)
CheckNameExists
With Names("Makro")
.Value = 0
.Visible = False
End With
End Sub
Private Sub Workbook_Open()
CheckNameExists
With Names("Makro")
.Value = 1
.Visible = False
End With
End Sub
Sub CheckNameExists()
Dim n As Name
On Error Resume Next
Set n = Names("Makro")
On Error GoTo 0
If n Is Nothing Then
Set n = Me.Names.Add("Makro", 1)
End If
End Sub

in einem Modul z.B.
Sub makro1()
If [Makro] = 1 Then
MsgBox "makro1"
End If
End Sub
Gruß
Rudi

Anzeige
AW: Makros über "DieseArbeitsmappe" aktivieren
23.09.2015 08:24:34
r2d2
Hallo,
kann ich den nicht irgendwi am Anfang eine "startprozedur" definieren, wo z.B. der Variablen "MAKRO" ein Wert zugewiesen wird (z.B. 1) und dann bei den einzelnen Makros abgefragt wird, ob die Variable war oder falsch ist, also z.B.:
sub TEST()
If MAKRO 1 Then exit sub
und dann kommt das eigentliche Makro.
Also wenn MAKRO nicht am Anfang auf 1 gesetzt wird, dann wird das Makro nicht ausgeführt.
Danke.
Gruß
r2d2

genau das ....
23.09.2015 09:44:39
Rudi
.... mach mein Vorschlag.
Nur dass ich den Wert in einen versteckten Namen schreibe.
Gruß
Rudi

AW: genau das ....
23.09.2015 10:40:30
r2d2
Aber wozu benötige ich dann das beforeclolse und das checknameexixt event?
Geht das nich auch "nur" über ein workbook_open event?
Danke.
Gruß
r2d2

Anzeige
AW: genau das ....
23.09.2015 10:55:38
Rudi
BeforeClose: damit der Wert auf 0 gesetzt wird.
CheckNameExists: damit sicher gestellt ist, dass der Name existiert.
Du kannst es aber auch nur mit Workbook_open machen und eine globale Variable setzen.
Dann musst du aber auch in alle Prozeduren eine Fehlerbehandlung einbauen, denn wenn ein Fehler auftritt, verlieren alle globalen Variablen ihren Wert und du musst neu starten.
Gruß
Rudi

AW: genau das ....
23.09.2015 11:06:27
r2d2
Hmm... ich hab's jetzt so gelöst:
Private Sub workbook_open()
Sheets("start").Range("B14") = 1
End Sub

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Sheets("start").Range("B14") = 2
End Sub

Private Sub Workbook_afterSave(ByVal Success As Boolean)
Sheets("start").Range("B14") = 1
End Sub
Nun muß ich nur noch in jedem Makro die Abfrage nach dem Zellwert einbauen und wenn der Wert 2 ist wird das Makro sofort abgebrochen. Allerdings muß der User dann nur einmal zwischenspeichern und der Wert währe wieder auf 1 und somit würden dann die Makros wieder gehen - dumm.... hach wie mach ichs nur?
Oder was meinst du?
Danke.
Gruß
r2d2

Anzeige
warum fragst du,...
23.09.2015 12:33:10
Rudi
... wenn du doch nicht machst, was man dir sagt.

AW: warum fragst du,...
23.09.2015 12:42:45
r2d2
Ok, ich versuch mal deinen Code einzubauen (obwohl der mir noch nicht so ganz klar ist...)

AW: warum fragst du,...
23.09.2015 12:49:12
r2d2
Was bewirkt das hier:
Sub CheckNameExists()
Dim n As Name
On Error Resume Next
Set n = Names("VARIABLE")
On Error GoTo 0
If n Is Nothing Then
Set n = Me.Names.Add("VARIABLE", 1)
End If
End Sub

AW: warum fragst du,...
23.09.2015 12:56:26
r2d2
Leider funktioniert dein Code doch nicht:
Wenn man auf das Abbrechen kreutzchen drückt und die Meldung kommt ob man speichern will, dann wird der Wert, wenn man abbricht, auf 0 gesetzt - und somit würden danach die Makros alle nicht mehr laufen, was sie aber in dem fall doch sollen...
?
Danke.
Gruß
r2d2
Anzeige

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige