Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Spinbutton, Textbox in Userform
#1
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
Antworten Top
#2
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:
  • Rabe
Antworten Top
#3
Code:
sub M_snb()
  on error resume next
  sheets("Stammdaten").columns(1).Find(TextBox1,,,1).offset(,1)="gefunden"
End Sub
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top
#4
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)
Antworten Top
#5
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
Antworten Top
#6
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
Antworten Top
#7
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!
Antworten Top
#8
Warum verwendest du nicht irgendwo


Code:
spinbutton1.min=6
spinbutton1.max=cells(rows.count,1).end(xlup).row
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
[-] Folgende(r) 1 Nutzer sagt Danke an snb für diesen Beitrag:
  • Rabe
Antworten Top
#9
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:
  • Rabe
Antworten Top
#10
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:
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste