Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

Prüfen, ob Password-Schutz vorhanden


Betrifft: Prüfen, ob Password-Schutz vorhanden von: Peter Kloßek
Geschrieben am: 04.03.2019 01:15:49

Liebe VBA-Spezialisten,
jetzt habe ich lange im Internet gesucht, jedoch keine brauchbare Lösung für mein Problem gefunden. Es geht mir darum, per VBA-Code feststellen zu können, ob eine bestimmte Datei mit einem Password-Schutz belegt ist oder nicht. Und dies unbedingt vor dem Öffnen dieser Datei. Hintergrund: Vermeidung des Öffnens einer nicht durch Password geschützten Datei, die evtl. auf einem Datenträger (illegal) untergeschoben wurde und Schad-Code enthält. In Excel 2016 wird beim Öffnen einer Datei, die normalerweise mit einem Password geschützt ist, auch eine Datei gleichen Namens, die nicht durch Password geschützt ist, geöffnet. Ein Abgleich des tatsächlich nicht vorhandenen Passwords mit dem im VBA-Code eingegebenen Password findet offensichtlich nicht statt; normalerweise müsste das Öffnen der Datei abgelehnt werden, da nicht mit "...password:=""" bzw. ohne Password aufgerufen wurde. Hat jemand eine Idee?

M.f.G. Peter Kloßek

  

Betrifft: AW: Prüfen, ob Password-Schutz vorhanden von: Nepumuk
Geschrieben am: 04.03.2019 08:32:06

Hallo Peter,

versuch auf die Datei per ADO zuzugreifen. Wenn du in einen Fehler läufst dann ich die Mappe mit einem Kennwort geschützt.

Ein Beispielcode:

Public Sub Test()
    
    Dim objConnection As Object
    Dim strConnection As String
    Dim strWorkbook As String
    
    strWorkbook = "H:\Mappe1.xlsm"
    
    Set objConnection = CreateObject("ADODB.Connection")
    
    strConnection = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
        "Data Source=" & strWorkbook & ";" & _
        "Extended Properties=""Excel 12.0 Macro;HDR=No;IMEX=0"""
    
    On Error GoTo err_exit
    
    Call objConnection.Open(strConnection)
    
    MsgBox "Nicht geschützt"
    
    sub_exit:
    
    objConnection.Close
    
    Set objConnection = Nothing
    
    Exit Sub
    
    err_exit:
    
    MsgBox "geschützt"
    
    Resume sub_exit
    
End Sub

Gruß
Nepumuk


  

Betrifft: AW: Prüfen, ob Password-Schutz vorhanden von: Peter Kloßek
Geschrieben am: 06.03.2019 14:20:08

Hallo Nepumuk,

vielen Dank für Deinen Lösungsansatz. Aufgrund einer fiebrigen Erkältung kam ich erst heute dahzu, zu testen. Das Makro läuft in einer Schleife endlos dahin. Und bei einer nicht geschützten Datei kommt der Hinweis "geschützt".

M.f.G. Peter Kloßek


  

Betrifft: AW: Prüfen, ob Password-Schutz vorhanden von: Nepumuk
Geschrieben am: 06.03.2019 14:33:11

Hallo Peter,

kann ich nicht nachvollziehen. Das funktioniert bei mir ohne Probleme, da ist auch keine Schleife drin.

Ich habe es aber "nur" mit xlsm-Dateien getestet. Für xls- oder xlsx-Dateien müsste an den "Extended Properties" etwas geändert werden. Aber dazu bräuchte ich mehr Informationen zum zu testenden Dateityp.

Gruß
Nepumuk


  

Betrifft: AW: Prüfen, ob Password-Schutz vorhanden von: Nepumuk
Geschrieben am: 06.03.2019 20:04:19

Hallo Peter,

hier die verschiedenen Connection-Strings:

Dim avntTemp As Variant

strWorkbook = "H:\Mappe1.xlt"

avntTemp = Split(strWorkbook, ".")

Select Case LCase$(avntTemp(UBound(avntTemp)))
    Case "xlsm"
        strConnection = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
            "Data Source=" & strWorkbook & ";" & _
            "Extended Properties=""Excel 12.0 Macro;HDR=No;IMEX=0"""
    Case "xlsx"
        strConnection = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
            "Data Source=" & strWorkbook & ";" & _
            "Extended Properties=""Excel 12.0 Xml;HDR=No;IMEX=0"""
    Case "xlsb"
        strConnection = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
            "Data Source=" & strWorkbook & ";" & _
            "Extended Properties=""Excel 12.0;HDR=No;IMEX=0"""
    Case "xls"
        strConnection = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
            "Data Source=" & strWorkbook & ";" & _
            "Extended Properties=""Excel 8.0;HDR=No;IMEX=0"""
    Case Else
        Call MsgBox("Unbekannter Dateityp", vbCritical, "Fehler")
        Exit Sub
End Select

Gruß
Nepumuk


  

Betrifft: AW: Prüfen, ob Password-Schutz vorhanden von: Peter Kloßek
Geschrieben am: 07.03.2019 11:54:54

Hallo Nepumuk,

die Dateiendung ".xlsm" war schon richtig. Anstelle von "H:\Mappe1.xlsm" habe ich meine Arbeitsmappe angegeben. Weiteres war doch nicht zu beachten? Das Makro verlief in einer Endlos-Schleife und konnte nur gewaltsam gestoppt werden. Ich arbeite mit Windows 10 und Office/Excel 2016. Es soll schon mal vorkommen, dass Makros in einer höheren Excel-Version plötzlich nicht mehr funktionieren.

M.f.G. Kloßek


  

Betrifft: AW: Prüfen, ob Password-Schutz vorhanden von: Oberschlumpf
Geschrieben am: 09.03.2019 09:21:31

Hi Peter,

hast du den Code mit F8 mal von Beginn an im Einzelschrittmodus durchlaufen lassen?
An welcher Stelle genau kommt es zu einem Fehler?

Ciao
Thorsten


Beiträge aus dem Excel-Forum zum Thema "Prüfen, ob Password-Schutz vorhanden"