VBA String Zerlegung

Fuchsei

Mitglied
Hi erstmal ich bin neu hier,
dieses Forum hat mir bis jetzt sehr geholfen, deswegen hab ich mich auch angemeldet.

Ich habe folgendes Problem :

Ich bin habe eine Datenbank mit Tabelle und Formular.

In diesem Formular habe ich eine Suchfunktion eingerichtet die über 3 Textfelder geht, nach diesen ich in 3 Spalten nach einer Zahl filtern kann.

Nun möchte ich aber gern mit einem Textfeld nach einer nach diesen drei Zahlen filtern, also muss ich wohl irgendwie mit left, middle und right arbeiten. Ich habe aber leider nur beschränkte Programmierkenntnisse. Gibt es irgendwie eine Möglichkeit dies in meinen derzeitigen Suchcode einzugliedern?

So sieht er bis jetzt aus:
Visual Basic:
 Public Sub SQLString(FieldValue As Variant, FieldName As String, _
                     Criteria As String, ArgCount As Integer, _
                     Typ As Integer, Optional bAnd As Boolean = True)
   
    If Nz(FieldValue, "") <> "" Then
        If bAnd Then
           
            If ArgCount > 0 Then Criteria = Criteria & " AND "
          Else
            
            If ArgCount > 0 Then Criteria = Criteria & " OR "
        End If
        Select Case Typ
          Case 1
            Criteria = Criteria & FieldName & "= #" & _
                       Format(CDate(FieldValue), "mm-dd-yyyy") & "#"
          Case 2
            Criteria = Criteria & FieldName & " Like '*" & FieldValue & "*'"
          Case 3
            Criteria = Criteria & FieldName & " = " & Str(FieldValue)
                                
          Case 4
            Criteria = Criteria & FieldName & " = '" & FieldValue & "'"
          Case 5
            If FieldValue = "Ja" Or FieldValue = "True" Or _
               FieldValue = True Then
                Criteria = Criteria & FieldName & " = -1"
              Else
                Criteria = Criteria & FieldName & " = 0"
            End If
        End Select
       
        ArgCount = ArgCount + 1
    End If
End Sub
 

Private Function Filterbedingung() As String
    Dim ArgCount As Integer
   
   
    ArgCount = 0
    myCriteria = ""
  
 

    SQLString Me![Geschaeftsstelle], "geschaef", myCriteria, ArgCount, 4
    SQLString Me!Service, "servicec", myCriteria, ArgCount, 4
    SQLString Me!Beraterposten, "beraterp", myCriteria, ArgCount, 4
   
    If myCriteria = "" Then myCriteria = "True"
    Filterbedingung = myCriteria
End Function
 

Private Sub Btn_FilterOn_Click()
 Me.Filter = Filterbedingung
 Me.FilterOn = True
End Sub
 
Private Sub Btn_FilterOff_Click()
    Me.FilterOn = False
    myCriteria = ""
End Sub

Ich bitte um schnelle Hilfe hab nämlich nicht mehr so viel zeit dafür.

Danke schon mal im Voraus.

Fuchsei :D
 
Zuletzt bearbeitet von einem Moderator:
Hallo!

Erstmal, bitte verwende die Codetags (in dem Fall [code=vb] und [/code]), dann kannst du deinen Code besser formatieren und er ist um Welten besser zu lesen.

Wie sieht denn so ein typisches Textfeld aus, dass du zerlegen willst?


Der Doc!
 
Hi Doc,
erstmal danke für deine Antwort. Also die Textfelder heißen wie oben genannt Geschäftsstelle, Service, und Beraterposten und suchen nur nach zahlen.
Das neue Textfeld soll praktisch alle beinhalten.
Ergo mit dem neuem Textfeld soll er mit den ersten 3 Zahlen die Spalte "geschaef" durchsuchen, und mit den nächsten 2 Zahlen die Spalte servicec, die letzten 2 zahlen sollen die Spalte "beraterp" durchsuchen.

Das müsste mann halt irgendwie in den Suchstring eingliedern der bei mir ja so aussieht:

Visual Basic:
SQLString Me![Geschaeftsstelle], "geschaef", myCriteria, ArgCount, 4
    SQLString Me!Service, "servicec", myCriteria, ArgCount, 4
    SQLString Me!Beraterposten, "beraterp", myCriteria, ArgCount, 4

Danke wieder mal im Voraus. :D

Fuchsei
 
Also, wenn ich das richtig verstehe, hast du dann nur mehr ein Textfeld, in dem eine einzige Zahl eingegeben wird. Diese Zahl ist ein Code der sich aus den Codes für die Geschäftsstelle, der Servicestelle und dem Beraterposten zusammensetzt.

Wenn die eingegebene Zahl immer 7-stellig ist, wäre das ganze sehr einfach zu lösen:
Visual Basic:
suchstring = Me!DeinTextfeld 'Zuweisung an Variable
Geschäft = Left(suchstring, 3)
Service = Mid(suchstring, 4, 2)
Berater = Right(suchstring, 2)

Sollte das ganze nicht 7-stellig sein, da die Geschäftsstelle nicht 3-stellig eingegeben wurde, müsstest du das ganze etwas abändern.
Visual Basic:
suchstring = Me!DeinTextfeld 'Zuweisung an Variable
Berater = Right(suchstring, 2)
suchstring = Right(suchstring, Len(suchstring) - 2)
Service = Right(suchstring, 2)
Geschäft = Left(suchstring, Len(suchstring) - 2)


Der Doc!
 
jo, das erste ist genau was ich brauche. Super, bin dir unglaublich dankbar.

Ich hab nur leider ne blöde Frage, tut mir leid ich programmier erst seit einer Woche mit vba.
Könntest du mir noch sagen wo ich deinen code jetzt hinsetzten muss dass das ganze funktioniert und wie ich dann meinen verändern muss. Sorry steh grad voll auf der leitung :D

Fuchsei :D
 
Das ganze gehört direkt vor deinen SQLString-Aufrufen, du musst halt nur die entsprechenden Variablen ersetzen:
Visual Basic:
suchstring = Me!DeinTextfeld 'Zuweisung an Variable
Geschäft = Left(suchstring, 3)
Service = Mid(suchstring, 4, 2)
Berater = Right(suchstring, 2)

SQLString Geschäft, "geschaef", myCriteria, ArgCount, 4
SQLString Service, "servicec", myCriteria, ArgCount, 4
SQLString Berater, "beraterp", myCriteria, ArgCount, 4


Der Doc!
 
Top Doc, super funktioniert perfekt. Vielen Dank für deine schnelle und gute Hilfe. Bin froh dass es es endlich klappt. Der Wahnsinn wenn man bedenkt dass ich vor einer Woche noch nie mit Access gearbeitet habe, und jetzt schon ein bisschen rum programmier. Das war nur mit diesem Forum möglich. Hier gefällts mir.

Eine Frage hätt ich aber noch: Kann man das iwie einstellen, bzw programmieren, dass bei Aufruf des Formulars erstmal kein einziger Datensatz angezeigt wird. Also erst nach der Suche dann die entsprechenden.

Danke vielmals

Fuchsei :D
 
Da kann ich dir jetzt leider nicht helfen, hab hier kein Access und auch schon lang nichts mehr damit getan (die vorige Frage war ja VBA).


Der Doc!
 

Neue Beiträge

Zurück