Microsoft Excel

Herbers Excel/VBA-Archiv

Sprungmarke setzen


Betrifft: Sprungmarke setzen von: ANdy
Geschrieben am: 28.11.2017 05:54:54

Hallo,

wie kann man in einem Tabellenblatt folgenden erreichen.

1. Ich habe einen Kalender, der für das ganze Jahr fortlaufend tag für tag eine spalte hat. Ich würde gerne die 1. Spalte und die 1. Zeile einfrieren und in der ersten Spalte ein Dropdownfeld einrichten, wo ich direkt den Monat auswählen kann. Dadurch soll automatisch im nicht-fixierten Bereich nach dem Tag (also für Mai zb. der 1.5) gesucht werden und direkt dorthin gesprungen/ gescrollt werden.

2. Würde ich gerne, dass beim Öffnen der Arbeitsmappe automatisch das Tabellenblatt "Kalender" geöffnet wird und zum aktuellen Datum gesprungen wird.

  

Betrifft: AW: Sprungmarke setzen von: fcs
Geschrieben am: 28.11.2017 08:00:58

Hallo Andy,

1. Ich habe einen Kalender, der für das ganze Jahr fortlaufend tag für tag eine spalte hat.
Ich würde gerne die 1. Spalte und die 1. Zeile einfrieren
Selektiere Zelle B2 und via Menü "Ansicht" kannst du dein Tabellenblatt entsprechend einfrieren.


und in der ersten Spalte ein Dropdownfeld einrichten,
Füge hier in Zelle A1 via Menü "Entwicklertools" eine Combobox aus den Active-X-Steuerelemente ein.
Stelle folgende Eigenschaften ein.

ColumnCount: 2
BoundColumn: 1
Columnwidths: 15Pt;75Pt
TextColumn: 2

Falls der Name der Combobox nicht "ComboBox1" ist, dann musst du in den Makros entsprechende Anpassungen machen.

wo ich direkt den Monat auswählen kann. Dadurch soll automatisch im nicht-fixierten Bereich nach dem Tag (also für Mai zb. der 1.5) gesucht werden und direkt dorthin gesprungen/ gescrollt werden.

2. Würde ich gerne, dass beim Öffnen der Arbeitsmappe automatisch das Tabellenblatt "Kalender" geöffnet wird und zum aktuellen Datum gesprungen wird.

Hierfür benötigst du folgende Makros:

Gruß
Franz

'Makro unter DieseArbeitsmappe

Private Sub Workbook_Open()

    Me.Worksheets("Kalender").Activate
    Call prcFill_Combobox
    Call prcGotoDatum(Date)
    
End Sub



'Makro unter Tabellenblatt-Modul des Tabellenblatts "Kalender"

Private Sub ComboBox1_Change()
    With Me.ComboBox1
        If .ListIndex >= 0 Then
            Call prcGotoDatum(datDatum:=DateSerial(Year(Me.Cells(1, 2).Value), Val(.Value), 1))
        End If
    End With
End Sub



'Makros in einem allgemeinen Modul der Datei

Option Explicit

Public Sub prcGotoDatum(datDatum As Date)
    Dim wks As Worksheet
    Dim Spalte As Long
    Set wks = ThisWorkbook.Worksheets("Kalender")
    With wks
        For Spalte = 2 To .Cells(1, .Columns.Count).End(xlToLeft).Column
            If .Cells(1, Spalte).Value = datDatum Then
                .Activate
                .Cells(1, Spalte).Select
                ActiveWindow.ScrollColumn = Spalte
                Exit For
            End If
        Next
    End With
End Sub

Sub prcFill_Combobox()
    '2-spaltige Combobox mit Nr und Name des Monats füllen
    Dim objCombobox As OLEObject
    Dim intJ As Integer
    Set objCombobox = ThisWorkbook.Worksheets("Kalender").OLEObjects("Combobox1")
    With objCombobox
        .Object.Clear
        For intJ = 1 To 12
            With .Object
                .AddItem intJ
                .List(.ListCount - 1, 1) = Format(DateSerial(Year:=Year(Date), _
                     Month:=intJ, Day:=1), "MMMM")
            End With
        Next
        .Object.ListIndex = Month(Date) - 1
    End With
End Sub




  

Betrifft: AW: Sprungmarke setzen von: ANdy
Geschrieben am: 28.11.2017 08:32:35

es kommt jetzt die Meldung: Typen unverträglich. Bei Debug:


Call prcGotoDatum(datDatum:=DateSerial(Year(Me.Cells(1, 2).Value), Val(.Value), 1))


  

Betrifft: Im 2ten Parameter fehlt die Klassifizierung! (owT) von: EtoPHG
Geschrieben am: 28.11.2017 08:38:42




  

Betrifft: AW: Im 2ten Parameter fehlt die Klassifizierung! (owT) von: ANdy
Geschrieben am: 28.11.2017 08:49:49

Habe es hinbekommen .. Super Danke. Nur noch eine Frage: Kann man nur die Monatsnamen in der Liste füllen? also nicht 1 Januar sondern nur Januar


  

Betrifft: Columnwidths: 0;75Pt in Combobox einstellen (owT) von: EtoPHG
Geschrieben am: 28.11.2017 09:19:30




  

Betrifft: Columnwidths: 0;75Pt in Combobox einstellen (owT) von: EtoPHG
Geschrieben am: 28.11.2017 09:19:59




  

Betrifft: AW: Columnwidths: 0;75Pt in Combobox einstellen (owT) von: ANdy
Geschrieben am: 28.11.2017 09:57:30

Es wird zwar die Zahl in der Liste ausgeblendet. Als ausgewähltes Element steht aber weiterhin die Zahl 1-12 dabei (ohne Monat)


  

Betrifft: BoundColumn: 2 (owT) von: EtoPHG
Geschrieben am: 28.11.2017 11:05:40




  

Betrifft: AW: BoundColumn: 2 (owT) von: Herby
Geschrieben am: 28.11.2017 11:51:51

mit boundcolumn 2 funktioniert der Sprung nicht mehr!


  

Betrifft: AW: Columnwidths: 0;75Pt in Combobox einstellen (owT) von: fcs
Geschrieben am: 29.11.2017 05:42:28

Hallo Andy,

für die Ermittlung des 1. Tages des Monats wird für die verwenete Funktion ja die Nummer des Monats benötigt.
Diese kann man hier auch aus der Index-Nummer des gewählten Eintrags ermitteln, da die Monate in der korreten Reihenfolge in der Liste stehen.

Wenn du die Combobox als 1-spaltige Box einrichtest dann kannst du mit folgenden Makro-Anpassungen arbeiten.

'Makro unter Tabellenblatt-Modul des Tabellenblatts "Kalender"

Private Sub ComboBox1_Change()
    With Me.ComboBox1
        If .ListIndex >= 0 Then
            Call prcGotoDatum(datDatum:=DateSerial(Year(Me.Cells(1, 2).Value), _
                .ListIndex + 1, 1))
        End If
    End With
End Sub




'Makro im allgemeinen Modul

Sub prcFill_Combobox()
    '1-spaltige Combobox mit Namen der Monate füllen
    Dim objCombobox As OLEObject
    Dim intJ As Integer
    Set objCombobox = ThisWorkbook.Worksheets("Kalender").OLEObjects("Combobox1")
    With objCombobox
        .Object.Clear
        For intJ = 1 To 12
            With .Object
                .AddItem Format(DateSerial(Year:=Year(Date), _
                     Month:=intJ, Day:=1), "MMMM")
            End With
        Next
        .Object.ListIndex = Month(Date) - 1
    End With
End Sub

Gruß
Franz


  

Betrifft: Statt der Schleife … von: RPP63
Geschrieben am: 28.11.2017 10:02:05

Moin!
… geht natürlich auch das schnellere

objCombobox.List = Application.GetCustomListContents(8)
Aber dies nur ergänzend.

Gruß Ralf


  

Betrifft: Mal ein Beispiel von: RPP63
Geschrieben am: 28.11.2017 12:31:00

Formularsteuerelement sowie Hyperlinks in der Tabelle.
Der gesamte Code lautet:

Sub Dropdown1_BeiÄnderung()
Select Case [A1]
  Case 1
    ActiveWindow.ScrollColumn = _
     DateSerial([A9], Month(Date), Day(Date)) - DateSerial([A9], 1, 0) + 1
  Case Else
    ActiveWindow.ScrollColumn = _
       WorksheetFunction.Match(Format(DateSerial([A9], [A1] - 1, 1), "MMM"), Rows(1), 0)
End Select
ActiveSheet.Columns.AutoFit
End Sub
Schaue Dir mal die Datei an:
https://www.herber.de/bbs/user/117962.xlsm

Gruß Ralf


Beiträge aus den Excel-Beispielen zum Thema "Sprungmarke setzen"