Ich habe die Datensatznavigation im Formular ausgeblendet und eigene CommandButton dafür eingebaut.
Die Anzeige der Datensätze habe ich in eine Textbox eingebaut.
Das sieht so aus:
="DS " & [CurrentRecord] & " von " & DomAnzahl("*";Daten")
Das funktioniert sehr gut.
Aber wenn man den Filter aktiviert, dann wird ja unten in der normalen Datensatznavigation z.B. " von 3 (Gefiltert) angezeigt.
Ich möchte eine 2. Textbox haben, in der die Anzahl der gefilterten angezeigt wird.
Aber wie sieht der Steuerelementeinhalt dann aus?
Hi,
ruf in Deinem Anzeigesteuerelement die folgende Funktion auf, die so deklariert ist:
Private Function fx() As Long
fx = Me.RecordsetClone.RecordCount
End Function
Harald
Kannst du mir das etwas näher erklären?
Anzeigensteuerelement?
Und wie rufe ich, oder besser gesagt wie soll die Textbox die Funktion aufrufen?
Hi,
Zitat von: accessy am Januar 04, 2013, 22:40:15
Anzeigensteuerelement?
damit meinte ich das Textfeld, in dem Deine Anzahl an gefilterten Daten angezeigt wird.
Anbei ein Beispiel.
Dort gibt es ein Formular, bei dem ich die Datensatzanzeige (unten links) ausgeblendet habe.
Die Anzahl der Daten wird in einem ungebundenen Steuerelement angezeigt: In dessen Eigenschaft "Steuerelementinhalt" ist eingetragen: =fx()
Die Funktion fx ist im VBA-Teil des Formulars deklariert.
Private Function fx() As Long
Me.RecordsetClone.MoveLast
fx = Me.RecordsetClone.RecordCount
End Function
Harald
[Anhang gelöscht durch Administrator]
Ich habe mir dein Beispiel angesehen.
Irgendetwas stimmt nicht; bzw. ist falsch von meiner Seite her.
Ich habe die Function im VBA Teil des Formulars stehen.
Im Steuerelementinhalt der Textbox steht =fx()
Gehe ich vom Entwurf in die Formularansicht steht in der Textbox #Fehler
Hi,
kann es sein, dass gar keine Datensätze selektiert waren?
Vielleicht hilft:
On Error Resume Next
Me.RecordsetClone.MoveLast
fx = Me.RecordsetClone.RecordCount
Harald
Dieses
On Error Resume Next
bewirkt lediglich, dass jetzt immer nur 0 angezeigt wird.
Gibt es für die Anzahl der gefilterten Datensätze nicht auch so eine Möglichkeit
ohne VBA, also ohne Function?
So wie eingangs das hier auch geht
="DS " & [CurrentRecord] & " von " & DomAnzahl("*";Daten")
Hi,
vielleicht kannst Du eine abgespeckte und gezippte Datenbank (max als access 2003) zur Verfügung stellen, damit man jenseits von Spekulationen der Sache auf den Grund gehen kann.
Harald
Dieses Anliegen gab es schon mal und wurde wohl auch ohne VBA gelöst.
Ich habe es mal probiert, aber bekomme es nicht hin.
Meine Textbox hat den Namen GEFILTERT.
http://www.ms-office-forum.net/forum/showthread.php?t=200034
In dieser Lösung stehen die Zeilen, die du auch im VBA hast.
Aber wie soll man 2 Zeilen in die Eigenschaft der Textbox GEFILTERT bekommen?
Hallo,
das ist keine Lösung OHNE VBA!
Im Prinzip wie es Harald vorgeschlagen hatte.
Nimm mal den Code an die Stelle.
Private Function fx() As Long
If Me.RecordsetClone.RecordCount > 0 Then
Me.RecordsetClone.MoveLast
fx = Me.RecordsetClone.RecordCount
Else
fx = 0
End If
End Function
Wenn du keine programmierte Filterfunktion einsetzt, musst du den Filter zurücknehmen BEVOR du einen neuen setzt.
p.s. Habe das Beispiel von Harald ein wenig abgeändert und noch eine weitere Textbox eingebaut, in der nun die gleiche Anzeige stattfindet wie in den Access-eigenen Navifeldern
[Anhang gelöscht durch Administrator]
Volle Funktion. Super.....
Und gleich noch 2 Fragen hinterher
Ich habe den Code erweitert, so dass diese Textbox NUR bei aktivem Filter Werte anzeigt.
Aber es erscheint #Fehler. fx=0 oder fx="" geht also nicht. Ebenso Me.Gefiltert ="" geht auch nicht.
Zitat
Private Function fx() As Long
If Me.FilterOn = True Then
If Me.RecordsetClone.RecordCount > 0 Then
Me.RecordsetClone.MoveLast
fx = Me.RecordsetClone.RecordCount
Else
fx = 0
End If
Else
fx = ""
End If
End Function
Im Steuerlementeinhalt steht
Zitat
=fx() & " DS gefunden"
Zitat
Du schreibst
Wenn du keine programmierte Filterfunktion einsetzt, musst du den Filter zurücknehmen BEVOR du einen neuen setzt.
Dazu meine 2.Frage.
Zitat
Private Sub UniFilter_Change() 'Universalfilter
Me.Filter = "Mitarbeiter & Kunde & Funktion & Art & Status & Bemerkungen like '*" & Me!UniFilter.Text & "*'"
Me.FilterOn = True
End Sub
Private Sub UniFilter_DblClick(Cancel As Integer) 'Universalfilter Feld leeren
Me.UniFilter = " "
Me.FilterOn = False
End Sub
Beispiel:
Ich klicke in diese Textbox und gebe die Buchstaben Ber ein. Also für Berlin.
Ich klicke auf "B"... 215 gefunden
Ich klicke auf "E"....145 gefunden
Ich klicke auf "R"....37 gefunden...
wunderbar...Volle Funktion,
aber wenn ich manchmal nach einem Doppelklick in diesem Feld das ganze nochmal mache,
bekomme ich diese Werte 215,145,37 nicht mehr.
Als ob der Filter nicht "zurückgesetzt" ist, oder die Suche nicht von Anfang an der DB läuft.
Hast du dafür auch eine Lösung, was ich noch falsch mache?
Hallo,
vielleicht liegst's daran:
Private Sub UniFilter_Change() 'Universalfilter
Me.Filter = "Mitarbeiter & Kunde & Funktion & Art & Status & Bemerkungen like '*" & Me!UniFilter.Text & "*'"
Me.FilterOn = True
End Sub
Private Sub UniFilter_DblClick(Cancel As Integer) 'Universalfilter Feld leeren
Me.UniFilter = " "
Me.Filter= ""
Me.FilterOn = False
End Sub
Was passiert, wenn du zusätzlich 'grün' verwendest nachdem du das Filter-Feld entleert hast?
Anders bleibt der gesetzte Filterwert ja erhalten
Der erste Test sieht schon mal nicht schlecht aus.
Ich muss das noch bisschen länger testen.
Hast du auch eine Idee zu dem oben erwähnten Anliegen?
Die Textbox mit Namen GEFILTERT soll leer sein, wenn der Filter NICHT aktiv ist.
Aber es erscheint dieses #Fehler.
Wie bekomme ich das weg?
Hallo,
ZitatWie bekomme ich das weg?
If Me.FilterOn = False then
Me!GEFILTERT = ""
End If
Probier's mal - sollte funktionieren
bzw.
ZitatDie Textbox mit Namen GEFILTERT soll leer sein, wenn der Filter NICHT aktiv ist.
Welchem Feld der Musterlösung entpräche dieses Feld 'GEFILTERT'?
Hab's im Beispiel mal versucht nachzustellen... ;)
[Anhang gelöscht durch Administrator]
Ich kann das in deiner Muster DB nicht nachvollziehen.
Wenn der Code so aussieht, dann steht dort immer z.B. 545 DS gefunden.
Der Filter ist ja auch NICHT aktiv. Das ist dann klar.
Zitat
Private Function fx() As Long
If Me.RecordsetClone.RecordCount > 0 Then
Me.RecordsetClone.MoveLast
fx = Me.RecordsetClone.RecordCount
Else
fx = 0
End If
End Function
Das mit dem IF...THEN habe ich in allen möglichen Variationen gemacht.
Ich habe auch mal
If Me.FilterOn = False then
Me!GEFILTERT = ""
Exit Function
End If
getestet.
Jetzt habe ich mal was ganz verrücktes gemacht, was tatsächlich funktioniert.
Das sieht dann so aus:
Zitat
Private Function fx() As Long
If Me.FilterOn = True Then
Me.Gefiltert.ForeColor = 16777215 'Farbe weiss
Else
Me.Gefiltert.ForeColor = 4194304 'Farbe wie Back
End If
If Me.RecordsetClone.RecordCount > 0 Then
Me.RecordsetClone.MoveLast
fx = Me.RecordsetClone.RecordCount
Else
fx = 0
End If
End Function
Hallo,
was kannst du denn nicht nachvollziehen?
folgende Codes kommen im Formular zur Anwendung:
Private Function fx() As Long
If Me.RecordsetClone.RecordCount > 0 Then
Me.RecordsetClone.MoveLast
fx = Me.RecordsetClone.RecordCount
Else
fx = 0
End If
End Function
Private Sub Form_Current()
If Me.FilterOn = True Then
Me.GEFILTERT.Value = "DS " & [CurrentRecord] & " von " & fx()
Else
Me.GEFILTERT = ""
End If
End Sub
Das Feld GEFILTERT enthält KEINEN Steuerelemtinhalt!
Ob in dem Feld was angezeit wird oder nicht hängt vom Filter ab - ein = Inhalt, aus = kein Inhalt.
Geregelt wird das über das Formularereignis 'Beim Anzeigen' (Form_Current)
Schau mal die Formularereignisse an und vergleiche die Steuerelementinhalte der Felder.
Ev. habe ich das alte Beispiel nochmal angehängt - daher nochmal ein Anhang.
[Anhang gelöscht durch Administrator]
Im ersten Anhang gab es keinen Code
Private Sub Form_Current()
Jetzt ist es klar und funktioniert.
Ich musste allerding im Steuerelementeinhalt alles rausnehmen, sonst gibts nen Fehler 2448.
Aber eine Sache bleibt noch.
In Excel gibt es das Ereignis Workbook_Open.
Das hat Access scheinbar nicht. Ich habe mal das
Me.Gefiltert = ""
ins Private Sub Form_Load()
und ins
Private Sub Form_Open
eingebaut.
Aber es ist ohne Wirkung.
Es wäre halt schön, wenn beim Öffnen der DB die Textbox GEFILTERT leer ist.
Da steht beim Öffnen DS 1 von 545 drin.
Erst, wenn der Filter mal aktiviert wurde und zurückgesetzt, ist die Textbox leer.
Hi,
vielleicht hilft es, wenn Du beim Lade-Ereignis auch noch einbaust:
Me.FilterOn = false
Harald
Ja, das hat geholfen.
Ich bedanke mich vielmals für deine Bemühungen meine kleine DB benutzerfreundlich zu gestalten.
Schönes Weekend.
Guten Morgen,
ZitatIch musste allerding im Steuerelementeinhalt alles rausnehmen, sonst gibts nen Fehler 2448
Darauf hatte ich in meiner Antwort explizit hingewiesen. ::)
Bitte nicht vergessen abgeschlossene Beiträge als 'gelöst' zu kennzeichnen - DANKE
Schönen Sonntag!
Vergesse ich manchmal.
Werde mich bemühen daran zu denken.
Vielen Dank nochmal für die ausgiebige Unterstützung.
So, jetzt habe ich schon 5x das Symbol für "Gelöst" angewählt in der ComboBox, aber vorne wird das nicht gezeigt.
Zitat von: accessy am Januar 06, 2013, 12:53:04
So, jetzt habe ich schon 5x das Symbol für "Gelöst" angewählt in der ComboBox, aber vorne wird das nicht gezeigt.
Probier mal, bei Deinem ersten Beitrag das "Gelöst" anzuklicken.
Harald