Makro-Sicherheit: Hinweistext anbringen

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
Bild

Betrifft: Makro-Sicherheit: Hinweistext anbringen
von: schoentalegg
Geschrieben am: 09.03.2005 17:14:07
Hallo
Ich erstelle Excel-Vorlagen für verschiedene externe User. Diese Vorlagen haben Ereignisprozeduren/Userforms welche beim öffnen der Datei starten müssen. Wenn jemand die Makro-Sicherheit auf hoch gestellt hat, dann funktionieren diese Ereignisprozeduren nicht. Excel gibt dem User auch keinen Hinweis, dass etwas nicht läuft.
Wie kann ich nun einen Hinweis anbringen für solche User, damit diese die Excel-Sicherheit mindestens auf mittel zurückstellen?. Dieser Hinweis sollte logischerweise bei Usern, welche die Makrosicherheit nicht auf hoch haben, auch nicht angezeigt werden.
Schwierigkeit: Der Hinweis muss immer angezeigt werden, wenn jemand die Datei öffnet und die Makros nicht laufen. Also auch dann, wenn die Datei mit Speichern unter bearbeitet wurde, und dann jemand anders weitergegeben wird.
Ich habe es versucht mit einem speziellen Tabellenblatt das sie Hinweise und Erklärungen trägt. Dieses ist standardmässig eingeblendet ist (alle anderen versteckt). Dieses Hinweis-Blatt wird durch eine Ereignisprozedur "..._open" weggezappt, bzw. bleibt eben nur dann stehen, wenn die Makros nicht laufen.
Das wäre ja auch gut so. Aber nun folgt der Pferdefuss mit dem Schliessen des Dikumentes. ich muss Speichern und Speichern unter abfangen und vor dem speichern das Hinweisblatt wieder hervorholen und danach wieder wegzappen, damit man normal weiterarbeiten kann. Dies habe ich versucht über ..-_beforeSave zulösen.
Das ist aber enorm komplex und gibt nur Fehler und verursacht gar Excel-Abstürze.
Gibt es eine einfache Idee?
Weiter unten ist ein ähnliche Anfrage (am 07.03.2005 Makro-Sicherheit), ich kann aber mein Problem darmit nicht lösen. Ich will auch gar nicht von aussen in die Makrosicherheit eingreifen (falls das ginge), weil ich dies auch für einen sinvollen Schutz halte.
Danke zum vorauss - viele Grüsse
Schoentalegg

Bild

Betrifft: AW: Makro-Sicherheit: Hinweistext anbringen
von: Hajo_Zi
Geschrieben am: 09.03.2005 17:17:42
Hallo Schoentalegg,
schaue mal auf meine Homepage da gibt es einige Beispiele auf der Seite VBA.
Beispieldatei

Falls Code vorhanden wurde dieser getestet unter Betriebssystem XP Home und Excel Version XP 2003 SP1.
Bitte keine Mail, Probleme sollten im Forum gelöst werden.
Microsoft MVP für Excel
Das Forum lebt auch von den Rückmeldungen.
Betriebssystem XP Pro SP2 und Excel Version 2003 SP1.



"Wer Rechtschreibfehler findet, darf sie behalten!"
Bild

Betrifft: AW: Makro-Sicherheit: Hinweistext anbringen
von: schoentalegg
Geschrieben am: 09.03.2005 18:31:57
Hallo Hajo
Danke für die rasche Antwort und die gute Lösung. Ungefähr entspricht es meinem Lösungsweg. Dein Code ist schlanker und du fängst mit der Variabel "ByS" ab, dass nicht eine Subprozedur sich selber auslöst. Ich habe das versucht mit "Application.EnableEvents = False" zu lösen, was aber Probleme verursacht hat.
Einziger Wermutstropfen: Ich kann nur nach Beenden der Bearbeitung abspeichern und "Speichern unter.." geht nicht. Beides müsste aber möglich sein, da ich die Dateien ja an fremde Personen schicken werde.
Wenn ich den Teil, mit dem Verstecken der Blätter in die .._beforeSave kopiere (anstelle der Meldung "nicht möglich"), dann speichert er zwar richtig ab (mit dem Hinweis-Tabellenblatt im Vordergrund). Will ich nun wiederherstellen für die Weiterarbeit (also Hinweis weg andere Blätter hervorholen), müsste ich die ganze Speicherei selber übernehmen (inkl. Speichern unter), dann die Blätter wieder umstellen und schliesslich Workbook.Saved auf true setzen.
Genau das hatte ich versucht und bin gescheitert. Ich habe dann Abstürze erhalten, wenn jemand das Sheet verlassen will ohne zu speichern.
Viele Grüsse
schoentalegg
Bild

Betrifft: AW: Makro-Sicherheit: Hinweistext anbringen
von: Hajo_Zi
Geschrieben am: 09.03.2005 18:44:52
Hallo Schoentalegg,
das habe ich mit Überlegung gemacht. Jemand öffnet die Mappe und aktiviert die Makros. Speichert Sie und schon braucht er beim nächsten mal nicht mehr die Makros aktivieren.
Baue Dir für das Speichern einen Button ein. Dann dürfte das Problem gelöst sein.
Gruß Hajo
Bild

Betrifft: AW: Makro-Sicherheit: Hinweistext anbringen
von: schoentalegg
Geschrieben am: 09.03.2005 18:52:15
Hallo Hajo
Dank für Deine Antwort. Das stimmt, wenn die Makros aktiviert sind, dann taucht das problem nicht mehr auf, ausser das Tool wird einer anderen Persone weitergegeben. Es ist ein Preisberechnungstool für bestimmte Kunden, dann ist das schon denkbar.
Aber die Idee mit dem Speichern-Button ist tatsächlich eine Überlegung wert. Aber dann hange ich ja auch wieder in der Ereignisprozedur _beforSave, welche micht darauf hinweist, dass ich nur beim Beenden speichern kann..
Viele Grüsse
schoentalegg
Bild

Betrifft: AW: Makro-Sicherheit: Hinweistext anbringen
von: Hajo_Zi
Geschrieben am: 09.03.2005 18:58:05
Hallo Schoentalegg,
Bei VBA Gut sollte das kein Problem sein.
Erste Aktion beim CommandButton
ByS = True
letzte Aktion
ByS = False
Gruß Hajo
Bild

Betrifft: AW: Makro-Sicherheit: Hinweistext anbringen
von: schoentalegg
Geschrieben am: 09.03.2005 23:05:37

Hallo Hajo
Ja logisch stimmt - die Variable Bys. Das ist sehr clever.
Herzlichen Dank für Deine Bemühungen. Du hast vielleicht gesehen, dass ich 2 Antworten erhalten habe. Beide gehen in die ähnliche Richtung die ich schon erfolglos probiert habe. Aber Matthias hat nun einen Code geschrieben, der alle meine Anforderungen erfüllt und - im Gegensatz zu meinem hilflosen Versuch - auch wirklich funktioniert.
Trotzdem habe ich aus deinem Code einiges lernen können. Und vor allem habe ich Deine Homepage kennen gelernt - ein echter Tip!
Vielen herzlichen Dank.
Grüsse
Schoentalegg
Bild

Betrifft: AW: Makro-Sicherheit: Hinweistext anbringen
von: Hajo_Zi
Geschrieben am: 10.03.2005 05:59:24
Hallo Schoentalegg,
Danke für die Rückmeldung und wenn es Dich irgendwie weiter gebracht hat ist doch ein Ziel des Forums errreicht.
Gruß Hajo
Bild

Betrifft: AW: Makro-Sicherheit: Hinweistext anbringen
von: Matthias G
Geschrieben am: 09.03.2005 18:00:11
Hallo Schoentalegg,
ist das eine Lösung für dich?
Das Blatt mit dem Hinweistext muss das letzte der Mappe sein!
In "DieseArbeitsmappe":
Option Explicit
Private Sub ZeigeHinweis()
Dim i As Integer
Sheets(Sheets.Count).Visible = True
For i = 1 To Sheets.Count - 1
    Sheets(i).Visible = xlSheetVeryHidden
Next i
End Sub
Private Sub VersteckeHinweis()
Dim i As Integer, Sa As Boolean
Sa = ThisWorkbook.Saved
For i = 1 To Sheets.Count - 1
    Sheets(i).Visible = True
Next i
Sheets(Sheets.Count).Visible = xlSheetVeryHidden
ThisWorkbook.Saved = Sa
End Sub
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim Sh As Worksheet
Dim fn
Dim bo As Boolean
Set Sh = ActiveSheet
Cancel = True
On Error GoTo Fehler
Application.ScreenUpdating = False
If SaveAsUI Then
    fn = Application.GetSaveAsFilename(ThisWorkbook.Name, "Excel-Dateien (*.xls), *.xls", , "Datei speichern")
    If fn = False Then GoTo Fehler
    ZeigeHinweis
    Application.EnableEvents = False
    Application.StatusBar = "Speichert..."
    ThisWorkbook.SaveAs fn
Else
    ZeigeHinweis
    Application.EnableEvents = False
    Application.StatusBar = "Speichert..."
    ThisWorkbook.Save
End If
Fehler:
Application.EnableEvents = True
VersteckeHinweis
Sh.Activate
Application.StatusBar = False
Application.ScreenUpdating = True
If Err.Number > 0 Then MsgBox Err.Description
End Sub
Private Sub Workbook_Open()
VersteckeHinweis
ThisWorkbook.Saved = True
End Sub
Gruß Matthias
Bild

Betrifft: AW: Makro-Sicherheit: Hinweistext anbringen
von: schoentalegg
Geschrieben am: 09.03.2005 18:44:53
Hallo Matthias
sieht echt gut aus - vielen Dank! Beim Verlassen habe ich aber noch zwei kleine Bugs: Die Prozedur fragt, ob ich speichern will..
a) sage ich ja, dann wird gespeichert aber die Frage erscheint gleich nochmals
b) sage ich "abbrechen", dann bricht er richtig ab, klicke ich dann aber wieder auf das "X" zum verlassen, dann verlässt er das Workbook ohne wieder zufragen und ohne zu speichern!
c) sage ich nein, dann läuft alles korrekt.
Viele Grüsse
schoentalegg
Bild

Betrifft: AW: Makro-Sicherheit: Hinweistext anbringen
von: Matthias G
Geschrieben am: 09.03.2005 20:32:45
Hallo schoentalegg,
jaja, der Teufel steckt im Detail...
Habe das ganze nochmals überarbeitet:
Option Explicit
Private Sub MappeSpeichern(Optional fn)
Dim Sh As Worksheet
Dim bo As Boolean
Set Sh = ActiveSheet
On Error GoTo Fehler
Application.ScreenUpdating = False
If IsMissing(fn) Then
    ZeigeHinweis
    Application.StatusBar = "Speichert '" & ThisWorkbook.Name & "'..."
    Application.EnableEvents = False
    ThisWorkbook.Save
Else
    ZeigeHinweis
    Application.EnableEvents = False
    Application.StatusBar = "Speichert '" & fn & "'..."
    ThisWorkbook.SaveAs fn
End If
Fehler:
VersteckeHinweis
Sh.Activate
Application.StatusBar = False
Application.ScreenUpdating = True
If Err.Number > 0 Then MsgBox Err.Description
Application.EnableEvents = True
End Sub
Private Sub ZeigeHinweis()
Dim i As Integer
Sheets(Sheets.Count).Visible = True
For i = 1 To Sheets.Count - 1
    Sheets(i).Visible = xlSheetVeryHidden
Next i
End Sub
Private Sub VersteckeHinweis()
Dim i As Integer, Sa As Boolean
Sa = ThisWorkbook.Saved
For i = 1 To Sheets.Count - 1
    Sheets(i).Visible = True
Next i
Sheets(Sheets.Count).Visible = xlSheetVeryHidden
ThisWorkbook.Saved = Sa
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim aw
If Not ThisWorkbook.Saved Then
    aw = MsgBox("Sollen ihre Änderungen in '" & ThisWorkbook.Name & "' gespeichert werden?", vbYesNoCancel + vbExclamation)
    If aw = vbYes Then
        MappeSpeichern
    ElseIf aw = vbNo Then
        ThisWorkbook.Saved = True
    Else 'Abbrechen
        Cancel = True
    End If
End If
End Sub
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim fn
Cancel = True
If SaveAsUI Then
    fn = Application.GetSaveAsFilename(ThisWorkbook.Name, "Excel-Dateien (*.xls), *.xls", , "Datei speichern")
    If fn = False Then Exit Sub
    MappeSpeichern fn
Else
    MappeSpeichern
End If
End Sub
Private Sub Workbook_Open()
VersteckeHinweis
Sheets(1).Activate
ThisWorkbook.Saved = True
End Sub
Bitte um ausführliche Prüfung und Rückmeldung! ;-)
Gruß Matthias
Bild

Betrifft: AW: Makro-Sicherheit: Hinweistext anbringen
von: schoentalegg
Geschrieben am: 09.03.2005 23:00:52
Hallo Matthias
E c h t s t a r k!
Ein erster Schnell-Test mit allen Varianten die mir in den Sinn gekommen (speichern , speichern unter... schliessen ohne, öffnen ohne Makros etc.) hat keine Fehler ergeben. Alles funktioniert.
Vielen herzlichen Dank.
Viele Grüsse
schoentalegg
Bild

Betrifft: AW: Danke für die Rückmeldung :-) - o.T.
von: Matthias G
Geschrieben am: 09.03.2005 23:13:33
-
 Bild

Beiträge aus den Excel-Beispielen zum Thema "Interessantes Rätsel: Anzahl aller möglichen Kombi"