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

Laufzetfehler 1004 mit .cell

Laufzetfehler 1004 mit .cell
05.06.2013 10:41:43
Markus
Guten Morgen,
leider erhalte ich bei folgendem Code immer den Laufzeitfehler 1004 und zwar in der Zeile ".Cells(z, 10).Interior.ColorIndex = 3"
Der Code stammt aus einer anderen Arbeitsmappe von mir und dort funktioniert er ohne Probleme, woran kann das liegen?
Vielen dank für eure Hilfe .
Gruß Markus
Sub Color()
Sheets("Overview").Activate
With Sheets("Overview")
Dim z As Integer
Dim leer As Integer
z = 24
Do
If .Cells(z, 4)  "" Then
leer = False
Else
leer = True
End If
If .Cells(z, 10).Value > .Cells(z, 7).Value Then
.Cells(z, 10).Interior.ColorIndex = 3
End If
z = z + 1
Loop Until leer = True
End With
End Sub

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Blattschutz? owT
05.06.2013 10:47:52
Rudi

AW: Laufzetfehler 1004 mit .cell
05.06.2013 10:49:13
Klaus
Hallo Markus
dein Code sieht auf den ersten Blick lauffähig aus. Ich vermute einen #NV oder #DIV/0 Bezug in einer der abgefragten Zellen, aber dann hätte der Fehler eigentlich eine Zeile früher auftreten können.
Oder: Ohne die Musterdatei kann es keiner wissen :-)
Offtopic ein paar Anmerkungen zu deinem Code:
Sub Color()
Color ist ein Begriff, der innerhalb von Excel/VBA bereits belegt ist. Solche Begriffe sollte man in Programm und variablennamen schon aus Prinzip vermeiden! Nenn das Ding einfach "MyColor".
Sheets("Overview").Activate
ist hier unnötig
DO [...] LOOP until
kann man machen, ist aber meist die schlechtere Lösung als eine FOR-NEXT Schleife.
Insgesamt:
Der Code sieht aus, als könnte man ihn komplett durch eine bedingte Formatierung ersetzen - oder?
Grüße,
Klaus M.vdT.

Anzeige
ausserdem ein Deklarationsfehler ...
05.06.2013 11:01:37
Klaus
Hi,
du DIMst "leer" als INTEGER, nutzt es aber als BOOLEAN. Ich muss mal ganz doof fragen: weisst du, was DIM ist und bewirkt? Und was der Unterschied zwischen Integer und Boolean ist?
Dazu kommt, dass deine DIMS irgendwo im Code stehen. Kann man machen - soll man aber nicht. In diesem Fall hat es zB dazu geführt, dass Hary unten deinen WITH-Rahmen nicht erkannt hat.
DIMs gehören an den Anfang!
z benutzt du als Zeilenzähler. Variablen die sich auf Zeilen beziehen sollte man immer als LONG deklarieren, da es mehr Zeilen gibt als in INTEGER passen.
Nochmal was konstruktives: So sähe dein SUB aus, wenn es von mir käme:
Sub MyColor()
Dim z As Long
Dim RowFirst As Long
Dim RowLast As Long
With Sheets("Overview") 'Blatt referenzieren
.Unprotect 'Blattschutz aufheben falls vorhanden - Passwort?
RowFirst = 24 'erste Zeile
RowLast = .Cells(RowFirst, 4).End(xlDown).Row 'letzte Zeile
If RowLast  .Cells(z, 7).Value Then
.Cells(z, 10).Interior.ColorIndex = 3
End If
Next z
End If
.Protect 'Blattschutz setzen - Passwort?
End With
End Sub
Beachte auch, wie das einrücken der Blöcke die Lesbarkeit erhöht!
Grüße,
Klaus M.vdT.

Anzeige
AW: Laufzetfehler 1004 mit .cell
05.06.2013 10:49:31
hary
Moin
Nimm den Punkt vor If .Cells(z, 4) "" Then weg.
Mit Punkt verlangt Cells eine With Anweisung.
gruss hary

with Anweisung ist da, Hary!
05.06.2013 10:51:03
Klaus
Hi Hary,
den WITH-Rahmen hat er gesetzt, schau mal genau hin :-)
was Einrücken nicht alles an lesbarkeit bringt ...
Grüße,
Klaus M.vdT.

AW: with Anweisung ist da, Hary!
05.06.2013 12:57:04
Markus
Hallo zusammen,
erst einmal vielen Dank für eure Hilfe: Der Fehler lag am Blattschutz, in meiner anderen Mappe wird dieser durch ein anders Makro aufgehoben, daher ist mir das so nicht mehr bewusst gewesen.
Dennoch habe ich auch mal meine Code Struktur überarbeitet. Anbei der funktionierende Code:
Sub Farbe()
ActiveSheet.Unprotect Password:="Test"
With Sheets("Overview")
Dim z As Integer
Dim leer As Integer
z = 24
Do
If .Cells(z, 4)  "" Then
leer = False
Else
leer = True
End If
If .Cells(z, 10).Value > .Cells(z, 7).Value Then
.Cells(z, 10).Interior.ColorIndex = 3
ElseIf .Cells(z, 10).Value 

Anzeige
kleine Verbesserung:
05.06.2013 14:18:04
Klaus
Hi Markus,
eine Kleinigkeit hast du noch drin:
Sub Farbe()
ActiveSheet.Unprotect Password:="Test"
With Sheets("Overview")
Es wird das AKTIVE Blatt ent-schützt, und erst danach auf "Overview" referenziert. Das klappt, solange du im Blatt "Overview" bist - sonst nicht!
Besser andersrum:
Sub Farbe()
With Sheets("Overview")
.Unprotect Password:="Test"

(beachte dass ich ActiveSheet eingespart habe). So wird auf das Blatt "Overview" referenziert, und dann ent-schützt.
Unten natürlich genauso:
.Protect Password:="test"
End With
End Sub
Grüße,
Klaus M.vdT.
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige