Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1916to1920
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
Wert aus Spalte per textbox suchen
17.01.2023 17:57:48
Sigrid
Guten Abend,
ich möchte gern in einer Spalte (D) eine Zahl bzw. Wert per Textbox suchen und dann sollte die Zelle
aktiviert bzw. sichtbar sein.
Würde mich um Unterstützung freuen,
mfg sigrid

27
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Wert aus Spalte per textbox suchen
17.01.2023 18:04:27
Beverly
Hi Sigrid,
befindet sich die TextBox auf einem UserForm oder im Tabellenblatt?
Bis später
Karin

auf einem Tabellenblatt !
17.01.2023 18:20:09
sigrid
AW: auf einem Tabellenblatt !
17.01.2023 18:37:09
GerdL
Moin Sigrid!
Sub Unit()
Dim TB As Variant
Dim X As Variant
Worksheets("Tabelle1").Range("D1:D5").Formula = "=Row()+0.10"
Worksheets("Tabelle1").TextBox1.Value = "5,10"
TB = Worksheets("Tabelle1").TextBox1.Value
If IsNumeric(TB) Then TB = CDbl(TB)
X = Application.Match(TB, Worksheets("Tabelle1").Range("D:D"), 0)
If IsError(X) Then
    MsgBox TB & " wurde nicht gefunden!"
Else
    Application.Goto Worksheets("Tabelle1").Range("D:D").Cells(X)
End If
End Sub
Gruß Gerd
Anzeige
Fehler
18.01.2023 12:53:07
sigrid
Guten Morgen Gerd,
leider Fehlermeldung.
Wenn ich 552 eingebe, kommt 5,10 raus und die Zahlen in der Spalte werden mit , versehen.
gruß sigrid
AW: auf einem Tabellenblatt !
17.01.2023 23:30:58
Beverly
Hi Sigrid,
oder so:
Sub Suchen()
    Dim rngSuche As Range
    If Tabelle1.TextBox1 > "" Then
        If IsNumeric(Tabelle1.TextBox1) Then
            Set rngSuche = Columns(4).Find(CDbl(Tabelle1.TextBox1), lookat:=xlWhole)
        Else
            Set rngSuche = Columns(4).Find(Tabelle1.TextBox1, lookat:=xlWhole)
        End If
        If Not rngSuche Is Nothing Then Application.Goto reference:=rngSuche
    End If
End Sub
Den Codenamen der Tabelle - im Beispiel Tabelle1 - musst du natürlich anpassen.
Bis später
Karin

Anzeige
Soweit i.o. aber bitte
18.01.2023 13:02:37
sigrid
Hallo Karin,
soweit, nach meiner Änderung:
Worksheets("Lager_Liste").TextBox2
läuft es.
Die gefundene Suchzelle wird ganz unten angezeigt, würde mich freuen wenn es mittig vom Bildschirm geht und
die Zeile- bis Spalte K selektiert wird.
gruß sigrid
Mitte Bildschirm...
18.01.2023 14:58:40
Beverly
Hi Sigrid,
...ist schwierig, aber ganz oben ist problemlos möglich:
Sub Suchen()
    Dim rngSuche As Range
    With Worksheets("Lager_Liste")
        If .TextBox2 > "" Then
            If IsNumeric(.TextBox2) Then
                Set rngSuche = .Columns(4).Find(CDbl(.TextBox2), lookat:=xlWhole)
            Else
                Set rngSuche = .Columns(4).Find(.TextBox2, lookat:=xlWhole)
            End If
            If Not rngSuche Is Nothing Then
                Application.Goto reference:=rngSuche, Scroll:=True
                .Range(.Cells(rngSuche.Row, 1), .Cells(rngSuche.Row, 12)).Select
            End If
        End If
    End With
End Sub
Bis später
Karin

Anzeige
AW: Mitte Bildschirm...
18.01.2023 15:31:42
Piet
Hallo
Sorry, es ist der Thread von Karin, normalerweise gehe ich da nicht rein!
Mich intressiert aber rein technisch ob man die Bildschrimmitte so hinbekommt?
Die genaue Einstellung muss die Fragerin mit +/- und einer Zahl selbst herausfinden!
mfg Piet
  • Sub Suchen()
        Dim rngSuche As Range, rw As Long, sp As Integer
        With Worksheets("Lager_Liste")
            If .TextBox2 > "" Then
                If IsNumeric(.TextBox2) Then
                    Set rngSuche = .Columns(4).Find(CDbl(.TextBox2), lookat:=xlWhole)
                Else
                    Set rngSuche = .Columns(4).Find(.TextBox2, lookat:=xlWhole)
                End If
                If Not rngSuche Is Nothing Then
                    rw = rngSuche.Row     'aktive Zeile
                    sp = rngSuche.Column  'aktive Saplte
                    Application.Goto reference:=rngSuche, Scroll:=True
                    .Range(.Cells(rngSuche.Row, 1), .Cells(rngSuche.Row, 12)).Select
                    'Bildschirm über ScrollRow + ScrollColumn einstellen
                    ActiveWindow.ScrollRow = rw - 10
                    ActiveWindow.ScrollColumn = sp - 1
                End If
            End If
        End With
    End Sub

  • Anzeige
    AW: Mitte Bildschirm...
    18.01.2023 15:50:30
    Daniel
    ist es nicht eher der Thread von Sigrid?
    ich würde das prinzipiell so machen, um die gefundene Zelle in der Mitte des Excelfensters zu platzieren, vorausgesetzt es gibt nicht allzuviele Variationen in Zeilenhöhen oder Spaltenbreiten. Dieser Code berücksichtigt auch unterschiedlich große Excelfenster.
    set rngSuche = ...Find(...) ' das habt ihr ja schon
    if not rngSuche is Nothing then
         application.Goto rngSuche
         with ActiveWindow
              .ScrollRow = Worksheetfunction.Max(1, rngSuche.row - .VisibleRange.Rows.count / 2 + 1)
              .ScrollColumn = Worksheetfunction.Max(1, rngSuche.column - .VisibleRange.Columns.count / 2 +1)
        end with
    end if
    Gruß Daniel
    Anzeige
    Jo, das ist in Ordnung -)
    18.01.2023 18:15:41
    sigrid
    Guten Abend,
    DANKE an alle !
    Ich nehme die Ergänzung von Daniel
    gruß sigrid
    Sorry hatte vergessen !
    18.01.2023 18:33:33
    sigrid
    Hallo,
    hatte vergessen, jetzt noch die Zeile selektieren,
    würde mich freuen !
    So klappt es nicht:
    If Not rngSuche Is Nothing Then
    Application.Goto rngSuche
    With ActiveWindow
    .ScrollRow = WorksheetFunction.Max(1, rngSuche.Row - .VisibleRange.Rows.Count / 2 + 1)
    .ScrollColumn = WorksheetFunction.Max(1, rngSuche.Column - .VisibleRange.Columns.Count / 2 + 1)
    End With
    End If
    End If
    ActiveSheet.Range(Cells(rngSuche.Row, 3), Cells(rngSuche.Row, 11)).Select
    so wird die Zelle verändert.
    gr sigrid
    Anzeige
    AW: Sorry hatte vergessen !
    19.01.2023 10:27:59
    Daniel
    Hi
    erst die Zellen selektieren, dann die scrollen.
    Gruß Daniel
    AW: Sorry hatte vergessen !
    19.01.2023 10:40:34
    sigrid
    Guten Morgen Daniel,
    könnte man dies nicht im Makro einbauen ?
    gruß sigrid
    AW: Sorry hatte vergessen !
    19.01.2023 10:41:54
    Daniel
    ja kann man.
    da es dein Makro ist, ist "man" = "du".
    eine Codezeile an eine andere Stelle zu verschieben, sollte dich nicht überfordern.
    Gruß Daniel
    Natürlich aber...
    19.01.2023 12:02:53
    sigrid
    Hey Daniel,
    natürlich kann ich das.
    Welche Zeile ?
    Wohin ?
    Dann werde ich das ändern.
    gr sigrid
    AW: Natürlich aber...
    19.01.2023 12:25:25
    Daniel
    welche Zeile in deinem Code macht denn was?
    auch wenn du sagst du kannst kein VBA, VBA basiert auf dem englischen, dh man kann aus den Befehlen ableiten, was sie machen.
    Gruß Daniel
    Anzeige
    so geht es nicht
    19.01.2023 12:52:40
    sigrid
    hey,
    so klappt es nicht
    If Not rngSuche Is Nothing Then
    Application.Goto rngSuche
    With ActiveWindow
    .ScrollRow = WorksheetFunction.Max(1, rngSuche.Row - .VisibleRange.Rows.Count / 2 + 1)
    .ScrollColumn = WorksheetFunction.Max(1, rngSuche.Column - .VisibleRange.Columns.Count / 2 + 1)
    .Range(Cells(rngSuche.Row, 2), Cells(rngSuche.Row, 12)).Select
    End With
    End If
    End If
    AW: so geht es nicht
    19.01.2023 13:17:21
    Daniel
    Hi
    der Punkt vor dem Range muss weg.
    ansonsten, erst Selektieren, dannach ScrollRow und ScrollColumn einstellen.
    du musst hier nur die fett markierte Zeile ausschneiden und zwei Zeilen drüber einfügen.
    Gruß Daniel
    Anzeige
    Ja aber kleines Problem...
    19.01.2023 14:02:08
    sigrid
    Hallo Daniel,
    habe so reingesetzt:
    Private Sub TextBox2_Change()
    Dim TB As Variant
    Dim X As Variant
    Dim rngSuche As Range
        If Worksheets("Lager).TextBox2 > "" Then
            If IsNumeric(Worksheets("Lager").TextBox2) Then
                Set rngSuche = Columns(2).Find(CDbl(Worksheets("Lager").TextBox2), lookat:=xlWhole)
            Else
                Set rngSuche = Columns(2).Find(Worksheets("Lager").TextBox2, lookat:=xlWhole)
            End If
         If Not rngSuche Is Nothing Then
         Application.Goto rngSuche
        With ActiveWindow
            Range(Cells(rngSuche.Row, 2), Cells(rngSuche.Row, 11)).Select
            .ScrollRow = WorksheetFunction.Max(1, rngSuche.Row - .VisibleRange.Rows.Count / 2 + 1)
            .ScrollColumn = WorksheetFunction.Max(1, rngSuche.Column - .VisibleRange.Columns.Count / 2 + 1)
        End With
      End If
        End If
    End Sub
    klappt soweit aber nur ein kleines Problem:
    wenn ich mehrstellige Zahl eingebe, springt der Courser in das Feld der 1. Ziffer.
    gruß sigrid
    Anzeige
    AW: Ja aber kleines Problem...
    19.01.2023 14:45:02
    Daniel
    HI
    da müsstest du uns jetzt mal die Datei zeigen, damit wir sehen, was du in die Textbox eingegeben hast und was tatsächlich in den Zellen steht, und damit wir selber nachvollziehen können, was da gefunden wird.
    Gruß Daniel
    AW: so geht es nicht
    19.01.2023 15:30:47
    Piet
    Hallo Sigrid
    vor Range().Select darf kein Punkt sein! Und Select muss vor Windows stehen! Probier es bitte so:
    mfg Piet
  • Application.Goto rngSuche
    Range(Cells(rngSuche.Row, 2), Cells(rngSuche.Row, 12)).Select
    With ActiveWindow
    .ScrollRow = WorksheetFunction.Max(1, rngSuche.Row - .VisibleRange.Rows.Count / 2 + 1)
    .ScrollColumn = WorksheetFunction.Max(1, rngSuche.Column - .VisibleRange.Columns.Count / 2 + 1)
    End With

  • Vorschlag
    19.01.2023 16:56:25
    Beverly
    Hi Sigrid,
    ich würde so vorgehen: benutze nicht das Change-Ereignis der TextBox sondern das KeyDown-Ereignis und prüfe ob Enter als Abschluss bei der Eingabe gedrückt wurde.
    Außerdem kannst du den Tabellennamen im Code weglassen, da sich die TextBox und damit das Ereignis auf das aktive Blatt beziehen.
    https://www.herber.de/bbs/user/157384.xlsm
    Bis später
    Karin

    Supi, so bleibst ! DANKE ! -)
    19.01.2023 17:27:18
    sigrid
    Hallo zusammen,
    danke für die gesamt Unterstützung !
    So bleibst, bin zufrieden,
    danke an ALLE.
    gruß sigrid
    AW: Leider auch nicht Piet ! anbei Muster
    19.01.2023 17:19:58
    Daniel
    Hi
    das Problem ist, dass du die Zellen selektierst und damit aus der Textbox rausspringst.
    Da du das im Change-Event und damit bei jeder Eingabe eines Zeichens sofort machst, wird dann das zweite Zeichen nicht mehr in die Textbox geschrieben, sondern in die aktive Zelle!
    im ersten Schritt kannst du länger Texte eingeben, indem du sie erst in eine Zelle tippst und dann per Copy-Paste in die Textbox einfügst
    prinzipiell ich würde das ganze hier so lösen:
    1. lösche im Code die Zeilen mit Application.Goto und .Select, führe nur die beiden Zeilen mit ScrollRow und ggf ScrollColumn aus
    2. um die Zeile optisch zu markieren, benutzt du die Bedingte Formatierung. Trage hierzu in das Eigenschaftsfeld LinkedCell der Textbox die Adresse einer freien Zelle ein, bspw A1.
    richte dann für die Spalten, die markiert werden sollen, eine Bedingte Formatierung ein mit der Regel: =$B1=$A$1 (wobei $A$1 die Zelle ist, mit der die Textbox verknüpft ist)
    wenn du beim Selektieren bleiben willst (z.B. weil du die Zellen sofort bearbeiten oder kopieren willst), solltest du einen zusätzlichen Button einfügen und dann den Code beim Click auf den Button ausführen und nicht im Change-Event der Textbox. Dann kannst du so viele Zeichen einfügen wie benötigt.
    Gruß Daniel
    AW: Mitte Bildschirm...
    18.01.2023 16:26:35
    Beverly
    Hi Piet,
    vielleicht reicht Sigrid ja, wenn die Zeile ganz oben positioniert ist, deshalb hatte ich erstmal nichts weiter unternommen, denn für die Ermittlung der Mitte gibt es verschiedene Möglichkeiten.
    Bis später
    Karin

    Fehler
    18.01.2023 18:09:48
    sigrid
    Hallo Karin,
    bleibt hier stehen,:
    If Not rngSuche Is Nothing Then
    Application.Goto reference:=rngSuche, Scroll:=True
    .Range(.Cells(rngSuche.Row, 1), .Cells(rngSuche.Row, 12)).Select
    End If
    End If
    End With
    Fehler beim Kompilieren...
    gruß sigrid

    302 Forumthreads zu ähnlichen Themen

    Anzeige
    Anzeige
    Anzeige

    Links zu Excel-Dialogen

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige