Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Visual Basic: Laufzeitfehler 1004
#1
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
Antworten Top
#2
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
Gruß Atilla
Antworten Top
#3
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
Antworten Top
#4
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!!!
Gruß Atilla
Antworten Top
#5
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
Antworten Top
#6
Hallo,

das ist wieder eine eigenständige Routine und da musst das mit dem Blattschutz natürlich auch einbauen.
Etwas mitdenken bitte.
Gruß Atilla
[-] Folgende(r) 1 Nutzer sagt Danke an atilla für diesen Beitrag:
  • Nordlicht85
Antworten Top
#7
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!
Antworten Top
#8
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
Antworten Top
#9
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
Gruß Atilla
Antworten Top
#10
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
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste