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

Blockweise scrollen - Ergänzung

Blockweise scrollen - Ergänzung
WalterK
Hallo,
vor einiger Zeit habe ich hier im Forum einen Code erhalten mit dem ich blockweise scrollen kann. Läuft tadellos.
Jetzt geht es noch darum, dass sich jeweils die Zellen des Blockes, der sich aktuell unmittelbar unter der Zeile 2 befindet, farblich hinterlegt und die Zellen umrahmt werden.
Hier ist der Code, habe auch noch die Tabelle hochgeladen:
Option Explicit
Sub Test()
Dim rngVisibleRange As Range
Dim lngLetzte As Long, nCount As Long
Dim booGoErste As Boolean
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)
Application.Goto rngAktuell, True
End If
End Sub
https://www.herber.de/bbs/user/71212.xls
Kann mir jemand weiterhelfen?
Besten Dank und Servus, Walter
AW: Blockweise scrollen - Ergänzung
23.08.2010 21:22:29
Hajo_Zi
Hallo Walter,
hier mal der Ansatz für die Farbe. Rahmen war mir zu aufwendig.
Option Explicit
Sub Test()
Dim rngVisibleRange As Range
Dim lngLetzte As Long, nCount As Long
Dim booGoErste As Boolean
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
Cells.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, 4)).Interior.Color = 65535
End Sub


Anzeige
AW: Blockweise scrollen - Ergänzung
23.08.2010 21:47:43
WalterK
Hallo Hajo,
schaut schon sehr gut aus, besten Dank für Deine Hilfe.
Zwei Fragen habe ich doch noch:
1.) Es sind unterschiedlich viele Spalten vorhanden. Kann man die Farbe an die Anzahl der belegten Spalten angleichen? Man könnte dafür auch die Zeile 2 hernehmen.
2.) Wo kann ich die Farbe ändern?
Danke und Servus, Walter
AW: Blockweise scrollen - Ergänzung
23.08.2010 22:58:42
WalterK
Hallo,
Die 2. Frage hat sich erledigt, die Farbe wird bei Interior.Color geändert.
Frage 1 bleibt allerdings:
1.) Es sind unterschiedlich viele Spalten vorhanden. Kann man die Farbe an die Anzahl der belegten Spalten angleichen? Man könnte dafür auch die Zeile 2 hernehmen.
Neue 2. Frage:
2.) Beim Testen habe ich bemerkt, dass jetzt in Zeile 1 und 2 die Hintergrundfarben herausgenommen werden, das sollte nicht sein.
Danke und Servus, Walter
Anzeige
zu 2.)
24.08.2010 07:58:10
Matthias
Hallo Walter
Ersetze folgende Zeile:
      Cells.Interior.ColorIndex = xlNone
durch diese Zeile:
      Range(Cells(3, 1), Cells(65536, 4)).Interior.ColorIndex = xlNone
Gruß Matthias
Jetzt fehlt nur noch Punkt 1
24.08.2010 08:18:25
WalterK
Hallo Matthias,
Besten Dank, es funktioniert.
Vielleicht gibt es ja zum 1. Punkt auch noch eine Lösung, mal abwarten.
Servus, Walter
Und gleich noch eine Frage ...
24.08.2010 09:18:27
WalterK
Hallo,
... beim testen habe ich festgestellt, dass der Code bei der Zeile
booGoErste = Intersect(rngAktuell, rngVisibleRange) Is Nothing
abbricht, wenn die aktive Zelle nicht die der erste sichtbare Zelle in Spalte A unter der Zeile 2 ist.
Gibt es auch dafür eine Lösung?
Besten Dank und Servus, Walter
Anzeige
sorry zu 1.) oT
24.08.2010 09:37:33
Matthias
Letzte Frage noch offen ...
24.08.2010 09:55:18
WalterK
Hallo Matthias,
ok, das habe ich jetzt auch geschafft. Danke Dir!
Bleibt als letztes noch die Sache mit der aktiven Zelle.
Hier nochmals meine Frage:
Beim testen habe ich festgestellt, dass der Code bei der Zeile
booGoErste = Intersect(rngAktuell, rngVisibleRange) Is Nothing
abbricht, wenn die aktive Zelle nicht die der erste sichtbare Zelle in Spalte A unter der Zeile 2 ist.
Danke uns Servus, Walter
Anzeige
kann ich nicht nachvollziehen ...
24.08.2010 10:46:52
Matthias
Hallo Walter
Wenn ich eine beliebige Zelle aktiviere und den Button drücke
gibt es (bei mir jedenfalls) keine Probleme.
Vielleicht lädst Du nochmal die aktuelle Version hoch, damit man das an Deiner OrginalDatei testen kann.
Ich konnte jedenfalls keinen Abbruch erzeugen.
Gruß Matthias
Ich habe jetzt eine...
24.08.2010 14:56:34
WalterK
Hallo Matthias,
.. Beispieldatei erstellt und einiges durchgetestet.
Zur Erklärung: Ich habe den Code in der Personl.xls hinterlegt und mir eine eigene Schaltfläche erstellt. Dies deshalb, weil ich diverse Tabellen erhalte und mir so der Code jederzeit zur Verfügung steht.
Jetzt zu meinen Tests mit dieser Beispieldatei: Zu Testzwecken habe ich den Code auch noch in die Tabelle1 kopiert. Wenn ich den Code in die Tabelle1 kopiere und von dort aus aktiviere dann kommt nie ein Fehler.
Wenn ich den Code über die eigens erstellte Schaltfläche über die Personl.xls aktiviere dann kommt manchmal der Fehler und die Zeile booGoErste = Intersect(rngAktuell, rngVisibleRange) Is Nothing wird gelb angezeigt. Und das unverständliche daran ist, dass der Fehler nur bei jedem 2. Mal kommt. Das heißt, kommt der Fehler im Code dann beende ich die Datei ohne Speichern und beim nächsten Mal kommt kein Fehler. Beende ich die Datei wieder ohne Speichern, dann kommt bei nächsten Mal wieder der Fehler.
Bin schon gespannt was da schief läuft.
https://www.herber.de/bbs/user/71236.xls
Danke und Servus, Walter
Anzeige
warum ...
25.08.2010 07:51:01
Matthias
Hallo Walter
... deklarierst Du LCol, wenn Du es dann
hier:
Range(Cells(3, 1), Cells(65536, 4)).Interior.ColorIndex = xlNone
nicht benutzt?
Ob ich das jetzt mit der Personl.xls ausprobiere weiß ich noch nicht ( deshalb noch "offen" )
Gruß Matthias
AW: das hatte ich glatt übersehen ...
25.08.2010 08:16:00
WalterK
Hallo Matthias,
.... danke für den Tipp, ist schon geändert.
Servus, Walter
was passiert ...
25.08.2010 17:21:43
Matthias
Hallo
... wenn Du Deine Mappe ohne Makros zu aktivieren öffnest?
Läuft der Code dann über die Schaltfläche der Personl.xls ohne Probleme?


Ich habe jetztmal das Makro dahingehend geändert, das wenigstens das ActiveSheet referenziert ist.
Nur in der Personl.xls
Durch With ... habe ich nun vor jedem Range() und Cells() einen Punkt .
Option Explicit
Sub Walter()
Dim rngVisibleRange As Range
Dim lngLetzte As Long, nCount As Long
Dim booGoErste As Boolean
Dim LCol As Integer
On Error Resume Next 'bei Fehler weiter ... (wg. Intersect)
With ActiveSheet
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 .Cells(nCount, 1), rngVisibleRange) Is Nothing Then
If rngAktuell = .Cells(nCount, 1) Then
nCount = nCount + 1
Else
Set rngAktuell = .Cells(nCount, 1)
Application.Goto rngAktuell, True
Exit Do
End If
Else
nCount = nCount + 1
End If
Loop
If nCount > lngLetzte Then
Set rngAktuell = .Range("A3", .Cells(Rows.Count, LCol)). _
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, 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, LCol)).Interior.Color = 16764108
End With
End Sub
Und bei mir läufts, egal ob ich den Button der Datei benutze oder die Schaltfläche der Personl.xls
Gruß Matthias
Anzeige
auch mit dem geänderten Code ...
25.08.2010 18:36:23
WalterK
Hallo Matthias,
... funktioniert das ganze nur jedes 2. Mal!
Zuerst möchte ich mich rechts herzlich bedanken, dass für mein Anliegen so viel Zeit aufgewendet wird.
Zu meinen Test's, wobei ich immer die Beispieldatei verwendet habe:
Es ist nach wie vor so, dass jedes 2. Mal der Code über die Personl.xls durchläuft und bestens funktioniert. Jedes andere Mal hingegen schmiert Excel ab (mit dem "alten" Code kam der Debugger) und kann dann nur mit dem Taskmanager beendet werden. Es spielt dabei auch keine Rolle, ob die Datei mit oder ohne Makros aktivieren geöffnet wird.
Da die Hintergrundfarbe nur eine zusätzliche kosmetische Sache gewesen wäre (ansonsten funktioniert der Code ja wie gewollt) und ich auch ohne Farben mit dem Ergebnis zufrieden bin, möchte ich Euch nicht überstrapazieren und stelle die Frage daher nicht mehr auf offen.
Besten Dank jedenfalls für Eure/Deine Mühe und Servus, Walter
Anzeige
AW: Blockweise scrollen - Ergänzung
24.08.2010 15:14:14
Gerd
Hallo Walter,
ich habe mir 's jetzt nicht angeschaut. So als freiändiger Versuch.
Schreibe mal als erste Codezeile, also gleich nach den Dim-Anweisungen
ActiveCell.Activate
Gruß Gerd
AW: Blockweise scrollen - Ergänzung
24.08.2010 15:22:48
WalterK
Hallo Gerd,
Habe ich jetzt versucht, hat aber am Ergebnis nichts geändert. Nach wie vor kommt jedes 2. Mal der Fehler.
Servus, Walter

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige