Excel vba: Suchmechanismus
#61
Hallo Erich,

uups...

da bin ich mal auf die Reaktion von Carsten gespannt.

Ich traue mich hier gar nicht mehr. Dodgy

Das soll dich aber auf gar keinen Fall entmutigen.
Gruß Atilla
Top
#62
Hallo Erich,

(22.04.2017, 18:17)sharky51 schrieb: Aber trauen tue ich mich schon.   ...    So jetzt hab ich mich nochmal getraut  :46:

Hihi. Hier wird doch niemand gefressen und irgendwie hatten wir es doch auch geahnt.  :D


(22.04.2017, 18:17)sharky51 schrieb: Hab ja bereits beschrieben welche Randbedingungen beachtet werden sollten.
Ich versuche aus Euren Beispielen das mal zusammenzubauen - hoffe ich schaffe es -

Zu Deinen Randbedingungen habe ich noch zwei Fragen:
Wurden diese in der letzten Version 'V5' alle richtig beachtet?
Falls nicht, was wurde vergessen/nicht beachtet/falsch eingebaut?


Falls Du Probleme bekommen solltest, dann meldest Du Dich einfach noch einmal hier im Thread mit Deiner Frage.
(Denn eine konkrete Frage habe ich soeben nicht entdeckt.) ;)


Schönes Wochenende,
Gruß Carsten
Top
#63
(22.04.2017, 19:56)atilla schrieb: da bin ich mal auf die Reaktion von Carsten gespannt.
Ich traue mich hier gar nicht mehr. Dodgy

*hust*
Oh Gott.  :20:
Welchen Eindruck habe ich denn hier hinterlassen?   Huh
*hüstelhust* *zumspiegelgeh...* *oderbessernicht*


Gruß Carsten
:19: Angel

Edit:
Mach mit, lass mich nicht hängen. :D
Top
#64
Hallo Carsten,

ich habe auch keine Frage gestellt! Wollte nur nicht so einfach die Platte putzen und verduften.

Und die Version 'V5' ist super....!!

Habe mal Deine Userform und alle Makros in meine Mappe kopiert...um in dieser Umgebung zu testen.
Da funktioniert die Suche noch nicht so richtg ....muss das mal genauer anschauen.

DANKE!
Top
#65
Hallo Erich,

(22.04.2017, 20:13)sharky51 schrieb: Wollte nur nicht so einfach die Platte putzen und verduften.
Nett von Dir. :100:


Habe mal Deine Userform und alle Makros in meine Mappe kopiert...um in dieser Umgebung zu testen.
Da funktioniert die Suche noch nicht so richtg ....muss das mal genauer anschauen.


Ja, die Suche geht in V5 von der zweiten Zeile und von Spalte A bis Spalte B aus ...
Das muss alles angepasst werden.

Ein paar Hinweise:
Ich würde folgende drei Zeilen ganz nach oben setzen, über die Tabellenüberschriften, die haben im Datenbereich eigentlich nichts verloren:
   
Diese tauchen sonst in der Suche auf und müssen normalerweise immer weggefiltert werden:
   


weiter:
Code:
Friend Property Get MyRowNumber() As Long
   Select Case Me.txtRow
       Case vbNullString, 0 To 1 'statt 1 die erste Datenzeile
           MyRowNumber = 2 'statt 2 die erste Datenzeile
       Case Else
           MyRowNumber = Me.txtRow
   End Select
End Property

'____________________________________________________________________________


'Überall wo die Range festgelegt wird, statt B Deine letzte Spalte:
Set rFind = Range("A" & Me.MyRowNumber - 1 & ":B" & lastCell)

'____________________________________________________________________________

'in der Sub SearchAndSetNumber:
        If i > 0 Then
            'Die 2 steht für die Ausgabespalte, bei Bedarf ändern:
            .Cells(i, 2) = Me.MyOutputNumber
            ListEntryAdd "gefunden:" & vbTab & "'" & .Cells(i, 1) & "'" & vbTab & "Zeile: " & i
            'die 2 durch Me.MyRowNumber ersetzen:
            If Me.FrameFilter.ActiveControl.Tag <> 3 Then i = 2
            Application.Goto Reference:=.Cells(i, 1), Scroll:=True
        Else
            ListEntryAdd "nichts gefunden:" & vbTab & "ab Zeile:" & Me.MyRowNumber & ", Datum: " & Me.txtDate & ",  Suchstring: " & Me.txtSearchString
        End If

'____________________________________________________________________________

Private Sub CheckOptionsFilter()
    Dim lastCell As Long
        
    'Hier überall A1 durch Deine erste Überschriftszelle ersetzen:
    'B sowieso, siehe weiter oben
    '.cells(2,1 ) - durch .Cells(Me.MyRowNumber, 1) ersetzen

    Select Case Me.FrameFilter.ActiveControl.Tag
        Case 1
            With Sheets(Me.MySheetName)
                lastCell = .Cells(.Rows.Count, 1).End(xlUp).Row
                .Range("A1:B" & lastCell).AutoFilter Field:=1, Criteria1:=Me.MySearchString
                Application.Goto Reference:=.Cells(Me.MyRowNumber, 1), Scroll:=True
            End With
        Case 2
            With Sheets(Me.MySheetName)
                lastCell = .Cells(.Rows.Count, 1).End(xlUp).Row
                .Range("A1:B" & lastCell).AutoFilter Field:=2, Criteria1:=Me.MyOutputNumber
                Application.Goto Reference:=.Cells(2, 1), Scroll:=True
            End With
        Case Else
            With Sheets(Me.MySheetName)
                lastCell = .Cells(.Rows.Count, 1).End(xlUp).Row
                .Range("A1:B" & lastCell).AutoFilter
            End With
    End Select
End Sub

'____________________________________________________________________________


'Hier ebenfalls die 2 durch Me.MyRowNumber ersetzen:
Private Sub txtRow_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    If Not IsNumeric(Me.txtRow) Then
        Me.txtRow = 2
    ElseIf Me.txtRow < 2 Then
        Me.txtRow = 2
    End If
End Sub

Für den Anfang sollte das helfen. Es gibt sicher noch mehr Punkte ...

Ja, siehste, Pfusch am Bau von mir. Alles nur hingeschmissener Code.
Ich hätte doch alles in Klassen und Properties auslagern sollen. Macht zwar erst etwas mehr Arbeit, ist aber viel einfacher zu portieren, zu lesen, zu schreiben und zu pflegen ...


Melde Dich bei Problemen.


Gruß Carsten
Top
#66
(22.04.2017, 20:13)DbSam schrieb: Edit:
Mach mit, lass mich nicht hängen. :D

Hi Carsten,

ich habe hier nicht alles verstanden, Du hast das ja auch schon geschrieben, dass Du nicht weißt, ob Du alles verstanden hast.
Da hat Erich ja schon fast Glück. Welche Lösung hätte er andernfalls erhalten, wenn Du alles verstanden hättest. :19:

Erich hat sich entschieden und Dein Weg scheint ihm zuzusagen, also ist ist es nur gerecht, dass ich Dich jetzt verlasse. :05:

Bis zur nächsten Knobelei hoffentlich....
Gruß Atilla
Top
#67
Hallo Carsten,

jetzt wird es immer besser. Super!

Hier hätte ich doch noch Verbesserungsbedarf:
Code:
'in der Sub SearchAndSetNumber:
       Else
           ListEntryAdd "nichts gefunden:" & vbTab & "ab Zeile:" & Me.MyRowNumber & ", Datum: " & Me.txtDate & ",  Suchstring: " & Me.txtSearchString
       End If

Diese Meldung kommt ja wenn tatsächlich nix gefunden wird, aber auch wenn es die Suchstelle gibt weil bereits schon mal gesucht wurde und ein Eintrag in Spalte "B" existiert.
Könnte man das so abändern dass zwar diese Meldung kommt, aber die Zelle in der der Suchstring enthalten ist trotzdem angesprungen wird "ohne" dass der Eintrag in Spalte "B" sich ändern kann.
Das kann als Cross-Check sehr hilfreich sein.
Top
#68
Hallo Atilla,

(22.04.2017, 22:42)atilla schrieb: ... also ist ist es nur gerecht, dass ich Dich jetzt verlasse. :05:

"Da steh ich nun, ich armer Tor,
und bin so klug als wie zuvor.“



Einen kleinen Widerspruch muss ich aber doch einlegen:
Das ist nicht mein Weg, ich habe ihm seinen als Muster gebaut.


(22.04.2017, 22:42)atilla schrieb: Welche Lösung hätte er andernfalls erhalten, wenn Du alles verstanden hättest. :19:

Also das würde mich auch brennend interessieren. :D


Bis zum nächsten Mal,
Gruß Carsten
:)
Top
#69
Hallo Erich,

dann so als Zwischenlösung, wenn Du keine grundsätzlichen Änderungen an der Suchroutine und deren Aufruf vorgenommen hast :

Code:
       Else
           ListEntryAdd "nichts gefunden:" & vbTab & "ab Zeile:" & Me.MyRowNumber & ", Datum: " & Me.txtDate & ",  Suchstring: " & Me.txtSearchString
           Me.OptionButton1.SetFocus
       End If

Der Filter wird dann auf den Suchstring gelegt ...


Wie ich schon geschrieben habe ...
Grundsätzlich müsste man den Code nochmal überarbeiten und die Subs und Funktionen sinnvoller separieren.
Da ist überall noch zuviel 'MischMasch' enthalten, welcher besser separiert werden muss. Dann sind solche Wünsche ein Kinderspiel.


Gruß Carsten

Edit:
Im Userform fehlen auch noch zwei, drei Button zum Suchen und Anzeigen ohne das Kennzeichen zu setzen ...
Und ...
Und ...


:)
Top
#70
Hi Carsten,

was meinst Du mit
Und....???????????
Und....???????????

Für Verbesserungen und einfaches und sicheres Handling bin ich immer zu haben!!
Top


Gehe zu:


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