Clever-Excel-Forum

Normale Version: Visual Basic: Laufzeitfehler 1004
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Hallo liebe Leute,

ich habe in meiner Excel Datei einen VBA Code.

Beim Versuch einen Blattschutz zu hinterlegen, erscheint nun bei mir jedoch immer der Laufzeitfehler 1004:

Die Hidden-Eigenschaft des Range-Ojektes kann nicht festgelegt werden.

Wenn ich auf Debuggen klicke, wird bei mir im VBA Code folgende Zeile gelb markiert:


  Rows("13:42").Hidden = False

Wo liegt mein Fehler?

Tausend dank für eure Hilfe

Hier der gesamte VBA Code:

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$F$7" Then
        Rows("13:42").Hidden = False
        Select Case Target.Value
            Case "gesetzl. pflichtversichert (KV)"
                Rows("13:15").Hidden = True
                Rows("33:40").Hidden = True
                Rows("42").Hidden = True
            Case "gesetzl. pflichtversichert (KV) inkl. Dienstwagen"
                Rows("33:40").Hidden = True
            Case "freiwillig gesetzl. versichert (KV)"
                Rows("13:15").Hidden = True
                Rows("22").Hidden = True
                Rows("25").Hidden = True
                Rows("38:40").Hidden = True
                Rows("42").Hidden = True
            Case "freiwillig gesetzl. versichert (KV) inkl. Dienstwagen"
                Rows("22").Hidden = True
                Rows("25").Hidden = True
                Rows("38:40").Hidden = True
            Case "privat versichert (KV)"
                Rows("13:15").Hidden = True
                Rows("22").Hidden = True
                Rows("25").Hidden = True
                Rows("35:38").Hidden = True
                Rows("40").Hidden = True
                Rows("42").Hidden = True
            Case "privat versichert (KV) inkl. Dienstwagen"
                Rows("22").Hidden = True
                Rows("25").Hidden = True
                Rows("35:38").Hidden = True
                Rows("40").Hidden = True
            Case "verbeamtet"
                Rows("13:15").Hidden = True
                Rows("22:25").Hidden = True
                Rows("33:37").Hidden = True
                Rows("42").Hidden = True
            Case "verbeamtet inkl. Dienstwagen"
                Rows("22:25").Hidden = True
                Rows("33:37").Hidden = True
        End Select
    End If
End Sub


Zusätzlich habe ich noch folgenden Makro:

Code:
Sub ResetEingaben()
'
' ResetEingaben Makro
'
  Application.EnableEvents = False
  Range("F3:H3,F5:H5").ClearContents
  Range("F11,D12,D14:D15").ClearContents
  Range("F19:F25").ClearContents
  Range("F32,D33:D41").ClearContents
 
  Range("F7:H7").Value = "bitte auswählen" 'Zellen F7:H7 ausfüllen
  Rows("13:42").Hidden = False
  Range("F9") = 12                         'Zelle F9 12 reinschreiben
  Application.EnableEvents = True
  Range("F3:H3").Select 'spring dahin
End Sub
Hallo,

dann musst Du im Code vor jeder Aktion, den Schutz aufheben und am Ende wieder setzen.

Nach folgendem Muster:

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
   If Target.Address = "$F$7" Then
     ActiveSheet.Unprotect   'Blattschutz raus
       Rows("13:42").Hidden = False
       Select Case Target.Value
   .....................
   ................
               Rows("33:37").Hidden = True
       End Select
       ActiveSheet.Protect   'Blattschutz wieder ein
   End If
End Sub
Das funktioniert leider nicht, wenn ich jetzt den Makro ausführen möchte, fragt er mich nach dem Kennwort zum Aufheben des Blattschutzes und ich erhalte weiterhin die gleiche Fehlermeldung.

Nur dieses mal springt er dann beim Klick "Debuggen" auf die Makro Programmierung und markiert dort die Reihe "Rows("13:42").Hidden = False" gelb?

VBA Code

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$F$7" Then
    ActiveSheet.Unprotect   'Blattschutz raus
        Rows("13:42").Hidden = False
        Select Case Target.Value
            Case "gesetzl. pflichtversichert (KV)"
                Rows("13:15").Hidden = True
                Rows("33:40").Hidden = True
                Rows("42").Hidden = True
            Case "gesetzl. pflichtversichert (KV) inkl. Dienstwagen"
                Rows("33:40").Hidden = True
            Case "freiwillig gesetzl. versichert (KV)"
                Rows("13:15").Hidden = True
                Rows("22").Hidden = True
                Rows("25").Hidden = True
                Rows("38:40").Hidden = True
                Rows("42").Hidden = True
            Case "freiwillig gesetzl. versichert (KV) inkl. Dienstwagen"
                Rows("22").Hidden = True
                Rows("25").Hidden = True
                Rows("38:40").Hidden = True
            Case "privat versichert (KV)"
                Rows("13:15").Hidden = True
                Rows("22").Hidden = True
                Rows("25").Hidden = True
                Rows("35:38").Hidden = True
                Rows("40").Hidden = True
                Rows("42").Hidden = True
            Case "privat versichert (KV) inkl. Dienstwagen"
                Rows("22").Hidden = True
                Rows("25").Hidden = True
                Rows("35:38").Hidden = True
                Rows("40").Hidden = True
            Case "verbeamtet"
                Rows("13:15").Hidden = True
                Rows("22:25").Hidden = True
                Rows("33:37").Hidden = True
                Rows("42").Hidden = True
            Case "verbeamtet inkl. Dienstwagen"
                Rows("22:25").Hidden = True
                Rows("33:37").Hidden = True
        End Select
        ActiveSheet.Protect   'Blattschutz wieder ein
    End If
End Sub

Makro

Code:
Sub ResetEingaben()
'
' ResetEingaben Makro
'
  Application.EnableEvents = False
  Range("F3:H3,F5:H5").ClearContents
  Range("F11,D12,D14:D15").ClearContents
  Range("F19:F25").ClearContents
  Range("F32,D33:D41").ClearContents
 
  Range("F7:H7").Value = "bitte auswählen" 'Zellen F7:H7 ausfüllen
  Rows("13:42").Hidden = False
  Range("F9") = 12                         'Zelle F9 12 reinschreiben
  Application.EnableEvents = True
  Range("F3:H3").Select 'spring dahin
End Sub
Hallo,

mit Kennwort dann so:


Code:
   If Target.Address = "$F$7" Then
     ActiveSheet.Unprotect "mein Kennwort"   'Blattschutz raus
       Rows("13:42").Hidden = False

       ActiveSheet.Protect "mein Kennwort"  'Blattschutz wieder ein
   End If


Im Code "mein Kennwort" mit Deinem Kennwort ersetzen!!!
Perfekt, das mit dem Passwort hat schon mal funktioniert.

Nun erhalte ich nur noch beim Makro die Laufzeitfehler 1004 Meldung

Die Hidden-Eigenschaft des Range-Ojektes kann nicht festgelegt werden.

Gelb marktiert ist die Zeile:   Rows("13:42").Hidden = False

Makro Code

Code:
Sub ResetEingaben()
'
' ResetEingaben Makro
'
  Application.EnableEvents = False
  Range("F3:H3,F5:H5").ClearContents
  Range("F11,D12,D14:D15").ClearContents
  Range("F19:F25").ClearContents
  Range("F32,D33:D41").ClearContents
 
  Range("F7:H7").Value = "bitte auswählen" 'Zellen F7:H7 ausfüllen
  Rows("13:42").Hidden = False
  Range("F9") = 12                         'Zelle F9 12 reinschreiben
  Application.EnableEvents = True
  Range("F3:H3").Select 'spring dahin
End Sub
Hallo,

das ist wieder eine eigenständige Routine und da musst das mit dem Blattschutz natürlich auch einbauen.
Etwas mitdenken bitte.
Vielen Dank,

ich habe es mir schon fast gedacht, hatte es auch im Vorwege versucht, nur an der falschen Stelle.

Mir fehlt da einfach die Erfahrung.

Nun funktioniert alles!

Top!
Hallo Atilla,

eine Frage habe ich noch, dass habe ich leider übersehen:

Zum Makro:

Die Zellen F33-F41 sind mit einer einfachen Multiplikationsformel jeweils hinterlegt, z.B. Zelle F33 hat die Formel D33*F9

Durch den Clear Filter im Makro löscht er nach Ausführung des Makro natürlich nicht nur den Wert in der Zelle, sondern auch eine Formel.

Gibt es hierzu auch einen VBA Befehl?

Es tut mir leid das ich soviel fragen muss, bin aber absoluter Neuling!

Tausend Dank

Code:
Sub ResetEingaben()
'
' ResetEingaben Makro
'
  ActiveSheet.Unprotect "Kennwort"   'Blattschutz raus
  Application.EnableEvents = False
  Range("F3:H3,F5:H5").ClearContents
  Range("F11,D12,D14:D15").ClearContents
  Range("F19:F25").ClearContents
  Range("D33:D41").ClearContents
  Range("F32:F41").ClearContents
 
  Range("F7:H7").Value = "bitte auswählen" 'Zellen F7:H7 ausfüllen
  Rows("13:42").Hidden = False
  Range("F9") = 12                         'Zelle F9 12 reinschreiben
  Application.EnableEvents = True
  Range("F3:H3").Select 'spring dahin
  ActiveSheet.Protect "Kennwort"   'Blattschutz wieder ein
End Sub
Hallo,

das geht nicht.
Dann musst Du den Inhalt der Referenzzellen der Formeln leeren/löschen

Beispiel: Formel In A2 -> =A1 bezieht sich so auf A1, dann Inhalt von A1 löschen. Damit da aber nicht 0 erscheint, müsste  die Formel mit einer Wennn Abfrage umrandet sein.

Schau Dir mal unten die Beispiele an. Die Formeln in B2 und C2 beziehen sich beide auf leere Zellen. Aber das eine mal erscheint eine 0 und das andere mal nichts.
Man muss aber hier wissen, wenn mit den Ergebnissen aus diesen Formelzellen weiter gerechnet werden soll, das das dann auf diese Art nicht geht.
Die 0 sollte i dem Fall stehen gelassen werden. Das Leererscheinen macht man dann über das Format wie in Zelle D2


Arbeitsblatt mit dem Namen 'Tabelle1'
 ABCD
11   
210  
ZelleFormatWert
D2Standard;;0
ZelleFormel
A2=A1
B2=B1
C2=WENN(C1="";"";C1)
D2=D1
Diese Tabelle wurde mit Tab2Html (v2.4.1) erstellt. ©Gerd alias Bamberg
Hallo,

danke für deine Antwort, aber das geht doch, hab den Befehl gefunden:

Code:
Sub ResetEingaben()
'
' ResetEingaben Makro
'
  ActiveSheet.Unprotect "Kennwort"   'Blattschutz raus
  Application.EnableEvents = False
  Range("F3:H3,F5:H5").ClearContents
  Range("F11,D12,D14:D15").ClearContents
  Range("F19:F25").ClearContents
  Range("D33:D41").ClearContents
  Range("F32:F41").ClearContents
 
  Range("F33").FormulaLocal = "=D33*$F$9"
  Range("F34").FormulaLocal = "=D34*$F$9"
  Range("F35").FormulaLocal = "=D35*$F$9"
  Range("F36").FormulaLocal = "=D36*$F$9"
  Range("F37").FormulaLocal = "=D37*$F$9"
  Range("F38").FormulaLocal = "=D38*$F$9"
  Range("F39").FormulaLocal = "=D39*$F$9"
  Range("F40").FormulaLocal = "=D40*$F$9"
  Range("F41").FormulaLocal = "=D41*$F$9"
 
  Range("F7:H7").Value = "bitte auswählen" 'Zellen F7:H7 ausfüllen
  Rows("13:42").Hidden = False
  Range("F9") = 12                         'Zelle F9 12 reinschreiben
  Application.EnableEvents = True
  Range("F3:H3").Select 'spring dahin
  ActiveSheet.Protect "Kennwort"   'Blattschutz wieder ein
End Sub
Seiten: 1 2