bluelines
Goto Top

VBA - Scroll Ereignis für Tabellenblatt um Combobox zu beeinflussen

Hallo an alle

Ich hoffe ihr könnt mir helfen. Ich habe ein Tabellenblatt in dem ich in Zeile 6 ab Spalte AJ Datumsangaben vom 1.1.18 bis zum 31.12.18 habe, nach jedem Monat sind noch ein paar Berechnugsspalten dazwischen. Jeder Monat hat einen Bereichsnamen bekommen „Jänner „ bis „Dezember“.

Auf dem Tabellenblatt ist eine Combobox die beim Mappen Start ebenfalls mit den Monatsbezeichnungen gefüllt wird und bei Auswahl eines Monats Scrollt die Tabelle vor bis zum ersten des gewählten Monats über
Case "Dezember_19"  
                     Application.Goto Reference:=Worksheets("Aktuelles Jahr") _  
                     .Range(Cells(lngZielZeile, Range(Auswahl).Column).Address), Scroll:=True
das passt ja auch soweit.

Mein Problem besteht drin, das wenn ich das Tabellenblatt über Pfeiltasten oder Bildlaufleiste selbst verschiebe, nach links oder rechts. Dann gelange ich zum nächsten Monat bspw. vom Februar in den März aber in der Combobox steht noch immer Februar.

Ich bin auf der Suche nach einer Möglichkeit den richtigen Monat in der Combobox anzuzeigen. Eine Art Scroll Ereignis so das wenn 70 % des nächsten angrenzenden benannten Bereiches im Bild ist der Text der Combobox sich ändert auf den nächsten Wert. Oder sich zumindest Löscht damit nicht der Falsche Monat dort steht.

Hat da jemand eine Idee? oder noch besser ein komentiertes Beispiel wie man das macht.

Grüße
Blue

Content-ID: 394694

Url: https://administrator.de/contentid/394694

Ausgedruckt am: 22.11.2024 um 19:11 Uhr

BlueLines
BlueLines 05.12.2018 um 06:53:51 Uhr
Goto Top
Hallo, kleines Update

Meine Frag ist im begriff sich zu erledigen; wirft aber ne neue frage auf:

In Excel scheint es keine direkte Möglichkeit zu geben ein Makro auszulössen wenn der anwender in einem Tabellenblatt Scrolt. Jedoch lässt sich mit:
ActiveWindow.ScrollColumn
die erste auf dem Bildschirm sichtbare spalte ermittelnund mit:
ActiveWindow.VisibleRange.Columns.Count
Gibt die letzte Spalte des sichtbaren Bereichs aus. Ist aber dann die wo man dann auch ev. nur die hälfte davon sehen kann. Je nach breite der Spalten.

Bei mir haben die benannten Bereiche so um die 40 Spalten immer neben einander der Bereich August geht zbsp. von spalte 323 bis 363. Daraus lässt sich die ungefähre Scrollposition glaub ich ermitteln.

Weis vielleicht jemand ob es sehr Arbeitsspeicher intensiv ist wenn ich
ActiveWindow.ScrollColumn
ActiveWindow.VisibleRange.Columns.Count
Aufrufe. Eine andere Möglichkeit sehe ich grade nicht.

Grüße Blue
137846
Lösung 137846 05.12.2018 aktualisiert um 11:34:17 Uhr
Goto Top
http://www.cpearson.com/excel/DetectScroll.htm
Oder ohne DLL was zumindest beim SelectionChange funktioniert
https://we.tl/t-DiNOoyMrAP
BlueLines
BlueLines 07.12.2018 um 05:32:08 Uhr
Goto Top
Danke für die Bsp. Datei und den Link, das hat mir sehr geholfen.

Grüße
Blue
BlueLines
BlueLines 07.12.2018 um 07:57:04 Uhr
Goto Top
Hallo

Eine kleine Frage hätte ich da noch, ist aber nur eine Verständnisfrage. Warum kannst du in deinem Code schreiben:
        For i = 1 To 12
            .comboMonat.AddItem MonthName(i)
        Next
und ich muss schreiben:
Sub Fuellen(ws As Worksheet, Jahr As Integer)
'Füllen von Comboboxen  

    With ws
        .OLEObjects("cboMonatWeahlen").Object.Clear  
        For i = 1 To 12
            .OLEObjects("cboMonatWeahlen").Object.AddItem MonthName(i) + "_" & Jahr  
        Next
wenn ich schreibe
.cboMonatWeahlen.AddItem MonthName(i)
gibt's nen Fehler. Ich würde nur gerne verstehen warum du ohne:
.OLEObjects("cboMonatWeahlen").Object.  
auskommst???

Grüße
Blue
137846
Lösung 137846 07.12.2018 aktualisiert um 09:27:03 Uhr
Goto Top
Weil ich eine ActiveX Combobox genommen habe, kein Formularsteuerelement face-smile. Diese haben meist mehr Möglichkeiten und lassen sich im Sheet direkt ansprechen.