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

Fenster mit dem VBA-Laufzeitfehler ‚1004’

Fenster mit dem VBA-Laufzeitfehler ‚1004’
Matthias
Ich habe Tabellen einer Arbeitsmappe mit einem Blattschutz versehen und dafür auch ein Passwort vergeben.
In einem VBA-Skript verwende ich den Befehl ActiveSheet.Unprotect um den Blattschutz aufzuheben. Wird beim Ausführen des Skripts nun jedoch ein falsches Passwort eingegeben oder der Vorgang abgebrochen, so erhalte ich ein Fenster mit dem VBA-Laufzeitfehler ‚1004’ u. a. mit den Möglichkeiten "Beenden" oder "Debuggen".
Wie kann ich in meinem Skript diesen Fehler verhindern?

Public Sub prcEntsperren()
Dim Mldg, Stil, Titel, Antwort, Text1
Mldg = "ACHTUNG!!! Für die erneute Freigabe des Blattes wird ein Passwort benötigt."
& vbCrLf & "" & vbCrLf & "" & vbCrLf & "" & vbCrLf & "Unbefugte müssen diesen Vorgang
mit [Nein] abbrechen !!" & vbCrLf & "" & vbCrLf & "Blatt erneut freigeben mit [ja]"
Stil = vbYesNo + vbCritical + vbDefaultButton2
Titel = ""
Antwort = MsgBox(Mldg, Stil, Titel)
If Antwort = vbYes Then
ActiveSheet.Unprotect
Cells.Locked = False
Range("c5").Value = "Freigabe aufgehoben"
Range("c5").Cells.Font.Italic = True
Range("c5").Cells.Font.Bold = True
Range("c5").Cells.Font.ColorIndex = 5
Else
MsgBox "Erneute Freigabe abgebrochen"
End If
End Sub

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
On Error Resume Next owT
16.03.2010 16:24:06
Detlef
AW: mit on Error Resume Next sollte man
17.03.2010 00:02:59
Daniel
vorsichtig umgehen, sonst kann das schnell zu unerwünschten Ergebnissen führen!
Wenn du in deinem Script Fehler vermeiden willst, dann so:
Sub Text()
On Error Resume Next
ActiveSheet.Unprotect
On Error Goto 0
If ActiveSheet.ProtectContents then
Msgbox "Falsches Password, das Blatt konnte nicht entsperrt werden
Else
'--- hier den weiteren Code einfügen, der ablaufen soll, wenn das Password richtig ist
End if
End Sub

Gruß, Daniel
AW: mit on Error Resume Next sollte man
17.03.2010 15:28:57
Matthias
Hallo Daniel,
erst Mal Danke.
Ich habe deinen Code wie folgt eingefügt:

Public Sub prcEntsperren()
Dim Mldg, Stil, Titel, Antwort, Text1
Mldg = "ACHTUNG!!! Für die erneute Freigabe des Blattes wird ein Passwort benötigt...."  _
Stil = vbYesNo + vbCritical + vbDefaultButton2
Titel = ""
Antwort = MsgBox(Mldg, Stil, Titel)
If Antwort = vbYes Then
ActiveSheet.Unprotect
                On Error Resume Next
ActiveSheet.Unprotect
On Error GoTo 0
If ActiveSheet.ProtectContents Then
MsgBox "Falsches Password, das Blatt konnte nicht entsperrt werden"
Else
Cells.Locked = False
Range("c5").Value = "Freigabe aufgehoben"
Range("c5").Cells.Font.Italic = True
Range("c5").Cells.Font.Bold = True
Range("c5").Cells.Font.ColorIndex = 5
End If
Else
MsgBox "Erneute Freigabe abgebrochen"
End If
End Sub

Aber offensichtlich habe ich etwas falsch gemacht, denn ...
  • wenn ich bei der Aufforderung das Passwort für die Freigabe einzugeben auf [Abbrechen] klicke kommt die gleiche Aufforderung erneut. ----> Wäre ja noch o.k.

  • wenn ich nun wieder auf [Abbrechen] klicke erhalte ich die Meldungsbox mit dem Text der Anweisung Msgbox ("Falsches Passwort ...") und es erfolgt keine weitere VBA-Ausführung und keine VBA-Fehlermeldung ----> Bei angepasstem/geänderten Text ginge das ja auch noch.

  • ABER ... wenn ich kein Passwort oder ein falsches Passwort eingebe und mit [OK] bestätige, so erhalte ich wieder den Laufzeitfehler '1004' mit der Info "Das eingegebene Passwort ist ungültig ..."

  • Was mache ich falsch?
    Code an der falschen Stelle (habe schon Verschiedenes probiert)?
    Oder fehlt noch eine Anweisung?
    Anzeige
    AW: On Error Resume Next owT
    17.03.2010 14:43:18
    Matthias
    Hallo Detlef,
    danke für Deine Antwort.
    Enthält sie nur einen Betreff? Textbereich leer?
    Die Anweisung On Error Resume Next beschreibt die VBA-Hilfe wie folgt:
    Legt fest, daß das Programm die Ausführung beim Auftreten eines Laufzeitfehlers mit der Anweisung fortsetzt, die auf die fehlerverursachende Anweisung folgt.
    Was ist dann unter dem owT zu verstehen, das bei dir dem Anweisungs-Befehl folgt?
    AW: On Error Resume Next owT
    18.03.2010 13:21:06
    Detlef
    Hallo,
    sorry, soll nur heißen, ohne weiteren Text in der Antwort. Die Anweisung lautet nur On Error Resume Next .
    Allerdings vorsichtig verwenden, da eine konkrete Fehlerbehandlung natürlich immer besser ist und Du auf den Fehler reagieren kannst. Bei On Error Resume Next wird der Fehler einfach nur übersprungen.
    Gruß Detlef
    Anzeige
    AW: On Error Resume Next owT
    18.03.2010 14:00:38
    Matthias
    Hallo,
    danke.
    Aber ich krieg's nicht hin.
    Anscheinend wird nur das Anklicken von [Abbrechen] als Fehler angesehen.
    Gebe ich kein oder ein falsches Passwort ein und klicke auf [OK], dann erhalte ich wieder den Laufzeitfehler '1004' mit der Info "Das eingegebene Passwort ist ungültig ..."
    Was läuft schief? Ein falsches Passwort ist doch auch eine Fehlermeldung.
    Ich habe auch schon folgende Variante versucht - Verhalten jedoch wie vorhin beschrieben.
    .....Anfang meines Skripts
    ActiveSheet.Unprotect
    On Error GoTo err_fehler1

    ......weiterer Code
    err_fehler1:
    MsgBox "Vorgang abgebrochen"

    Anzeige
    AW: On Error Resume Next owT
    18.03.2010 14:58:03
    Heiko
    Hallo Matthias,
    z.B so:
    Public Sub prcEntsperren()
    Dim Mldg As String
    Dim Stil As Integer, Antwort As Integer
    Mldg = "ACHTUNG!!! Für die erneute Freigabe des Blattes wird ein Passwort benötigt." _
    & vbCrLf & vbCrLf & vbCrLf & vbCrLf & "Unbefugte müssen diesen Vorgang" _
    & " mit [Nein] abbrechen !!" & vbCrLf & vbCrLf & "Blatt erneut freigeben mit [ja]"
    Stil = vbYesNo + vbCritical + vbDefaultButton2
    Antwort = MsgBox(Mldg, Stil)
    If Antwort = 6 Then
    On Error GoTo Errorhandler
    ActiveSheet.Unprotect
    Cells.Locked = False
    Range("c5").Value = "Freigabe aufgehoben"
    Range("c5").Cells.Font.Italic = True
    Range("c5").Cells.Font.Bold = True
    Range("c5").Cells.Font.ColorIndex = 5
    Exit Sub
    End If
    Errorhandler:
    MsgBox "Erneute Freigabe abgebrochen"
    End Sub
    

    Gruß Heiko
    PS: Rückmeldung wäre nett!
    Anzeige
    AW: On Error Resume Next owT
    19.03.2010 13:47:08
    Matthias
    Hallo Heiko,
    vielen Dank - es funktioniert.

    305 Forumthreads zu ähnlichen Themen

    Anzeige
    Anzeige
    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige