Office Forum
www.Office-Loesung.de
Access :: Excel :: Outlook :: PowerPoint :: Word :: Office :: Wieder Online ---> provisorisches Office Forum <-
1. Suchformular in 10 Minuten erstellt
Gehe zu Seite Zurück  1, 2, 3, 4
zurück: Tabelle mit Daten - Zahlenfeld in AutoNumber konvertieren weiter: Access Logo (Splashscreen) austauschen Unbeantwortete Beiträge anzeigen
Neues Thema eröffnen   Neue Antwort erstellen     Status: Antwort Facebook-Likes Diese Seite Freunden empfehlen
Zu Browser-Favoriten hinzufügen
Autor Nachricht
Bitsqueezer
Office-VBA-Programmierer


Verfasst am:
11. Jun 2012, 01:36
Rufname:

Suchformular in 3 Minuten erstellt - Suchformular in 3 Minuten erstellt

Nach oben
       

Hallo,

so, hier mal wieder ein Update der Filterklassen.

Neu ist:
  • Die neue Methode "SetFilterCombobox" in clsCCFilter erlaubt das automatische Befüllen von allen Filterfeldern, die als Combobox definiert wurden. Als Parameter muß der Name einer Tabelle oder View angegeben werden, die den betreffenden Feldnamen enthält (also i.d.R. den Tabellen-/Abfragenamen des Formulars). Die Angabe ist getrennt, da in ADPs bei der Angabe des Schemas Access bei der Recordsource den einfachen Namen verwendet, bei der Angabe in einem SELECT jedoch je nach Schemaname dieser auch in eckige Klammern gesetzt werden muß.
    Der zweite Parameter "strAdditionalFilter" ist optional und kann verwendet werden, um bei einem vorgefilterten Formular die gruppierte Combobox-RowSource auf den gleichen Filter einzustellen.
  • Bisher wurde der Default-Wert für den Filtertyp je nach Felddatentyp automatisch eingestellt. Jetzt kann man nach der Initialisierung über die Eigenschaft "FilterFieldType" der Datentyp und dessen Default für das jeweilige Filterfeld gesetzt werden.
  • Die oben von Jürgen beschriebenen Conditional Compiler-Anweisungen wurden hinzugefügt.
  • Die Änderung für den OnChange-Filtertyp wurden wie oben beschrieben hinzugefügt.
  • Eine Reihe kleinerer Bugfixes.
  • Die wichtigste Neuerung:
    Es gibt zwei neue Klassen namens "clsCCFilterPopup" sowie "clsCCFilterPopupOption", außerdem ein Formular "frmCCFilterPopup" und ein dazugehörendes UFO-Formular "frmCCFilterPopup_SF".
    Dazu passend gibt es zwei neue Demoformulare "frmFilterDemoPopup" und "frmFilterDemoPopup2", die die Möglichkeiten dieser neuen Klassen zeigen.
    In "modVariables" gibt es eine globale Variable, die man bei Verwendung der Popup-Methoden unbedingt beachten sollte.
Die Neuerung, die die neuen Filterklassen hinzufügt ist, daß man sich nun endlich auch das auf die Dauer mühsame definieren und designen von Filterfeldern ersparen kann. Der gesamte nun noch notwendige Code für ein eigenes Formular sieht so aus:
Code:
Option Compare Database
Option Explicit

' Public nur, um von außen auf das Popup-Formular zugreifen zu können
Public ObjFilterPopup As clsCCFilterPopup

Private Sub cmdFilter_Click()
    ObjFilterPopup.OpenFilterPopup
End Sub

Private Sub Form_Load()
    Set ObjFilterPopup = New clsCCFilterPopup
    With ObjFilterPopup
        .CreateFromRecordset Me                 ' Recordset des Formulars auslesen und Filterformular daraus erstellen
        .ObjFilter.SetFilterCombos "tblTest"    ' damit die Comboboxen gruppiert gefüllt werden
    End With
End Sub

Private Sub Form_Unload(Cancel As Integer)
    ' Unbedingt wichtig, damit die Popup-Formulare korrekt terminiert werden!
    Set ObjFilterPopup = Nothing
End Sub
Das einzige, was man seinem Formular an Controls also noch hinzufügen muß, ist ein Button zum Aufruf des Popup-Filterformulars, hier "cmdFilter" genannt. In dessen Click-Event wird das vorher im Form_Load-Event erzeugte Filterformular geöffnet.

Die Methode "CreateFromRecordset" erstellt aus dem Recordset, das dem Formular vorher natürlich schon zugewiesen sein muß, aus dessen ersten 50 Feldern (maximal 50 sind möglich) ein Formular, das je Datenfeld aus einem Label besteht, der entweder der Feldname ist oder selbst definiert werden kann, einem Button zum Löschen eines einzelnen Filters, einer Combobox zur Auswahl des Filtertyps sowie zwei Comboboxen zur Eingabe von "Von" - "Bis"-Werten. Die Comboboxen werden, wie oben beschrieben, anhand der angegebenen Tabelle mit den gruppierten Werten der jeweiligen Spalte befüllt.
Im Fall einer Checkbox gibt es statt der "Von"-"Bis"-Comboboxen nur die Checkbox.

Wichtig ist, im Unload-Event des Formulars das Objekt auf "Nothing" zu setzen, damit die Popup-Formulare aus der Forms-Auflistung ordentlich entfernt werden. Sollte es hier mal Probleme geben oder nicht abgefangene Fehler aufgetreten sein, die das ganze Objekt gelöscht haben, dann verbleibt das Popup-Formular u.U. in der Forms-Auflistung, und da dieses so eingestellt ist, daß es sich gegen unberechtigtes Unload "wehrt", kann so selbst Access nicht mehr beendet werden, solange das Formular noch existiert. Daher muß man in so einem Fall (und aus Sicherheitsgründen am besten immer direkt vor dem Beenden der Applikation im Code) die Variable "bolShutdownApplication" auf "True" setzen, dann gibt es keine Probleme beim Schließen (Freud und Leid der Forms-Auflistung und der halbgaren Quasi-Objektorientierung von Access...).

Noch schneller kann man ein Suchformular nun wirklich nicht mehr erstellen - einfach die Module in die eigene Datenbank importieren, einen Button erstellen, den Code oben einfügen, fertig. Das dauert sicher keine 3 Minuten mehr...Smile

Die neuen Popup-Klassenmodule enthalten auch wieder die aus den anderen Klassen schon bekannten Conditional Compiler Konstanten für die Umschaltung zwischen ADO und DAO (siehe frühere Beschreibung). Für eine Umstellung auf ADO muß die Konstante in jeder dieser Klassen umgestellt werden, wie bei den anderen Klassen auch. Die ADO-Variante ist vorwiegend für SQL Server gedacht. Getestet habe ich hier nur die DAO-Variante, da hier aber nicht viel Unterschied bei den neuen Klassen ist, sollte es wohl funktionieren.

Wie immer, freue ich mich über Kommentare und Feedbacks. Und wie immer dürfen die Codes frei verwendet werden, solange sich keiner an dem Verkauf der Klassen selbst bereichern will oder diese als seine eigene Arbeit ausgibt.

Viel Spaß beim noch komfortableren Filtern...Smile

Christian

PS.: Wenn beim Starten ein Hinweis auf eine fehlende MSO.dll erscheint, im VBA-Editor den Link zur Office 14.0 Library entfernen und den passenden der auf dem eigenen Rechner installierten Office-Version aktivieren.

PPS.: Kleiner Bugfix: In "clsCCFilterPopup" muß die "Class_Terminate" Sub wie folgt ausgetauscht werden, damit das Schließen reibungslos funktioniert:
Code:
Private Sub Class_Terminate()
    Dim frm As Access.Form
    Dim strName As String

    Me.FormFilterPopup.bolUnload = True
    Me.FormFilterPopup.Visible = False
    For Each frm In Application.Forms
        On Error Resume Next
        If frm.FormIdentifier = Me.FormFilterPopup.FormIdentifier Then
            If Err.Number = 0 Then
                frm.bolUnload = True
                strName = frm.Name
                Set frm = Nothing
                DoCmd.Close acForm, strName
              Else
                Err.Clear
            End If
        End If
    Next
    Set Me.FormFilterPopup = Nothing
    Set Me.ColOptions = Nothing
    Set Me.ObjFilter = Nothing
End Sub

PPPS:..Smile

Noch ein kleiner Bug, den Jürgen gefunden hat, da ist eine Zeile zuviel in "FilterApply" in "clsCCFilterField". Beschreibung, was man ändern muß, siehe hier:

AW: Suchformular in 10 Minuten erstellt Nachgefragt



FilterV2_7.zip
 Beschreibung:
Filterfelder V2.7 im Format A2000-2007

Download
 Dateiname:  FilterV2_7.zip
 Dateigröße:  1.61 MB
 Heruntergeladen:  883 mal

Gast



Verfasst am:
01. Aug 2012, 19:36
Rufname:


AW: 1. Suchformular in 10 Minuten erstellt - AW: 1. Suchformular in 10 Minuten erstellt

Nach oben
       

Dankeschön, die Hilfe hat mir für meine DB auch geholfen.

Alles SUPER
Bitsqueezer
Office-VBA-Programmierer


Verfasst am:
17. Aug 2012, 10:01
Rufname:

AW: 1. Suchformular in 10 Minuten erstellt - AW: 1. Suchformular in 10 Minuten erstellt

Nach oben
       

Hallo,

ein weiterer kleiner Bug, den JMalberg gefunden hat: Wenn man ein Hochkomma in ein Filterfeld eingibt, kommt es zu einer Fehlermeldung (weil das Hochkomma als Stringbegrenzer eingesetzt wird).

Lösung: In der Klasse "clsCCFilterField" müssen in der Sub "FilterApply" unter dem Abschnitt "Filter für Texte" die Variablen "strTextFrom" und "strTextTo" mit Replace so gefüllt werden:
Code:
    strTextFrom = Replace(Nz(varValueFrom), "'", "''")
    strTextTo = Replace(Nz(varValueTo), "'", "''")
Komplett sieht der Abschnitt dann so aus:
Code:
        ' ------------------------------ Filter für Texte
        Case enmCCFilterFieldType_Text
          strTextFrom = Replace(Nz(varValueFrom), "'", "''")
          If bolTo Then
              If Nz(varValueTo) = "" Then
                  strFilterType = prv_strFilterType
                  bolTo = False
                Else
                  strTextTo = Replace(Nz(varValueTo), "'", "''")
              End If
Bei Datum und numerischen Werten ist das nicht notwendig, da hier mit "IsNumeric" und "IsDate" nicht erlaubte Eingaben ausgeschlossen werden.

Nach dieser Änderung werden eingegebene Hochkommata problemlos gefunden.

Danke an Jürgen für's fleißige Testen und für die Fehlerrückmeldung

Christian
Dude1974
Fortgeschrittener Novice


Verfasst am:
17. Apr 2013, 08:48
Rufname: Ole

AW: 1. Suchformular in 10 Minuten erstellt - BRAVO !!! - AW: 1. Suchformular in 10 Minuten erstellt - BRAVO !!!

Nach oben
       

Jungs, und Mädels im Forum - IHR SEID DIE BESTEN !!!!
Funzt einwandfrei (mit etwas hilfe vom Willis - Beispiels DB weiter oben im Text)
Ein riesen sonniges Dankeschön.
ole
Malik39
Gast


Verfasst am:
26. Dez 2013, 14:39
Rufname:

AW: 1. Suchformular in 10 Minuten erstellt - AW: 1. Suchformular in 10 Minuten erstellt

Nach oben
       

Vielen vielen Dank dafür, hat mir sehr geholfen. Beste Grüße aus dem Norden
Vedouci
Neuling


Verfasst am:
07. März 2014, 13:54
Rufname:


AW: Suchformular in 10 Minuten erstellt Nachgefragt - AW: Suchformular in 10 Minuten erstellt Nachgefragt

Nach oben
       Version: Office 2007

Ich habe keine Nachfrage, wollte mich nur auf diesem Wege für die tolle Arbeit bedanken.

Natürlich lief nicht alles direkt so wie ich es wollte, das liegt aber eher daran, das ich mich mit VBA noch zu wenig auskenne und zu erst meine fehlerhaften Eingaben finden musste. Nun ist es genau so, wie wir es brauchen Smile
Neues Thema eröffnen   Neue Antwort erstellen Alle Zeiten sind
GMT + 1 Stunde

Gehe zu Seite Zurück  1, 2, 3, 4
Diese Seite Freunden empfehlen

Seite 4 von 4
Gehe zu:  
Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum herunterladen

----> Diese Seite Freunden empfehlen <------ Impressum - Besuchen Sie auch: Microsoft Excel-Formeln