Hallo Erich,
(22.04.2017, 19: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:
[
attachment=10905]
Diese tauchen sonst in der Suche auf und müssen normalerweise immer weggefiltert werden:
[
attachment=10906]
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