Live-Forum - Die aktuellen Beiträge
Datum
Titel
16.10.2025 17:40:39
16.10.2025 17:25:38
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA-Code funktioniert nicht jedesmal

Forumthread: VBA-Code funktioniert nicht jedesmal

VBA-Code funktioniert nicht jedesmal
WalterK
Hallo,
ich stelle mein Problem nochmals ein, vielleicht gibt es doch noch ein Lösung.
Den untenstehenden Code habe ich im Forum erhalten. Er ermöglicht mir das blockweise scrollen in Tabellen, die ich mehrmals täglich erhalte. Damit mir der Code immer zur Vergügung steht, habe ich ihn in der Personl.xls hinterlegt, er wird über eine in einer Symbolleiste angelegte Schaltfläche aktiviert.
Das Problem ist, dass der Code über die Personl.xls nur jedes 2. Mal funktioniert. Jedes andere Mal kommt der Debugger, es ist dann die Zeile booGoErste = Intersect(rngAktuell, rngVisibleRange) Is Nothing gelb markiert und es wird der Fehler "Laufzeitfehler 1004: Die Methode Intersect für das Objekt _Global ist fehlgeschlagen angezeigt.
Wenn ich den Code direkt in die Arbeitsmappe kopiere dann funktioniert er jedesmal. Er sollte aber über die Personl.xls fehlerfrei laufen.
Wer kann mir bei meinem Problem weiterhelfen?
Hier noch der Code und eine Arbeitsmappe:
Option Explicit
Sub Tabellescrollen()
Dim rngVisibleRange As Range
Dim lngLetzte As Long, nCount As Long
Dim booGoErste As Boolean
Dim LCol As Integer
LCol = Cells(2, Columns.Count).End(xlToLeft).Column
Static rngAktuell As Range
Set rngVisibleRange = Range("A3", Cells(Rows.Count, 1)).SpecialCells(xlCellTypeVisible)
booGoErste = rngAktuell Is Nothing
If Not booGoErste Then
booGoErste = Intersect(rngAktuell, rngVisibleRange) Is Nothing
End If
If booGoErste Then
Set rngAktuell = rngVisibleRange
Set rngAktuell = rngAktuell.Cells(1, 1)
Application.Goto rngAktuell, True
Exit Sub
End If
lngLetzte = Cells(Rows.Count, 1).End(xlUp).Row
nCount = rngAktuell.Row + 1
Do While rngAktuell.Row  lngLetzte Then
Set rngAktuell = Range("A3", Cells(Rows.Count, 1)).SpecialCells(xlCellTypeVisible)
Set rngAktuell = rngAktuell.Cells(1, 1)
' rngAktuell ist die erste Zelle des blocks
Application.Goto rngAktuell, True
End If
Range(Cells(3, 1), Cells(65536, 3)).Interior.ColorIndex = xlNone
Range(Cells(3, 5), Cells(65536, LCol)).Interior.ColorIndex = xlNone
Dim LoJ As Long
For LoJ = rngAktuell.Row To lngLetzte
If Cells(LoJ, 1)  rngAktuell.Value Then Exit For
Next LoJ
Range(Cells(rngAktuell.Row, 1), Cells(LoJ - 1, 3)).Interior.Color = 16764108
Range(Cells(rngAktuell.Row, 5), Cells(LoJ - 1, LCol)).Interior.Color = 16764108
End Sub
https://www.herber.de/bbs/user/71318.xls
Danke und Servus, Walter
Anzeige
AW: VBA-Code funktioniert nicht jedesmal
31.08.2010 08:15:36
Hajo_Zi
Hallo Walter,
die Variable rngAktuell wird vor diesen Aufruf nicht gesetzt.

AW: VBA-Code funktioniert nicht jedesmal
31.08.2010 08:37:16
WalterK
Hallo Hajo,
danke fuer Deine Hilfe!
Wie kann man den Fehler beheben?
Danke und Servus, Walter
Vergessen auf offen zu stellen
31.08.2010 08:38:39
WalterK
Anzeige
AW: VBA-Code funktioniert nicht jedesmal
31.08.2010 08:41:11
Hajo_Zi
Hallo Walter,
ganz einfach setze die Variable. Ich habe keine Ahnung was darauf soll, da bist Du besser drin es ist ja Dein Code.

AW: VBA-Code funktioniert nicht jedesmal
31.08.2010 08:53:00
Hajo_Zi
Hallo Walter,
ich habe das Makro jetzt in der Personl.xls abgelegt und mehrmals gestartet ohne Probleme. Also ist der Code so wohl in Ordnung.
Gruß Hajo
Anzeige
AW: VBA-Code funktioniert nicht jedesmal
31.08.2010 09:47:30
WalterK
Hallo Hajo,
Komische Sache. Habe den Code auch noch mehrmals getestet und er funktioniert wie beschrieben nur jedes 2. Mal. Dann werd ich eben damit zufrieden sein müssen.
Danke Dir jedenfalls für Deine Mühe.
Servus, Walter
AW: VBA-Code funktioniert nicht jedesmal
31.08.2010 09:51:09
Hajo_Zi
Hallo Walter,
vielleicht solltest Du beschreiben wie Du das testest, Du sscheinst da was anders zu machen als ich oder Deine Datei sieht anders aus als meine, was sicher so ist. Da ich es in einer leeren Datei geprüft habe.

Anzeige
AW: VBA-Code funktioniert nicht jedesmal
31.08.2010 10:32:39
WalterK
Hallo Hajo,
Kurze Beschreibung zu meinen Test's:
1.) Ich öffne die Datei, klicke auf die Schaltfläche, der Code funktioniert einwandfrei und schließe die Datei ohne zu speichern.
2.) Ich öffne die gleiche Datei wieder, klicke auf die Schaltfläche und es kommt der Debugger. Ich schließe das VBA-Fenster, bestätige mit OK und klicke wieder auf die Schaltfläche. Der Code läuft jetzt wieder normal weiter. Dann schließe ich die Datei wieder ohne speichern.
3.) wie Punkt 1
4.) wie Punkt 2 und usw. usw.
Ich habe die Datei und den angezeigten Fehler nochmals hochgeladen.
https://www.herber.de/bbs/user/71322.xls
Danke uns Servus, Walter
Anzeige
AW: VBA-Code funktioniert nicht jedesmal
31.08.2010 10:37:44
Hajo_Zi
Hallo Walter,
Ich interpretiere Deine Datei mal jetzt so: Du willst keine Hilfe von mir. Ich kann damit leben.
Du schreibst ich klicke den Schalter und die Datei hat keinen Schalter. Also hast Du eine Datei hochgeladen die nicht mit Deinem Beitrag übereinstimmt.

Anzeige
AW: VBA-Code funktioniert nicht jedesmal
31.08.2010 10:56:40
WalterK
Hallo Hajo,
Mein Fehler! Ich hätte schreiben sollen: Ich klicke auf die Schaltfläche in der Symbolleiste ... (so wie ich es in meinem 1. Beitrag auch geschrieben habe).
In der Datei selbst ist keine Schaltfläche.
Servus, Walter
;
Anzeige
Anzeige

Infobox / Tutorial

VBA-Code für blockweises Scrollen in Excel optimieren


Schritt-für-Schritt-Anleitung

  1. Öffne Excel und gehe zu deiner Personal.xls-Datei.

  2. Füge den folgenden VBA-Code in ein Modul ein:

    Sub Tabellescrollen()
       Dim rngVisibleRange As Range
       Dim lngLetzte As Long, nCount As Long
       Dim booGoErste As Boolean
       Dim LCol As Integer
       LCol = Cells(2, Columns.Count).End(xlToLeft).Column
       Static rngAktuell As Range
       Set rngVisibleRange = Range("A3", Cells(Rows.Count, 1)).SpecialCells(xlCellTypeVisible)
       booGoErste = rngAktuell Is Nothing
       If Not booGoErste Then
           booGoErste = Intersect(rngAktuell, rngVisibleRange) Is Nothing
       End If
       If booGoErste Then
           Set rngAktuell = rngVisibleRange
           Set rngAktuell = rngAktuell.Cells(1, 1)
           Application.Goto rngAktuell, True
           Exit Sub
       End If
       lngLetzte = Cells(Rows.Count, 1).End(xlUp).Row
       nCount = rngAktuell.Row + 1
       Do While rngAktuell.Row < lngLetzte
           Set rngAktuell = Range("A3", Cells(Rows.Count, 1)).SpecialCells(xlCellTypeVisible)
           Set rngAktuell = rngAktuell.Cells(1, 1)
           Application.Goto rngAktuell, True
       End If
       Range(Cells(3, 1), Cells(65536, 3)).Interior.ColorIndex = xlNone
       Range(Cells(3, 5), Cells(65536, LCol)).Interior.ColorIndex = xlNone
       Dim LoJ As Long
       For LoJ = rngAktuell.Row To lngLetzte
           If Cells(LoJ, 1) <> rngAktuell.Value Then Exit For
       Next LoJ
       Range(Cells(rngAktuell.Row, 1), Cells(LoJ - 1, 3)).Interior.Color = 16764108
       Range(Cells(rngAktuell.Row, 5), Cells(LoJ - 1, LCol)).Interior.Color = 16764108
    End Sub
  3. Erstelle eine Schaltfläche in der Symbolleiste, um das Makro zu aktivieren.


Häufige Fehler und Lösungen

  • Laufzeitfehler 1004: Wenn du den Fehler „Die Methode Intersect für das Objekt _Global ist fehlgeschlagen“ erhältst, stelle sicher, dass die rngAktuell-Variable korrekt gesetzt ist. Du kannst das durch einen Debugger überprüfen oder initialisieren, bevor du den Code ausführst.

  • Jedes zweite Mal funktioniert der Code nicht: Dies kann daran liegen, dass die rngAktuell-Variable nicht korrekt aktualisiert wird. Stelle sicher, dass sie beim ersten Aufruf gesetzt wird.


Alternative Methoden

Falls der VBA-Code nicht funktioniert, kannst du auch die Tastenkombinationen in Excel verwenden, um zwischen sichtbaren Zellen zu navigieren. Mit Alt + ; kannst du die nächste sichtbare Zelle auswählen, nachdem du einen Bereich markiert hast.


Praktische Beispiele

  1. Testen des Codes: Öffne die Datei, klicke auf die Schaltfläche, und vergewissere dich, dass der Code beim ersten Mal funktioniert. Falls nicht, schließe die Datei und öffne sie erneut ohne zu speichern.

  2. Anpassungen: Du kannst den Code anpassen, um die farblichen Markierungen zu ändern oder die Startzelle für das Scrollen zu variieren.


Tipps für Profis

  • Nutze Fehlerbehandlungsroutinen im VBA, um den Code robuster zu machen. Zum Beispiel:

    On Error GoTo Fehlerbehandlung
    ' Dein Code hier
    Exit Sub
    Fehlerbehandlung:
    MsgBox "Ein Fehler ist aufgetreten: " & Err.Description
  • Überprüfe deine Excel-Version. Der Code wurde in Excel 2016 getestet und funktioniert in neueren Versionen ebenfalls.


FAQ: Häufige Fragen

1. Warum funktioniert mein Code nicht in der Personal.xls? Das Problem könnte an der initialen Setzung der rngAktuell-Variable liegen. Stelle sicher, dass diese korrekt gesetzt wird, bevor du sie verwendest.

2. Kann ich den Code auch in einer anderen Arbeitsmappe verwenden? Ja, du kannst den Code in jede Arbeitsmappe einfügen, aber achte darauf, dass die entsprechenden Zellen vorhanden sind, die der Code erwartet.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige