Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Laufzeitfehler 1004

Forumthread: Laufzeitfehler 1004

Laufzeitfehler 1004
07.11.2024 09:08:08
ALESCH
Hallo zusammen,

von mir erst mal ein herzliches Hallo, bin zum ersten male hier im Forum.
ich habe ein Problem mit dem Laufzeitfehler 1004 (Anwendungs- oder objektdefinierter Fehler)
Leider bin ich mit meinem Latein wirklich am Ende, denn die Zeilen werden einmal ausgeführt und dann nicht mehr.
Kann mir jemand helfen bitte ich bin echt am durchdrehen.

Gruß Alex

Codezeilen in Modul:

Sub durchstreichen()
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Prüftabelle")


'Prüftabelle Punkt 7.9-7.11
If ws.Range("Z34") = "x" Then
diagonale ws, "C177", "AG164"
End If

'Prüftabelle Punkt 7.3
If ws.Range("AE34") = "x" Then
diagonale ws, "C149", "AG149"
End If

'Prüftabelle Punkt 7.2
If ws.Range("Z34") = "x" Then
diagonale ws, "C147", "AG147"
End If

'Prüftabelle Punkt 8-9
If ws.Range("AH180") = "x" Then
diagonale ws, "C194", "AG182"
End If

'Prüftabelle Phunkt 10-11
If ws.Range("AH208") = "x" Then
diagonale ws, "C224", "AG210"
End If
___________________________

End Sub

Sub diagonale(ws As Worksheet, startCell As String, endCell As String)
Dim shp As shape 'Shape lässt sich nicht Groß schreiben

Worksheets("Prüftabelle").Unprotect Password:="Pwd"

For Each shp In ws.Shapes
If Not Intersect(shp.TopLeftCell, ws.Range(startCell & ":" & endCell)) Is Nothing Then 'Hier wird der Fehler markiert
shp.Delete
End If
Next shp

Dim x1 As Double, y1 As Double, x2 As Double, y2 As Double
x1 = ws.Range(startCell).Left
y1 = ws.Range(startCell).Top + ws.Range(startCell).Height
x2 = ws.Range(endCell).Left + ws.Range(endCell).Width
y2 = ws.Range(endCell).Top

ws.Shapes.AddLine x1, y1, x2, y2

Worksheets("Prüftabelle").Protect Password:="Pwd"
End Sub
Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Laufzeitfehler 1004
07.11.2024 09:37:15
daniel
Hi
ohne Datei zum Testen schwierig

dass sich eine Shape-Variable nicht dimensionieren lässt, ist seltsam.
aber du kannst auch shp einfach variant lassen (Dim shp)

ansonsten müsstest du mal prüfen, was genau den Fehler verursacht:
füge mal folgende drei Codezeilen vor und nach dem Schleifenstart ein :
ws.Select

For Each shp In ws.Shapes
ws.Range(startCell & ":" & endCell).Select
shp.TopleftCell.Select
If Not Intersect(shp.TopLeftCell, ws.Range(startCell & ":" & endCell))

vielleicht gibt dir das einen Hinweis, wo der Fehler genauer steckt

Gruß Daniel

Anzeige
AW: Laufzeitfehler 1004
07.11.2024 10:07:01
ALESCH
Hallo Daniel,

danke erst mal für die Antwort.
Leider gab es da einen Fehler, so dass sich die Datei von alleine geschlossen hat und auch nicht mehr startet.

Gruß Alex

Boah an dem Teil beisse ich mir die Zähne aus
AW: Laufzeitfehler 1004
07.11.2024 12:55:53
Piet
Hallo Alesch

läßt sich die Datei evtl. über eine Offene Arbeitsmappe im Menü "Datei Öffnen" starten??
Last Versuch bei mir ist LibreOffice, die öffnet evtl. auch beschädigte Dateien. Ohne Garantie.

mfg Piet
Anzeige
AW: Laufzeitfehler 1004
07.11.2024 15:47:39
ALESCH
Hallo,
nein ich hatte keine Chance mehr.
Unsere IT hat mir die Datei wieder hergestellt.

Ergo, man sollte immer eine Sicherungskopie erstellt haben wenn man weiter macht *schäm

Gruß Alex
AW: Laufzeitfehler 1004
07.11.2024 09:40:54
MCO
Guten Morgen!

Wie Daniel schon sagt: ohne Datei schwierig zum Testen.
Dennoch gehe ich auch davon aus, dass ein Shape als Object deklariert werden muss.

Kosmetisch aufbereitet und zusammengefasst sehen deine Sub bei mir so aus:

Sub durchstreichen()

Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Prüftabelle")

'Prüftabelle Punkt 7.9-7.11
If ws.Range("Z34") = "x" Then diagonale ws, "C177", "AG164"

'Prüftabelle Punkt 7.3
If ws.Range("AE34") = "x" Then diagonale ws, "C149", "AG149"

'Prüftabelle Punkt 7.2
If ws.Range("Z34") = "x" Then diagonale ws, "C147", "AG147"

'Prüftabelle Punkt 8-9
If ws.Range("AH180") = "x" Then diagonale ws, "C194", "AG182"

'Prüftabelle Phunkt 10-11
If ws.Range("AH208") = "x" Then diagonale ws, "C224", "AG210"

End Sub


Sub diagonale(ws As Worksheet, startCell As String, endCell As String)

Dim shp As Object 'Shape lässt sich nicht Groß schreiben
Dim x1 As Double, y1 As Double, x2 As Double, y2 As Double

With ws
.Unprotect Password:="Pwd"

For Each shp In .Shapes
If Not Intersect(shp.TopLeftCell, .Range(startCell & ":" & endCell)) Is Nothing Then shp.Delete
Next shp

x1 = .Range(startCell).Left
y1 = .Range(startCell).Top + .Range(startCell).Height
x2 = .Range(endCell).Left + .Range(endCell).Width
y2 = .Range(endCell).Top

.Shapes.AddLine x1, y1, x2, y2
.Protect Password:="Pwd"
End With

End Sub


Gruß, MCO
Anzeige
;

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige