AW: hmm..wieder was vergessen
25.09.2006 22:38:38
Oberschlumpf
Hallo Heiko
Vielen Dank auf jeden Fall für de Mühe, die du gemacht hast.
Ich hatte versucht, einiges an Code zu löschen, hatte dabei aber a) festgestellt, dass eben viele Subs sich mehr oder weniger gegenseitig aufrufen (was ja so auch gewünscht ist) und b) dass beim Löschen von Code ja nicht unbedingt mehr das "Umfeld" da ist, als wenn der gabze Code noch da ist.
In einem Punkt allerdings muss ich dir Recht geben. Die Sub, in der das Problem mit dem Array auftritt, ruft noch eine Sub auf, in der dann erst die Zeilen gelöscht werden - was ja eigtl auch schon in der Fehler-Sub passieren könnte.
Nun denn...wir VBAler sind ja hin und wieder auch nur fehlerproduzierende Maschinen..ähh...Menschen! :-)))
Das Ausschalten einiger Menübefehle, z Bsp Löschen von Zellen/Zeilen/Spalten, muss leider sein, weil diese Datei von mehreren Leuten benutzt wird.
Und hin und wieder denkt der Eine oder die Andere sich an dieser Datei mal als "Tabellen-Designer" :-) betätigen zu müssen, was nicht selten zur Folge hat, dass sich das ursprüngliche Design der Datei verändert (z Bsp mehr oder weniger Zellen/Zeilen/Spalten), und somit der VBA-Code Fehlerwerte berechnet und diese dann eben auch nicht mehr in die richtigen Zellen schreibt - du verstehst? :-)
Und wenn nun meine neueste Version dieser Datei endlich funktioniert, dann is für die Anderen nix mehr zu tun als "Tabellen-Designer" :-)
Nichts desto trotz hatte ich mich noch mal ca. 30 Minuten erfolglos an dem Problem mit der Variablen versucht, und hab es nun endlich doch gelöst - auf einem anderen Weg :-)
Und zwar so:
Sub ZeileDel()
Dim liZeileHL As Integer, liZeileWS As Integer, lboGefunden As Boolean
Application.EnableEvents = False
ProtectNo
With Sheets("Summary NCEs + LCM")
For liZeileHL = 3 To .Cells(Rows.Count, 26).End(xlUp).Row
lboGefunden = True
For liZeileWS = 3 To Sheets.Count
If .Range("A" & liZeileHL).Hyperlinks(1).Name <> Sheets(liZeileWS).Name Then
lboGefunden = False
Else
lboGefunden = True
Exit For
End If
Next
If lboGefunden = False Then
.Rows(liZeileHL & ":" & liZeileHL).Delete Shift:=xlUp
Exit For
End If
Next
End With
With Sheets("PTS")
For liZeileHL = 3 To .Cells(Rows.Count, 26).End(xlUp).Row
lboGefunden = True
For liZeileWS = 3 To Sheets.Count
If .Range("B" & liZeileHL).Hyperlinks(1).Name <> Sheets(liZeileWS).Name Then
lboGefunden = False
Else
lboGefunden = True
Exit For
End If
Next
If lboGefunden = False Then
.Rows(liZeileHL & ":" & liZeileHL).Delete Shift:=xlUp
If .Cells(Rows.Count, 26).End(xlUp).Row > 3 And .Cells(Rows.Count, 26).End(xlUp).Row < 14 Then
.Rows(.Cells(Rows.Count, 26).End(xlUp).Row + 1 & ":" & .Cells(Rows.Count, 26).End(xlUp).Row + 1).Insert Shift:=xlDown
.Rows(.Cells(Rows.Count, 26).End(xlUp).Row + 1 & ":" & .Cells(Rows.Count, 26).End(xlUp).Row + 1).Interior.ColorIndex = xlNone
Else
If .Cells(Rows.Count, 26).End(xlUp).Row <= 3 Then
.Rows("4:4").Insert Shift:=xlDown
.Rows("4:4").Interior.ColorIndex = xlNone
End If
End If
Exit For
End If
Next
End With
ProtectYes
Application.EnableEvents = True
End Sub
Hier wird nur noch eine Sub und nicht wie vorher 3 Subs benötigt (da hatte ich echt viel zu viel geschrieben..hmm)
Auch ein Array brauche ich nicht mehr.
Ich vergleiche nach demm Löschen eines Sheets die noch vorhandenen mit den ebenso vorhandenen Hyperlink-Adressen, die zu den Sheets verweisen.
Und wenn ich DEN Hyperlink finde, der auf ein nicht vorhandes Sheet verweist, so hab ich auch DIE Zeile gefunden, die gelöscht werden muss.
...und alles wird guuuuuut :-)....
Ciao
Thorsten