Excel VBA_Abfrage über InputBox
#1
Guten Tag,
ich bräuchte wieder einen Tipp eines Fachmannes wie ich mein VBA-Code so verbessern kann, damit ich mein Ziel ereiche.
Ich habe im Tabellenblatt "Offene_Posten" eine Reihe von Konten, die jeweils durch eine Leerzeile getrennt sind. Wenn man nun diese Offene Posten-Liste nach einem Mieter-Namen durchsuchen möchte, sollte man eine Abfrage starten können, in der man den Namen des Mieters eingeben kann.
Der Code soll alle Zeilen in der Spalte D durchlaufen. Wenn der eingegebene Wert durch die InputBox dem Zellinhalt in Spalte D entspricht (als  nicht gleich, sondern nur entspricht), dann soll es das Konto (identifiziert über eine CurrentRegion) nicht ausblenden; alle weiteren Konten sollen hingegen ausgeblendet werden. Im beigelegten Beispiel sollen z.B. alle Konten eingeblendet bleiben, welche z.B. den Namen "Schubert" beinhalten.
Nun habe ich einen Code mit einer Schleife erstellt, der soweit funkioniert, doch gerade in der Zeile mit dem If-Satz hapert es.
Hat jemand einen Tipp für mich? Ich lege auch ein Beispiel-File bei.
Am Ende muss ich dann noch den Code so ergänzen, dass zwischen den eingeblendeten Konten nur je eine Leerzeile bleibt und nicht mehrere.
Ich danke schon mal vielmals im Voraus.
Lieben Gruß, Mirko

Code:
Sub Probe_AbfrageNameOPOS()

Dim myValue As String

myValue = InputBox("Geben Sie bitte den Namen des gesuchten Mieters ein.", "ABFRAGE MIETER-NAME")

If myValue = "" Then
Exit Sub
End If

For n = 5 To Cells(Rows.count, 1).End(xlUp).Row
    Rows(n).Select
      
    If InStr(Cells(n, 4).Value, myValue) = False Then
        Cells(n, 4).Select
        ActiveCell.CurrentRegion.Select
        Selection.EntireRow.Hidden = True
       
    End If
    Next n
            
End Sub


Angehängte Dateien
.xlsm   Mietenverwaltung_Beispieldatei.xlsm (Größe: 1,93 MB / Downloads: 7)
Top
#2
Hallo,

ganz schlechter Listenaufbau. Leerzeilen und Blockweiser Aufbau von Daten behindern die meisten Standardfunktionen von Excel.
Viele Grüße
Klaus-Dieter
Der Erfolg hat viele Väter, 
der Misserfolg ist ein Waisenkind
Richard Cobden
Top
#3
Hallo,
unabhängig von Klaus-Dieters richtiger Bemerkung:
Der nachfolgende Code sollte das Richtige tun.
Grundsatz: Leerzeilen im Code und die ANweisung Select sind immer überflüssig!
PHP-Code:
Sub Probe_AbfrageNameOPOS()
Dim myValue As String
  myValue 
InputBox("Geben Sie bitte den Namen des gesuchten Mieters ein." _
    
" Leere Eingabe blendet alle Zeilen ein.""ABFRAGE MIETER-NAME")
  Rows.Hidden False 'alle Zeilen einblenden, sonst ist Cells(Rows.Count, 1).End(xlUp).Row falsch!
    If myValue = "" Then Exit Sub
    For n = 5 To Cells(Rows.Count, 1).End(xlUp).Row
        Cells(n, 4).EntireRow.Hidden = InStr(LCase(Cells(n, 4).Text), LCase(myValue)) <= 0
        '
Lcase regeltdass Groß/Kleinschreibung uninteressant
    Next n
End Sub 
Gruß der AlteDresdner (Win11, Off2021)
Top
#4
Ich danke Klaus-Dieter für die berechtigte konstruktive Kritik, welche ich mir zu Herzen nehme. Ich habe mir meine bescheidenen Kenntnisse selbst angeeignet, die in euren Augen stümperhaft aussehen werden, aber ich werde mit jeder neuen Herausforderung besser und lerne gerade durch euch dazu!

Zur Antwort von AlterDresdner:
Ich danke Dir sehr für deinen Beitrag und für deinen Code-Vorschlag. Ich habe den Code mal ausprobiert, doch es blendet vom Konto mehr aus als es sollte. Wenn ich z.B. nach "Schubert" abfrage, so bleibt nur folgendes stehen.


[
Bild bitte so als Datei hochladen: Klick mich!
]
Top
#5
... hier das Ergebnis nach erfolgter Abfrage "Schubert".
Mit schönen Grüßen, Mirko


Angehängte Dateien
.pdf   OPOS_Nach Abfrage Schubert.pdf (Größe: 427,84 KB / Downloads: 8)
Top
#6
Hallo Mirko,

so sollte es klappen:
Sub Probe_AbfrageNameOPOS()
Dim myValue As String
Dim rngKonto As Range

Application.ScreenUpdating = False
myValue = InputBox("Geben Sie bitte den Namen des gesuchten Mieters ein.", "ABFRAGE MIETER-NAME")
Rows.Hidden = False

For Each rngKonto In Range(Cells(5, 1), Cells(Rows.Count, 1).End(xlUp)).SpecialCells(xlCellTypeConstants).Areas
rngKonto.EntireRow.Resize(rngKonto.Rows.Count + 1).Hidden = InStr(rngKonto.Cells(1, 4).Value, myValue) = 0
Next rngKonto

Application.ScreenUpdating = True
End Sub
Gruß Uwe
Top
#7
Hallo Uwe,
ich habe den Code ausprobiert und er funktioniert wunderbar! Ich danke Dir sehr für Deine Hilfe; alleine hätte ich das wohl nicht geschafft.
Nochmals vielen Dank und schönen Tag,
Mirko
Top


Gehe zu:


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