Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1760to1764
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
"sanftes" scrollen?
29.05.2020 12:35:48
Fred

Hallo Excel,- VBA Experten,
ich muss auf einem Tabellenblatt öfter in die ersten Zeilen der 240. Spalte. Das erreiche ich so
ActiveWindow.ScrollRow = 1
ActiveWindow.ScrollColumn = 240

Meine Frage;
Kann man mit vba ein sanfteres scrollen generieren?
Gruss
Fred

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: "sanftes" scrollen?
29.05.2020 13:14:54
MCO
Hallo Fred!
Versuch das mal.
Die Zielspalte hab ich erstmal klein gelassen zum Testen, die "Scroll-Geschwindigkeit" wird mit der Höhe der Variable "z" verändert.
    zielzeile = 1
zielspalte = 35
zeilensprung = 1
spaltensprung = 1
Range("a40").Select
Do
If ActiveCell.Row = zielspalte Then spaltensprung = 0
ActiveWindow.SmallScroll , zeilensprung, spaltensprung
ActiveCell.Offset(-(zeilensprung), spaltensprung).Activate
For Z = 1 To 80
Debug.Print Z
Next Z
Loop While zeilensprung + spaltensprung > 0
Gruß, MCO
AW: "sanftes" scrollen?
29.05.2020 14:46:04
Fred
Hallo Volti und MCO,
danke für eure Code-Beispiele!
an beiden vba's bin ich noch am werkeln um die für meinen Laptop richtigen Einstellungen zu finden,- später am PC.
Von ersten Versuchen gefällt mir MCO's VBA etwas besser.
Frage;
Wie muss ich den Code ändern, wenn ich von Zeile 1, Spalte 240 nach Spalte 1 kommen will, MCO ?
Gruß
Fred
Anzeige
AW: "sanftes" scrollen?
29.05.2020 16:36:15
fcs
Hallo Fred,
hier noch zwei Varianten, die im Prinzip die gleichen Ideen beinhalten, wie die anderen,
jedoch werden die anzuscrollenden Werte und Wartezeiten von einem Hauptmakro an eine Subroutine übergeben.
So kannst du dann auch einfach durch erneuten Aufruf mit anderen Parametern die Spalte 1 ansteuern.
LG
Franz

Sub scroll_1_to_Z1S240()
'Nach Zeile 1, Spalte 240 scrollen
Call fncScroll_1(Zeile:=1, Spalte:=240, _
DeltaZeile:=10, _
DeltaSpalte:=5, _
dblSekunden:=0.1)
'von Spalte 240 nach Spalte 1 scrollen
Call fncScroll_1(Zeile:=1, Spalte:=1, _
DeltaZeile:=1, _
DeltaSpalte:=1, _
dblSekunden:=0.1)
End Sub
Function fncScroll_1(Zeile As Long, Spalte As Long, _
DeltaZeile As Long, _
DeltaSpalte As Long, _
Optional dblSekunden As Double = 0.01) As Boolean
'Zeile  = Zielzeile für das Scrollen
'Spalte = Zielspalte für das Scrollen
'DeltaZeile = Spaltenverschiebung je Scroll
'DeltaSpalte = Zeileverschiebung je Scroll
'dblSekunden = Wartezeit in Sekunden zwischen Scrolls
Dim Spa As Long, Zei As Long
Dim bolSpa As Boolean, bolZei As Boolean
Dim dblTime
Zei = ActiveWindow.VisibleRange.Row
bolZei = Zeile > Zei
DeltaZeile = DeltaZeile * IIf(bolZei, 1, -1)
Spa = ActiveWindow.VisibleRange.Column
bolSpa = Spalte > Spa
DeltaSpalte = DeltaSpalte * IIf(bolSpa, 1, -1)
Do
Zei = Zei + DeltaZeile
Spa = Spa + DeltaSpalte
If (bolZei = True And Zei > Zeile) _
Or (bolZei = False And Zei  Spalte) _
Or (bolSpa = False And Spa  dblSekunden Then Exit Do
Loop
Loop
End Function
Sub scroll_2_to_Z1S240()
Call fncScroll_2(Zeile:=1, Spalte:=240, _
AnzahlScrolls:=5, _
dblSekunden:=0.3)
End Sub
Function fncScroll_2(Zeile As Long, Spalte As Long, _
AnzahlScrolls As Long, _
Optional dblSekunden As Double = 0.01) As Boolean
'Zeile  = Zielzeile für das Scrollen
'Spalte = Zielspalte für das Scrollen
'dblSekunden = Wartezeit in Sekunden zwischen Scrolls
Dim Spa As Long, Zei As Long
Dim bolSpa As Boolean, bolZei As Boolean
Dim DeltaZeile As Long 'Spaltenverschiebung je Scroll
Dim DeltaSpalte As Long 'Zeileverschiebung je Scroll
Dim dblTime
Zei = ActiveWindow.VisibleRange.Row
bolZei = Zeile > Zei
DeltaZeile = Application.WorksheetFunction.Max(1, CLng(Abs(Zeile - Zei) / _
AnzahlScrolls)) * IIf(bolZei, 1, -1)
Spa = ActiveWindow.VisibleRange.Column
bolSpa = Spalte > Spa
DeltaSpalte = Application.WorksheetFunction.Max(1, CLng(Abs(Spalte - Spa) / _
AnzahlScrolls)) * IIf(bolSpa, 1, -1)
Do
Zei = Zei + DeltaZeile
Spa = Spa + DeltaSpalte
If (bolZei = True And Zei > Zeile) _
Or (bolZei = False And Zei  Spalte) _
Or (bolSpa = False And Spa  dblSekunden Then Exit Do
Loop
Loop
End Function

Anzeige
Danke Franz
30.05.2020 11:41:15
Fred
Hallo Franz,
danke für den Code. Ich bilde mir ein, dass das Ergebnis mit deinem Code etwas besser ist als über MCO's VBA. Das Scrollen geschieht etwas weicher, smooth.
Danke für deine Mühe!
Gruss
Fred
AW: "sanftes" scrollen?
04.06.2020 09:11:42
MCO
Sorry, der Beitrag war nicht mehr offen, daher hab ich das nicht bemerkt. Und andere Helfer auch nicht...
Dann muss es heißen
 spaltensprung = -1
Gruß, MCO
AW: "sanftes" scrollen?
29.05.2020 14:06:55
volti
Hallo Fred,
hier noch 'ne Idee.

Option Explicit
Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Sub ScrollMe()
 Dim i As Integer, j As Integer, iSteps As Integer
 Dim yDiff As Double, xDiff As Double, SC As Double, SR As Double
 iSteps = 10
 On Error Resume Next
 With ActiveWindow
  yDiff = (.ScrollRow - 1) / iSteps
  xDiff = (240 - .ScrollColumn) / iSteps
  SR = .ScrollRow
  SC = .ScrollColumn
  For i = 1 To iSteps
    Sleep (1000 \ iSteps)        'Eine Sekunde
    If SR > 1 Then SR = SR - yDiff
    If xDiff > 0 Then
     If SC < 240 Then SC = SC + xDiff
    Else
     If SC > 240 Then SC = SC - xDiff
    End If
    .ScrollRow = Int(SR)
    .ScrollColumn = Int(SC)
    DoEvents
  Next i
  .ScrollRow = 1
  .ScrollColumn = 240
 End With
End Sub

viele Grüße
Karl-Heinz

Anzeige

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige