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

im UF navigieren

im UF navigieren
06.02.2020 20:26:47
Peer
Hallo liebe Excel-Fan-Gemeide.
Ich hab endlich wieder mal ein wenig Zeit gefunden, an meinem Projekt, dass dank euch schon einen enormen Status erreicht hat, weiter zu basteln.
Dabei habe ich im Netz etwas Interessantes gefunden, das ich gern an meine Bedürfnisse anpassen möchte.
Ich bin aber aus den Code (noch) nicht richtig schlau geworden, habe ihn aber doch ein wenig _ verändert.

Option Explicit
Dim dLetzteZeile As Double, dAktZeile
Private Sub cmdNext_Click()
If dAktZeile > dLetzteZeile Then
MsgBox "Sie haben den letzen Datensatz erreicht", vbExclamation, "Weiter vorblättern  _
nicht möglich"
btn_Next.Enabled = False
Else
btn_Next.Enabled = True
dAktZeile = dAktZeile + 1
Einlesen
btn_Prev.Enabled = True
End If
End Sub
Private Sub cmdPrev_Click()
If dAktZeile = 2 Then
MsgBox "Sie haben den ersten Datensatz erreicht", vbExclamation, "Weiter rückblättern  _
nicht möglich"
btn_Prev.Enabled = False
Else
btn_Prev.Enabled = True
dAktZeile = dAktZeile - 1
Einlesen
btn_Next.Enabled = True
End If
End Sub
Private Sub UserForm_Activate()
dAktZeile = 2
dLetzteZeile = ActiveSheets.Cells.SpecialCells(xlCellTypeLastCell).Row - 1
Einlesen
End Sub
Sub Einlesen()
With ActiveSheets
dLetzteZeile = .Cells.SpecialCells(xlCellTypeLastCell).Row
Call Userform_Initialize
End With
End Sub

Ich habe 12 Monatsblätter, bei denen Ich mit Rechtsklick (in Spalte B) auf die aktive Zeile zugreife und in eine UF einlese.
Dabei beginnt bei jedem Monatsblatt der Kalendertag in Zeile 12 und endet max bei 42 (für die Monate, die 31 Tage haben)
Die Monate, die nur 30 Tage haben, enden logisch bei 41, und Februar entweder bei 28 (39) oder bei 29 (40) für das Schaltjahr.
Ich möchte oben stehenden Code so anpassen, dass in der UF die erste Zeile (1. Datensatz) bei 12 beginnt und bei dem jeweiligen letzten Zeile (39 oder 40 oder 41 oder 42) endet.
Ich finde an diesem Code gut, dass man beim Klick vor dem ersten Datensatz die MsgBox, die meldet, das dieser nicht weiter geht, finde aber schlecht, das die Anzahl der Datensätze nicht begrenzt wird und daher auch über die Zeile 42 navigiert wird.
Hintergrund ist, das ich nicht jedes mal die UF schließen möchte, wenn ich den nächsten oder vorherigen Datensatz ändern möchte.
Anbei eine stark reduzierte Mappe nur mit den Monaten Januar und Februar.
https://www.herber.de/bbs/user/135040.xlsm
Ich hoffe, die vielen Profis unter euch können mir helfen oder Tipps geben.
Vielen Dank im Voraus.
LG
Peer

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: im UF navigieren
07.02.2020 20:40:04
Peer
Hallo Werner.
Entschuldige die späte Antwort.
Heute war ein sehr langer anstengender Arbeitstag.
Vielen Dank für deine Mühe. Das funktioniert bis jetzt super.
Ich hätte noch eine Frage zum Code zum Verständnis.
Dim dAktZeile As Long, dVorherigeZeile As Long
dVorherigeZeile = 12   'Beginn bei Zeile?
dAktZeile = Selection.Row   'Interessant. Kannte nur ActiveCell.Row
If dAktZeile = dVorherigeZeile Then
MsgBox "Sie haben den ersten Datensatz erreicht", vbExclamation, "Weiter zurückblättern  _
nicht möglich"
Exit Sub
Else
Me.chk_Dienstreise.Tag = "Blättern"   'Warum?
Selection.Offset(-1).Select
dAktZeile = Selection.Row
Call UserForm_Initialize
Me.chk_Dienstreise.Tag = ""       'Warum?
Wie kann ich den Code so anpassen, dass statt der MsgBox "Prev" bzw. "Next" Enabled werden?
If dAktZeile = dNächsteZeile -1 then
btn_Next.Enabled = False
funktioniert nicht ganz so, wie beabsichtigt.
LG
Peer
Anzeige
AW: im UF navigieren
08.02.2020 11:26:50
Werner
Hallo Peer,
hier der Code mit Enabled = False der beiden Button.
Private Sub btn_Prev_Click()
Dim dAktZeile As Long, dVorherigeZeile As Long, dZeileMax
dZeileMax = Format(WorksheetFunction.Max(Range("B12:B42")), "D") + 11
dVorherigeZeile = 12
dAktZeile = Selection.Row
Me.btn_Prev.Enabled = True
Me.chk_Dienstreise.Tag = "Blättern"
Selection.Offset(-1).Select
dAktZeile = Selection.Row
Call UserForm_Initialize
Me.chk_Dienstreise.Tag = ""
If Selection.Row = 12 Then Me.btn_Prev.Enabled = False
If Selection.Row  12 Then Me.btn_Prev.Enabled = True
If Selection.Row = dZeileMax Then Me.btn_Next.Enabled = False
End Sub
Dann noch Änderung im Userform_Initialize, damit der jeweilige Button Enabled = False ist, je nachdem welche Zeile im Blatt aktiv ist.
Private Sub UserForm_Initialize()
Dim zeile As Long, Repeatings As Integer, N As Integer
Dim letzte As Range, i As Long, wks As Worksheet
Dim HeimatOrt As String, ETS As String
Dim dZeileMax As Long, dAktZeile As Long
Set wks = Worksheets("Parameter")
dZeileMax = Format(WorksheetFunction.Max(Range("B12:B42")), "D") + 11
dAktZeile = Selection.Row
If dAktZeile = dZeileMax Then Me.btn_Next.Enabled = False
If dAktZeile 

Ist jetzt nur der Anfang, der Rest bleibt unverändert.
Und zur Frage mit dem Wert im Tag des Controls. Du hast für chk_Dienstreise einen Code im Klick-Ereignis dieser Checkbox. Dort hast du eine Messagebox drin, die abfragt, ob die Felder geleert werden sollen oder nicht.
Dadurch dass bei Betätigen der beiden "Vorwärts/Rückwärts" Buttons über Call Userform_Initialize sämtliche Controls in der Userform neu befüllt werden, wird u.U. auch bei chk_Dienstreise der Haken gesetzt oder aufgehoben. Diese Änderung löst das Klick-Event der Checkbox aus und somit bekommst du immer wieder die Messageboxabfrage ob die Felder geleert werden sollen oder nicht.
Das habe ich durch erfassen eines Wertes im Tag der Checkbox abgefragt. Schau dir dazu den Code im Klick-Event der Checkbox mal an.
Gruß Werner
Anzeige
AW: im UF navigieren
08.02.2020 17:22:56
Peer
Hallo Werner.
Vielen Dank für deine Erläuterung und Hilfe.
Ich habe im Userform_Initialize Sub noch

If zeile = 12 Then btn_Prev.Enabled = False
If zeile = dZeileMax Then btn_Next.Enabled = False
hinter

zeile = ActiveCell.Row
eingefügt, damit wenn ich den 1. Tag oder letzten Tag des Monats wähle,auch beim Laden der UF die Button deaktiviert werden.
Schönes Wochenende.
LG
Peer
Gerne u. Danke für die Rückmeldung und...
08.02.2020 17:49:39
Werner
Hallo Peer,
...noch der Hinweis: Wenn gelöst, dann bitte den Beitrag nicht auf offen stellen.
Gruß Werner
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige