Registriert seit: 10.04.2014
Version(en): 2016 + 365
Hallo,
in einer Userform habe ich eine TextBox, in die ein Text eingetragen wird. Dieser Text wird dann im Blatt "Stammdaten" mit einem Search-Button in Spalte A gesucht mit folgendem Code:
With Worksheets("Stammdaten")
With .Range("A5:A" & .Cells(Rows.Count, 1).End(xlUp).Row)
Set Suchergebnis = .Find(TextBox1.Value, LookIn:=xlValues, lookat:=xlWhole)
If Not Suchergebnis Is Nothing Then
...
Nun will ich mit einem Spinnbutton den nächsten oder vorherigen Eintrag aus dieser Liste in der TextBox1 anzeigen lassen.
Wie geht das?
Private Sub SpinButton1_SpinDown()
Dim loLetzte As Long
loLetzte = Sheets("Stammdaten").Cells(Rows.Count, "A").End(xlUp).Row
'hier fehlt mir der Code
End Sub
Private Sub SpinButton1_SpinUp()
Dim loLetzte As Long
loLetzte = Sheets("Stammdaten").Cells(Rows.Count, "A").End(xlUp).Row
'hier fehlt mir der Code
End Sub
Registriert seit: 12.03.2016
Version(en): Excel 2003
Hallo
im Prinzip hast du die Lösung selbst angeboten, und vielleicht nur nicht erkannt. Davor gibt es den Suchlauf!
Mache einfach denselben Suchlauf im SpinButton und setzt hinter "İf Not is Nothig then" den Code:
Wert=Suchergebnis.Offset(-1,0).Value oder Wert=Suchergebnis.Offset(1,0).Value
Falls du die Zelle direkt anspringen willst dann mit: Suchergebnis.Offset().Select
mfg Gast 123
Folgende(r) 1 Nutzer sagt Danke an Gast 123 für diesen Beitrag:1 Nutzer sagt Danke an Gast 123 für diesen Beitrag 28
• Rabe
Registriert seit: 29.09.2015
Version(en): 2030,5
Code: sub M_snb()
on error resume next
sheets("Stammdaten").columns(1).Find(TextBox1,,,1).offset(,1)="gefunden"
End Sub
Registriert seit: 10.04.2014
Version(en): 2016 + 365
14.04.2017, 14:42
(Dieser Beitrag wurde zuletzt bearbeitet: 14.04.2017, 14:42 von Rabe.)
Hi,
(14.04.2017, 12:59)Gast 123 schrieb: Mache einfach denselben Suchlauf im SpinButton und setzt hinter "İf Not is Nothig then" den Code
danke, so funktioniert es fast perfekt. Private Sub SpinButton1_SpinDown()
Dim loLetzte As Long
With Sheets("Stammdaten")
loLetzte = .Cells(Rows.Count, "A").End(xlUp).Row
With .Range("A5:A" & .Cells(Rows.Count, 1).End(xlUp).Row)
Set Suchergebnis = .Find(TextBox1.Value, LookIn:=xlValues, lookat:=xlWhole)
If Not Suchergebnis Is Nothing Then
TextBox1.Value = Suchergebnis.Offset(-1, 0).Value
End If
End With
End With
End Sub
Private Sub SpinButton1_SpinUp()
Dim loLetzte As Long
With Sheets("Stammdaten")
loLetzte = .Cells(Rows.Count, "A").End(xlUp).Row
With .Range("A5:A" & .Cells(Rows.Count, 1).End(xlUp).Row)
Set Suchergebnis = .Find(TextBox1.Value, LookIn:=xlValues, lookat:=xlWhole)
If Not Suchergebnis Is Nothing Then
TextBox1.Value = Suchergebnis.Offset(1, 0).Value
End If
End With
End With
End Sub
So, wie snb vorgeschlagen hat, geht es auch und sogar ganz kurz:
Private Sub SpinButton1_SpinDown()
TextBox1.Value = Sheets("Stammdaten").Columns(1).Find(TextBox1, , , 1).Offset(-1, 0).Value
End Sub
Jetzt hätte ich nur noch gerne, daß bei überschreiten des Suchbereiches der erste Eintrag der Liste (Zeile 6) angezeigt wird und bei unterschreiten der letzte Eintrag.
Daß ich also kontinuierlich durch die Liste blättern kann, egal in welche Richtung. Wenn es oben am Ende ist, soll es wieder unten anfangen und anders rum.
Also, wenn Suchergebnis.Row > loLetzte wäre, dann Suchergebnis.Row = 6 => zeige Inhalt von Range("A6")
wenn Suchergebnis.Row < 6 wäre, dann setze Suchergebnis.Row = loLetzte => zeige Inhalt von Range("A" & loLetzte)
Registriert seit: 12.03.2016
Version(en): Excel 2003
Hallo Ralf
ich habe eine grundsaetzliche Idee, weiss im Augenblick nicht genau wo du es im Code einbaeuen musst?
Man kann den SpiButon Wert auslesen und in einer If Then Anweisung die Zahl erhöhen oder erniedrigen.
Wie und wo du es genau einbauen musst habe ich jetzt nicht ausgetüfftelt. Probier es mal selbst aus.
mfg Gast 123
Code: Private Sub SpinButton1_Change()
Zahl = SpinButton1.Value
If Zahl > loLetzte Then
SpinButton1.Value = 6
Zahl = 6
End If
If Zahl < 6 Then
SpinButton1.Value = loLetzte
Zahl = loletze
End If
MsgBox Zahl
End Sub
Registriert seit: 12.03.2016
Version(en): Excel 2003
Hallo Ralf
beim Kaffee kochen kam mir eine Idee, probier sie mal bitte aus. Würde mich freuen wenn es so klappt
Mach eine Vorauswertung mit Min und Max, ich hoffe das es so klappt
mfg Gast 123
Code: Private Sub SpinButton1_SpinDown()
Dim loLetzte As Long
With Sheets("Stammdaten")
Zahl = SpinButton1.Value
loLetzte = .Cells(Rows.Count, "A").End(xlUp).Row
If Zahl < 6 Then
TextBox1.Value = .Cells(loLetzte, 1)
SpinButton1.Value = loLetzte
Exit Sub
End If
With .Range("A5:A" & .Cells(Rows.Count, 1).End(xlUp).Row)
Set Suchergebnis = .Find(TextBox1.Value, LookIn:=xlValues, lookat:=xlWhole)
If Not Suchergebnis Is Nothing Then
TextBox1.Value = Suchergebnis.Offset(-1, 0).Value
End If
End With
End With
End Sub
Private Sub SpinButton1_SpinUp()
Dim loLetzte As Long
With Sheets("Stammdaten")
Zahl = SpinButton1.Value
loLetzte = .Cells(Rows.Count, "A").End(xlUp).Row
If Zahl > loLetzte Then
TextBox1.Value = .Cells(6, 1)
SpinButton1.Value = 6
Exit Sub
End If
With .Range("A5:A" & .Cells(Rows.Count, 1).End(xlUp).Row)
Set Suchergebnis = .Find(TextBox1.Value, LookIn:=xlValues, lookat:=xlWhole)
If Not Suchergebnis Is Nothing Then
TextBox1.Value = Suchergebnis.Offset(1, 0).Value
End If
End With
End With
End Sub
Registriert seit: 10.04.2014
Version(en): 2016 + 365
16.04.2017, 08:06
(Dieser Beitrag wurde zuletzt bearbeitet: 18.04.2017, 08:22 von Rabe.
Bearbeitungsgrund: Code neu eingestellt wegen den überfllüssigen Leerzeilen
)
Hi Gast,
wie immer von Dir, eine praktikable Lösung.
Ich habe zuerst den oberen SpinButton1_Change-Code verwendet in Verbindung mit dem Vorschlag von snb: Private Sub SpinButton1_SpinDown()
TextBox1.Value = Sheets("Stammdaten").Columns(1).Find(TextBox1, , , 1).Offset(-1, 0).Value
End Sub
Private Sub SpinButton1_SpinUp()
TextBox1.Value = Sheets("Stammdaten").Columns(1).Find(TextBox1, , , 1).Offset(1, 0).Value
End Sub
Die Zeilen wurden schön durchgewechselt, dabei wechselte aber die Anzeige auch in den nicht benutzbaren Bereich.
Dann habe ich Deinen zweiten Vorschlag vom Kaffee-Kochen (so spät noch Kaffee? :)) ausprobiert und er funktioniert!
Private Sub SpinButton1_SpinDown()
Dim loLetzte As Long
Dim Zahl As Long
With Sheets("Stammdaten")
Zahl = SpinButton1.Value
loLetzte = .Cells(Rows.Count, "A").End(xlUp).Row
'wenn SpinButton-Wert kleiner als erste Zeile des Datenbereiches
If Zahl < 6 Then
'Anzeige der letzten Zeile
TextBox1.Value = .Cells(loLetzte, 1)
SpinButton1.Value = loLetzte
Exit Sub
End If
With .Range("A6:A" & .Cells(Rows.Count, 1).End(xlUp).Row)
'suchen des Textbox-Inhaltes im Datenbereich
Set Suchergebnis = .Find(TextBox1.Value, LookIn:=xlValues, lookat:=xlWhole)
If Not Suchergebnis Is Nothing Then
'Anzeige des Inhaltes eine Zeile kleiner
TextBox1.Value = Suchergebnis.Offset(-1, 0).Value
End If
End With
End With
End Sub
Private Sub SpinButton1_SpinUp()
Dim loLetzte As Long
Dim Zahl As Long
With Sheets("Stammdaten")
Zahl = SpinButton1.Value
loLetzte = .Cells(Rows.Count, "A").End(xlUp).Row
'wenn SpinButton-Wert größer als letzte belegte Zeile des Datenbereiches
If Zahl > loLetzte Then
'Anzeige der ersten Zeile des Datenbereiches
TextBox1.Value = .Cells(6, 1)
SpinButton1.Value = 6
Exit Sub
End If
With .Range("A6:A" & .Cells(Rows.Count, 1).End(xlUp).Row)
Set Suchergebnis = .Find(TextBox1.Value, LookIn:=xlValues, lookat:=xlWhole)
If Not Suchergebnis Is Nothing Then
TextBox1.Value = Suchergebnis.Offset(1, 0).Value
End If
End With
End With
End Sub
Danke dafür!
Registriert seit: 29.09.2015
Version(en): 2030,5
Warum verwendest du nicht irgendwo
Code: spinbutton1.min=6
spinbutton1.max=cells(rows.count,1).end(xlup).row
Folgende(r) 1 Nutzer sagt Danke an snb für diesen Beitrag:1 Nutzer sagt Danke an snb für diesen Beitrag 28
• Rabe
Registriert seit: 14.04.2014
Version(en): 2003, 2007
16.04.2017, 22:04
(Dieser Beitrag wurde zuletzt bearbeitet: 16.04.2017, 22:04 von atilla.)
Hallo Ralf,
ich würde auch, wie snb vorschlägt das Minimum und Maximum des Spinbuttons festlegen.
Das macht man am besten im Initialize oder Activate der Userform.
Das Ganze könnte dann so aussehen.
Code: Private Sub SpinButton1_SpinDown()
SpinButton1 = IIf(SpinButton1 = SpinButton1.Min, SpinButton1.Max - 1, SpinButton1)
TextBox1 = Worksheets("Stammdaten").Cells(SpinButton1, 1)
End Sub
Private Sub SpinButton1_SpinUp()
SpinButton1 = IIf(SpinButton1 = SpinButton1.Max, SpinButton1.Min + 1, SpinButton1)
TextBox1 = Worksheets("Stammdaten").Cells(SpinButton1, 1)
End Sub
Private Sub UserForm_Initialize()
With SpinButton1
.Min = 5
.Max = Worksheets("Stammdaten").Cells(Rows.Count, 1).End(xlUp).Row + 1
End With
End Sub
Sub suche()
Dim lngZ As Long
Dim suchErgebnis As Range
With Worksheets("Stammdaten")
lngZ = .Cells(Rows.Count, 1).End(xlUp).Row
With .Range("A5:A" & .Cells(Rows.Count, 1).End(xlUp).Row)
Set suchErgebnis = .Find(TextBox1.Value, LookIn:=xlValues, lookat:=xlWhole)
If Not suchErgebnis Is Nothing Then
SpinButton1 = suchErgebnis.Row
End If
End With
End With
End Sub
Gruß Atilla
Folgende(r) 1 Nutzer sagt Danke an atilla für diesen Beitrag:1 Nutzer sagt Danke an atilla für diesen Beitrag 28
• Rabe
Registriert seit: 10.04.2014
Version(en): 2016 + 365
Hallo,
(16.04.2017, 22:04)atilla schrieb: ich würde auch, wie snb vorschlägt das Minimum und Maximum des Spinbuttons festlegen.
Das macht man am besten im Initialize oder Activate der Userform.
Das Ganze könnte dann so aussehen.
nochmal Danke an atilla, snb, Gast123 für die Unterstützung, hat mir sehr geholfen!
:100:
|