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

Datei nicht unter aderen Namen speichern

Datei nicht unter aderen Namen speichern
29.05.2023 23:07:21
mumpel

Hallo!


Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
  If SaveAsUI Then
     MsgBox "Sie dürfen diese Datei nicht unter einem anderen Namen speichern!", vbExclamation + vbOKOnly, "Hinweis"
     Cancel = True
  End If
End Sub


Mit diesem Code kann man zwar den "Speichern Unter"-Dialog verhindern. Aber Speichern über Fremdmakro (Workbooks("Name").SaveAs) ist das Speichern unter anderen Namen noch immer möglich. Könnte man auch das noch verhindern? (Wir gehen davon aus, dass das VBA-Projekt in dieser Datei zwangsweise aktiviert wird). Da komme ich gerade nicht weiter. Danke!

Gruß, René

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Datei nicht unter aderen Namen speichern
30.05.2023 07:23:35
Ulf
Schritt 1
Klasse anlegen mit Namen clExcel:

Option Explicit

Public WithEvents myXL As Excel.Application
Public myWb As Workbook

Private Sub Class_Initialize()
    Set myXL = Excel.Application
End Sub

Private Sub Class_Terminate()
    Set myWb = Nothing
    Set myXL = Nothing
End Sub

Private Sub myXL_WorkbookBeforeSave(ByVal wb As Workbook, ByVal SaveAsUI As Boolean, Cancel As Boolean)
    If wb.FullName = myWb.FullName Then
        Cancel = SaveAsUI = True
'ggf if cancel = true ..... MsgBox "Sie dürfen diese Datei nicht unter einem anderen Namen speichern!", vbExclamation + vbOKOnly, "Hinweis"
    End If
End Sub

Schritt 2:

Im Modul

Public myXLClass As clExcel

Public Sub initXL()
    Dim wb As Workbook
    Set myXLClass = New clExcel
    Set wb = Excel.ActiveWorkbook
    Set myXLClass.myWb = wb
End Sub


Anzeige
AW: Datei nicht unter aderen Namen speichern
30.05.2023 13:56:39
mumpel
Das funktioniert leider nicht. Ich kann trotzdem per Makro unter anderen Namen speichern. Da bleibt wohl doch nur, mit "Workbook_AfterSave" zu reagieren!? Oder müsste "myXL" nicht schon beim Öffnen der Arbeitsmappe initialisiert werden? Ich hab das mit den Klassen schon lange nicht mehr gemacht.


AW: Datei nicht unter aderen Namen speichern
30.05.2023 22:14:56
Ulf
ja müsste, das obige ist PoC.


AW: Datei nicht unter aderen Namen speichern
31.05.2023 03:45:51
mumpel
Oder einfach verhindern, dass überhaupt eine andere Datei offen sein kann. Auch eine denkbare Lösung? Was nicht alles möglich ist. Lauter interessante Experimente. 😉


Private Sub myXL_WindowActivate(ByVal Wb As Workbook, ByVal Wn As Window)
     If Wn.Caption > ThisWorkbook.Name Then
         Wn.Close savechanges:=False
         MsgBox "Während der Sitzung dieser Arbeitsmappe dürfen keine anderen Arbeitsmappen geöffnet werden.", _
                 vbExclamation + vbOKOnly, "Sicherheitshinweis"
     End If
End Sub

 Private Sub myXL_WorkbookOpen(ByVal Wb As Workbook)
      If Right(Wb.Name, Len(Wb.Name) - InStrRev(Wb.Name, ".")) Like "xla*" Then
        On Error Resume Next
        Workbooks(Wb.Name).Close savechanges:=False
        Workbooks(Wb.Name).Installed = False
        MsgBox "Während der Sitzung dieser Arbeitsmappe dürfen keine anderen Arbeitsmappen geöffnet werden.", _
                vbExclamation + vbOKOnly, "Sicherheitshinweis"
        On Error GoTo 0
        Exit Sub
     End If
     If ActiveWorkbook.Name > ThisWorkbook.Name Then
         ActiveWorkbook.Close savechanges:=False
         MsgBox "Während der Sitzung dieser Arbeitsmappe dürfen keine anderen Arbeitsmappen geöffnet werden.", _
                vbExclamation + vbOKOnly, "Sicherheitshinweis"
     End If
 End Sub


Anzeige
AW: Datei nicht unter aderen Namen speichern
30.05.2023 10:37:08
onur
Vergiss es. Ich kann die Datei auch, ohne sie überhaupt zu öffnen, über den Explorer unter einem anderen Namen speichern.


AW: Datei nicht unter aderen Namen speichern
30.05.2023 10:39:38
onur
Du könntest höchstens beim Öffnen der Datei den Dateinamen überprüfen lassen und wenn nicht der richtige Name, sofort wieder schliessen.


AW: Datei nicht unter aderen Namen speichern
30.05.2023 11:36:36
Oberschlumpf
Hi Onur, Hi mumpel,

beide Gedanken hatte ich auch...
...mit Explorer copy + paste woanders
...in Open-Ereignis Dateinamen und/oder Pfad prüfen, wenn nich da, wo sein soll = schließen

Wenn aber ich, als "normalouser" die Datei OHNE aktivierte Makros öffne - passiert bzgl Open-Ereignis gar nix

Aber jetzt gerade, während ich das hier schreibe, hab ich noch ne Idee :-)

- richte deine Originaldatei so ein, dass immer vor dem Schließen nur ein einziges Tabellenblatt sichtbar ist, auf dem zu lesen ist: Öffnen der Datei nur mit aktivierten Makros möglich
- wenn nun wieder ich (normalouser) die Datei öffnen will ohne Makros sehe ich genau nur...diesen Hinweis. Ich schließ Datei wieder, öffne diese mit Makros - und schwupps - Open-Ereignis prüft auf richtigen Namen und/oder Pfad

Na ja, einen Haken hat das Ganze noch immer :-/
- dieses 1 Tab.blatt muss immer das einzig sichtbare vor dem Schließen der Datei sein
- auch dann, wenn der User eigtl gar nix speichern will, MUSS die Datei nach Ausblenden der anderen Blätter + Einblenden von nur 1 Blatt gespeichert werden
meine im Moment einzige Idee: in einem immer ausgeblendeten Blatt eine Art Änderungsprotokoll, jede geänderte Zelle mit altem Wert speichern; und wenn User ohne Speichern schließen will = alle Änderungen rückgängig; erst dann speichern + schließen

Aber DAS is wohl zu viel Aufwand, oder?
Vllt gibts ja noch ne andere Idee...hmm...vllt auch direkt nach Öffnen der Datei eine Backup-Datei erstellen...und diese eben einfach gegen Original tauschen, wenn User zwar Werte änderte, diese aber nicht schließen will

Hilfts??...vllt n bisschen??

Ciao
Thorsten


Anzeige
AW: Datei nicht unter aderen Namen speichern
30.05.2023 14:03:35
mumpel
Zitat: Wenn aber ich, als "normalouser" die Datei OHNE aktivierte Makros öffne >>>

Das kannst Du aber nicht, weil Du die Kennwörter nicht hast. Die Datei öffne ich per Exe-Datei. Dabei werden die Kennwörter automatisch übergeben. Das VBA-Projekt wird, unabhängig von den Makroeinstellungen, zwangsweise aktiviert. Die Datei wird in einer abgeschotteten Instanz geöffnet, in der auch alle Add-Ins inaktiv sind. In der Exe-Datei sind die Kennwörter verschlüsselt abgelegt. Als "Normalouser" kannst Du das so nicht aufknacken. Der "Profihacker" aber kommt da sicher irgendwie ran.


Anzeige
AW: Pentest?
30.05.2023 14:09:40
Fennek
Hallo Mumpel,

wie wäre es mit einem Pentest? Die Excel-Datei enthält nur eine "Flag" (wie bei CTF), der Schutz ist wie beschrieben.

mfg


AW: Pentest?
30.05.2023 14:20:07
mumpel
Pentest?


AW: Pentest?
30.05.2023 14:22:12
Fennek
Hallo Mumpel,

ein Test, ob der Schutz wirklich gut ist.

Pentest: Penetration - Testing: Im Auftrag des Eigentümers werden Schwachstellen gesucht.

mfg


AW: Pentest?
30.05.2023 14:35:02
mumpel
Für Hobby gebe ich sicher kein Geld für so einen "Pentest" aus. Ist nur ein Testprojekt. Und bei "AutoIt" (mit diesem Programm erstelle ich die Exe-Datei) sind die Schwachstellen sicher jedem Hacker bekannt. Und Hacker können vielleicht sogar das Dateischutzkennwort irgendwie "schnell" knacken, und wenn das geschehen ist, kann man das Schreibschutzkennwort ganz leicht aus dem zugehörigen XML-Part entfernen. Ein Hexenwerk ist das alles nicht. Aber für "Standard-Anwender" ohne fundierte Kenntnisse reicht der Schutz locker aus.


Anzeige
AW: Pentest?
30.05.2023 14:45:01
Fennek
Hallo Mumpel,

steht das "Workbook.Open"-Passwort als lesbare Ascii-Zeichen in der *.exe?

Falls ja, wäre es wirklich kein "Hexen-", besser "Hackerwerk".

mfg


AW: Pentest?
30.05.2023 15:14:57
mumpel
Das Kennwort ist natürlich verschlüsselt(AES 256). Zum Ver- und Entschlüsseln braucht man ein Kennwort, welches gehasht ist (SHA 512). Aber wer weiss wo das alles steht und wie das Entschlüsseln funktioniert, kommt auch dann ran.

Jetzt könnte man den Schutz noch weiter treiben, indem man über ein globales Workbook_Open-Ereignis das Öffnen anderer Arbeitsmappen verhindert, und selbige sofort wieder schließen lässt. Dann könnte erst garkein "Fremdcode" ran. ;)


Anzeige
AW: Datei nicht unter aderen Namen speichern
30.05.2023 13:22:38
mumpel
Aber das nützt Dir nichts. Dann bleiben die Kennwörter erhalten. Ziel soll es sein, zu verhindern, dass jemand die Datei per Makro ohne Kennwörter speichert.

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige