Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
604to608
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
604to608
604to608
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

zelle_markieren Code von Hajo Zi.

zelle_markieren Code von Hajo Zi.
04.05.2005 11:48:52
Hajo
Hallo!
Ich stehe vor folgendem Probelem: Ich habe den dankenswerterweise von Hajo auf seiner Homepage zur Verfügung gestellten Code zum Markieren von Zellen (zelle_markieren_mehrere_register_abschalten.zip) in eine meiner Dateien integriert. Meine Datei verfügt über vier Arbeitsblätter, die für den Anwender aufgrund der Visible=True-Anweisung einsehbar und nutzbar sind. Leider erhalte ich beim Wechseln zwischen den Blättern bzw. beim Schließen des Editors ständig den Hinweis "Laufzeitfehler 9, Index außerhalb des gültigen Bereichs". Beim Debuggen wird dann "With Worksheet(StRegister)" in dem "Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)" als der fehlerhafte Code indentifiziert. Die Zellenmarkierung funktioniert aufgrund des Fehlers natürlich nicht. Hat von Euch jemand eine Idee, wie ich den Fehler beheben kann?
Gruß
Thomas L.

18
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: zelle_markieren Code von Hajo Zi.
04.05.2005 11:54:49
Hajo
Hi,
bitte teile uns Deinen Code mit, damit wir nicht alle auf Hajos Homepage müssen. Oder frag ihn direkt, seine Email- Adresse sollte ja auf seiner Seite zu finde sein. Er wird ja am Besten wissen, wie seine Codes funzen.
Gruß- Micha
AW: zelle_markieren Code von Hajo Zi.
04.05.2005 11:55:53
Hajo
*rofl*
AW. zu MichaV
04.05.2005 12:04:27
Thomas
Hallo Micha!
Die Idee mit der Email an Hajo geht leider ins Leere, da er extra darauf hinweist, keine Emails erhalten zu wollen, da alle Probleme im Forum gelöst werden sollen. Deshalb hier zunächst der aus meiner Sicht relevante Code (Hajo's Originalcode in voller Länge steht weiter unten):
Dim BoAktion As Boolean
Dim InOldColorIndex As Integer
Dim StOldRange As String
Dim StRegister As String

Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
If BoAktion = True Then Exit Sub
If TypeName(ActiveSheet) = "Worksheet" Then
With Worksheets(StRegister) DIESE ZEILE WIRD ALS FEHLERQUELLE INDENTIFIZIERT!!
If StOldRange <> "" Then .Range(StOldRange).Interior.ColorIndex = InOldColorIndex
End With
End If
End Sub

Noch eine Anmerkung: Hajo's Beispieldatei verfügt nicht wie meine über vier, sondern nur über zwei Arbeitsblätter. Aufgrund des Fehlerhinweise drängt sich mir der Eindruck auf, dass das Problem in der unterschiedlichen Anzahl der Arbeitsblätter liegt. Allerdings kann ich nicht erkennen, dass Hajo die Anzahl der Blätter vorgegeben hat. Wie dem auch sei, hier Hajo's Originalcode:
DIESE ARBEITSMAPPE
Option Explicit
' erstell von Hajo.Ziplies@web.de 14.12.02
' http://home.media-n.de/ziplies/
' Korrektur 07.06.03, Kommentar, Definition
' der Code ist nur für eine Zelle vorgesehen
' sollten mehere Zellen markiert werden erfolgt kein Markierung
' die letzte Farbe wird erst zurückgesetzt, wenn nur eine Zelle markiert
' Farbformatierungen während der Selektion bleiben erhalten, außer rot
' Abschalten durch Doppelklick
Dim BoAktion As Boolean
Dim InOldColorIndex As Integer
Dim StOldRange As String
Dim StRegister As String

Private Sub Workbook_Open()
'   nach Hinweis von Peter Haserodt Vergleich eingefügt
If TypeName(ActiveSheet) = "Worksheet" Then
StOldRange = ActiveCell.Address
StRegister = ActiveSheet.Name
InOldColorIndex = ActiveCell.Interior.ColorIndex
'        Unprotect "Test"
ActiveCell.Interior.ColorIndex = 3
'        Protect "Test"
End If
End Sub


Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
If BoAktion = True Then Exit Sub
If Target.Count > 1 Then Exit Sub
'   nach Hinweis von Peter Haserodt Vergleich eingefügt
If TypeName(ActiveSheet) = "Worksheet" Then
With ActiveSheet
'            .Unprotect "Test"
'             Falls beim öffnen keine Tabelle aktiv ist StOldRange noch undefiniert
If StOldRange = "" Then
StOldRange = Target.Address
InOldColorIndex = Target.Interior.ColorIndex
'               Setze Hintergrundfarbe der aktiven Selection auf Rot
Target.Interior.ColorIndex = 3
Else
'               Setze alten Range auf alte Farbe
If Range(StOldRange).Interior.ColorIndex = 3 Then
Range(StOldRange).Interior.ColorIndex = InOldColorIndex
End If
InOldColorIndex = Target.Interior.ColorIndex
'               Merke mir aktuellen Adresse für nächsten Aufruf
StOldRange = Target.Address
'               Setze Hintergrundfarbe der aktiven Selection auf Rot
Target.Interior.ColorIndex = 3
End If
'            .Protect "Test"
End With
End If
End Sub


Private Sub Workbook_BeforeClose(Cancel As Boolean)
If BoAktion = True Then Exit Sub
'   nach Hinweis von Peter Haserodt Vergleich eingefügt
If TypeName(ActiveSheet) = "Worksheet" Then
With ActiveSheet
'            .Unprotect "Test"
If StOldRange <> "" Then .Range(StOldRange).Interior.ColorIndex = InOldColorIndex
'            .Protect "Test"
End With
End If
End Sub


Private Sub Workbook_BeforePrint(Cancel As Boolean)
'   falls Farbe beim Druck wieder zurückgestellt werden soll
'   nach Druck ist die aktuelle Zelle nicht markiert
If BoAktion = True Then Exit Sub
'   nach Hinweis von Peter Haserodt Vergleich eingefügt
If TypeName(ActiveSheet) = "Worksheet" Then
With ActiveSheet
'            .Unprotect "Test"
If StOldRange <> "" Then .Range(StOldRange).Interior.ColorIndex = InOldColorIndex
'            .Protect "Test"
End With
End If
End Sub


Private Sub Workbook_SheetActivate(ByVal Sh As Object)
BoAktion = False
'   nach Hinweis von Peter Haserodt Vergleich eingefügt
If TypeName(ActiveSheet) = "Worksheet" Then
StOldRange = ActiveCell.Address
InOldColorIndex = ActiveCell.Interior.ColorIndex
With ActiveSheet
'            .Unprotect "Test"
ActiveCell.Interior.ColorIndex = 3
'            .Protect "Test"
End With
StRegister = ActiveSheet.Name
End If
End Sub


Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
If BoAktion = True Then Exit Sub
'   nach Hinweis von Peter Haserodt Vergleich eingefügt
If TypeName(ActiveSheet) = "Worksheet" Then
With Worksheets(StRegister)
'            .Unprotect "Test"
If StOldRange <> "" Then .Range(StOldRange).Interior.ColorIndex = InOldColorIndex
'            .Protect "Test"
End With
End If
End Sub


Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
BoAktion = Not BoAktion
If BoAktion = True Then
'       nach Hinweis von Peter Haserodt Vergleich eingefügt
If TypeName(ActiveSheet) = "Worksheet" Then
With Worksheets(StRegister)
'                .Unprotect "Test"
If StOldRange <> "" Then .Range(StOldRange).Interior.ColorIndex = InOldColorIndex
'                .Protect "Test"
End With
End If
Else
If TypeName(ActiveSheet) = "Worksheet" Then
With ActiveSheet
'                .Unprotect "Test"
'               Falls beim öffnen keine Tabelle aktiv ist StOldRange noch undefiniert
If StOldRange = "" Then
StOldRange = Target.Address
InOldColorIndex = Target.Interior.ColorIndex
'                   Setze Hintergrundfarbe der aktiven Selection auf Rot
Target.Interior.ColorIndex = 3
Else
'                   Setze alten Range auf alte Farbe
If Range(StOldRange).Interior.ColorIndex = 3 Then
Range(StOldRange).Interior.ColorIndex = InOldColorIndex
End If
InOldColorIndex = Target.Interior.ColorIndex
'                   Merke mir aktuellen Adresse für nächsten Aufruf
StOldRange = Target.Address
'                   Setze Hintergrundfarbe der aktiven Selection auf Rot
Target.Interior.ColorIndex = 3
End If
'                .Protect "Test"
End With
End If
End If
Cancel = True
End Sub

Gruß
Thomas
Anzeige
AW: AW. zu MichaV
04.05.2005 12:06:57
MichaV
Aaaaah Ja.
Ich übergeb dann mal an Hajo, er hat sich ja auch schon gemeldet.
Gruß- Micha
PS: Wer Fehler im Code findet darf sie behalten.
AW: AW. zu MichaV
04.05.2005 12:08:02
Hajo_Zi
Hallo Thomas,
"Die Idee mit der Email an Hajo geht leider ins Leere," das ist nur eine Vermutung von Dir. Ich werde nicht auf meiner HP schreiben, falls jemand Probleme hat soll er mich anmailen. Dann komme ich überhaupt nicht zum Forum. Jeder der mich zu meinen Beispielen auf meiner HP angeschrieben hat hat auch eine Rückmeldung/Lösung erhalten.
Gruß Hajo
Das Forum lebt auch von den Rückmeldungen.

"Wer Rechtschreibfehler findet, darf sie behalten!"
Dies gilt auch für Bert.
Anzeige
AW: AW. zu MichaV
04.05.2005 12:15:53
Thomas
Hallo Hajo!
Sorry, hatte mich auf deinen Standardzusatz am Ende von Emails bezogen und das offensichtlich unzulässigerweise verallgemeinert.
Gruß
Thomas
AW: zelle_markieren Code
04.05.2005 11:59:20
Hajo_Zi
Hallo Thomas,
ich habe es jetzt an der Originaldatei und an der Datei von meiner HP getestet. Ich konnte den Fehler nicht simulieren.
Kannst Du mal genauer schreiben wie Du den FEhler erzeugst!
Was meinst Du mit "Arbeitsblätter, die für den Anwender aufgrund der Visible=True-Anweisung einsehbar und nutzbar sind"
Bitte keine Mail, Probleme sollten im Forum gelöst werden.
Microsoft MVP für Excel
Das Forum lebt auch von den Rückmeldungen.
Betriebssystem Windows 2000 SP4 und Excel Version 2000 SP3.



"Wer Rechtschreibfehler findet, darf sie behalten!"
Dies gilt auch für Bert.
Anzeige
AW. an Hajo_Zi
04.05.2005 12:12:43
Thomas
Hallo Hajo!
Den Fehler generiere ich, indem ich zwischen den einzelnen Arbeitsblättern wechsel und wahllos auf ein paar Zellen klicke. Während die ersten paar Wechsel zwischen den Arbeitsblättern und das Markieren gut funktioniert, erscheint beim x-ten Wechsel zwischen den Blättern plötzlich der Laufzeitfehler '9', Index außerhalb des gültigen Bereichs.
Mit dem Visible = True-Hinweis wollte nicht nur darauf aufmerksam machen, dass meine Datei eigentlich über insgesamt sechs Arbeitsblätter verfügt, von denen aber zwei mit xlVeryHidden verborgen wurden.
Gruß
Thomas
AW: AW. an Hajo_Zi
04.05.2005 12:21:33
Hajo_Zi
Hallo Thomas,
die Tabellen mit xlVeryHidden ausgeblendet wurden, sind unintressant da nicht Sichtbar/auswählbar.
Ich habe jetzt nur festgestellt das die Zelle nicht die alte Farbe erhält falls der Wechsel zwischen den Tabellen mittels Hyperlink erfolgt.
Dein Fehler konnte ich immer noch nicht simuliere. Ich habe ca. 20 mal in die einzelnen Tabellen geklickt.
Hast Du Excel schon mal geschlossen?
Hast Du mal den Rechner neu gestartet?
Also solange ich den Fehler nicht simulieren kann ist es auch schlecht mit Fehlersuche.
Gruß Hajo
Das Forum lebt auch von den Rückmeldungen.

"Wer Rechtschreibfehler findet, darf sie behalten!"
Dies gilt auch für Bert.
Anzeige
AW: zelle_markieren Code
04.05.2005 12:17:51
Thomas
Hallo Hajo!
Falls es die Sache vereinfacht, kann ich dir auch gerne meine komplette Datei zur Verfügung stellen.
Gruß
Thomas
AW: zelle_markieren Code
04.05.2005 12:24:15
Hajo_Zi
Hallo Thomas,
intensiv kann ich mir das erst am Abend ansehen. Falls wir bis 15:00 Uhr keine Lösung finden, dann kannst Du mir auch Deine Datei schicken.
Gruß Hajo
Das Forum lebt auch von den Rückmeldungen.

"Wer Rechtschreibfehler findet, darf sie behalten!"
Dies gilt auch für Bert.
Anzeige
AW: zelle_markieren Code
04.05.2005 12:30:18
Thomas
Hallo Hajo!
Ich habe Excel geschlossen und die Datei neu gestartet. Beim Starten kommt erneut der Fehlerhinweis "Laufzeitfehler '9'". Als einzige Option bleibt mir dann im Fenster der Fehlermeldung auf "Beenden" zu klicken. Danach wird mir nur eines der eigentlich vier Arbeitsblätter angezeigt. Aus letzterem schließe ich, dass ich den Code in den Subs Workbook_BeforeClose und / oder Workbook_Open() nicht richtig implementiert habe. Allerdings verstehe ich dann nicht, warum bei mir auch beim Wechseln zwischen Arbeitsblättern (als mir noch alle angezeigt wurden) der Laufzeitfehler angezeigt wurde. Du merkst, ich bin ratlos.
Gruß
Thomas
Anzeige
AW: zelle_markieren Code
04.05.2005 12:46:09
Hajo_Zi
Hallo Thomas,
ich bin davon ausgegangen das der Code an der richtigen Stelle ist. Unter DieseArbeitsmappe.
Schicke mal die Datei, vielleicht kann ich es noch zwischen schieben.
Gruß Hajo
Das Forum lebt auch von den Rückmeldungen.

"Wer Rechtschreibfehler findet, darf sie behalten!"
Dies gilt auch für Bert.
Anzeige
AW: zelle_markieren Code
04.05.2005 14:10:22
Thomas
Hallo Hajo!
War gerade zu Tisch und antworte daher erst jetzt. Schicke dir die Datei gleich per Email zu.
Gruß
Thomas
AW: zelle_markieren Code
04.05.2005 14:14:41
Thomas
Hallo Hajo!
Habe deine Email-Adresse nicht finden können. Kannst du Sie mir bitte mitteilen?
Danke
Thomas
AW: zelle_markieren Code
04.05.2005 14:28:15
Hajo_Zi
Hallo Thomas,
sie steht im Code. Mein Internetzugang ist aber zur Zeit gestört. So das es nun doch bis Abend warten muß.
Gruß Hajo
Das Forum lebt auch von den Rückmeldungen.

"Wer Rechtschreibfehler findet, darf sie behalten!"
Dies gilt auch für Bert.
Anzeige
AW: zelle_markieren Code
04.05.2005 14:34:16
Thomas
Hallo Hajo!
Vielen Dank für den Hinweis. Schicke ich gleich raus.
Gruß
Thomas
AW: zelle_markieren Code
04.05.2005 16:33:42
Hajo_Zi
Hallo Thomas,
Du hast was entscheidenes in Deiner Fragestellung vergessen. Es ist nicht der unveränderte Code der nicht läuft, sonder die hast den Code ergänzt. Erst dadurch wird der Fehler ausgelöst.
Vielleicht reicht folgende Veränderung.
Application.EnableEvents = False
Makro9
Application.EnableEvents = True
Gruß Hajo
Das Forum lebt auch von den Rückmeldungen.

"Wer Rechtschreibfehler findet, darf sie behalten!"
Dies gilt auch für Bert.
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige