Access-o-Mania

Access-Forum (Deutsch/German) => Access-Hilfe => Thema gestartet von: bambi1408 am Oktober 31, 2016, 18:37:22

Titel: Access 2003 Makros in VBA konvertieren möglich?
Beitrag von: bambi1408 am Oktober 31, 2016, 18:37:22
Hallo Community

Bei meiner Internetrecherche habe ich leider nicht herausfinden können, ob es bei Access 2003 möglich ist, ein Makro in VBA-Code zu wandeln. Sollte das möglich sein, kann mir jemand erklären wie?

Vielen Dank und Gruss
Nicole
Titel: Re: Access 2003 Makros in VBA konvertieren möglich?
Beitrag von: MzKlMu am Oktober 31, 2016, 18:41:30
Hallo,
bei Access2003 war das noch wunderbar einfach.

Menü > Extras > Makro > Makro zu VBA konvertieren.

Vorher eine Makro markieren.
Titel: Re: Access 2003 Makros in VBA konvertieren möglich?
Beitrag von: bambi1408 am Oktober 31, 2016, 18:46:25
Danke für die schnelle Antwort....kannst du mir auch sagen, wie das bei Access 2007 läuft? Ich muss mit verschiedenen Versionen arbeiten.
Titel: Re: Access 2003 Makros in VBA konvertieren möglich?
Beitrag von: MzKlMu am Oktober 31, 2016, 18:48:37
Hallo,
nein, kann ich nicht. Ich habe kein neueres Access.
Titel: Re: Access 2003 Makros in VBA konvertieren möglich?
Beitrag von: MaggieMay am Oktober 31, 2016, 19:09:45
Hi,

in A2007 müsste das noch genauso gehen - hast du noch nicht nachgeschaut?
Titel: Re: Access 2003 Makros in VBA konvertieren möglich?
Beitrag von: bambi1408 am Oktober 31, 2016, 19:23:19
In A2007 finde ich halt die Schaltfläche Extras bzw Menü schon gar nicht, das ist ja anders aufgebaut wie das 2003.
Titel: Re: Access 2003 Makros in VBA konvertieren möglich?
Beitrag von: Josef P. am Oktober 31, 2016, 19:31:17
Hallo!

In Access 2016:
Makro im Entwurf öffnen --> Ribbon-Tab "Entwurf" --> "Makros in Visual Basic konvertieren"

mfg
Josef
Titel: Re: Access 2003 Makros in VBA konvertieren möglich?
Beitrag von: Lachtaube am Oktober 31, 2016, 19:37:57
Schau Dir das Bildchen im Anhang an - der Mauszeiger steht über Makros konvertieren.
Titel: Re: Access 2003 Makros in VBA konvertieren möglich?
Beitrag von: bambi1408 am Oktober 31, 2016, 19:41:40
Oh Man...manchmal ist man echt blind :-(

Vielen Dank für die vielen Antworten und die Hilfe.

LG Nicole
Titel: Re: Access 2003 Makros in VBA konvertieren möglich?
Beitrag von: bambi1408 am Oktober 31, 2016, 19:45:00
Wenn ich dies aber nun ausführe, dann schreibt er mir "Kein aktueller Datensatz". Woran könnte das liegen?
Titel: Re: Access 2003 Makros in VBA konvertieren möglich?
Beitrag von: MzKlMu am Oktober 31, 2016, 19:47:31
Hallo,
ZitatWoran könnte das liegen?
wie soll man etwas beurteilen das man nicht sieht?

Zeige also bitte den VBA Code und erkläre den Kontext in dieser angewendet wird.
Titel: Re: Access 2003 Makros in VBA konvertieren möglich?
Beitrag von: bambi1408 am Oktober 31, 2016, 19:57:51
Ich habe eine DB aus A2.0 vor einiger Zeit von einem netten Menschen in A2003 konvertieren lassen. Nun habe ich in der DB Filter mit Makros drin, die eine Adressdatenbank jeweils mit dem Anfangsbuchstaben filtern. Also wenn ich auf einen Knopf drücke wo B drauf steht, dann springt er zu dem ersten Namen der mit B anfängt. In der jetzigen Version mit dem Makro spinnt es halt manchmal, so das er mir bei Klick auf "B" nur ein leeres Formular anzeigt, wenn ich dann ein bisschen durch die Buchstaben zappe und wieder auf B gehe, dann nimmt er es dann meistens. Deswegen meine Überlegung das in VBA zu konvertieren.

Hier mal der Code
Function A_Z_Schaltflächen__Filter()
On Error GoTo A_Z_Schaltflächen__Filter_Err

    With CodeContextObject
        ' Verknüpft mit den Schaltflächen "A" bis "Z" und "Alle" im Formular "Adressen".
        If (.[Firmen Filter] = 1) Then
            ' Filter für Firmennamen, die mit  A, À, Á, Â, Ã, oder Ä beginnen.
            DoCmd.ApplyFilter "", "[Name] Like ""[123456789AÀÁÂÃÄ]*"""
        End If
        If (.[Firmen Filter] = 2) Then
            ' B
            DoCmd.ApplyFilter "", "[Name] Like ""B*"""
        End If
        If (.[Firmen Filter] = 3) Then
            ' C oder Ç
            DoCmd.ApplyFilter "", "[Name] Like ""[CÇ]*"""
        End If
        If (.[Firmen Filter] = 4) Then
            ' D
            DoCmd.ApplyFilter "", "[Name] Like ""D*"""
        End If
        If (.[Firmen Filter] = 5) Then
            ' E, È, É, Ê oder Ë
            DoCmd.ApplyFilter "", "[Name] Like ""[EÈÉÊË]*"""
        End If
        If (.[Firmen Filter] = 6) Then
            ' F
            DoCmd.ApplyFilter "", "[Name] Like ""F*"""
        End If
        If (.[Firmen Filter] = 7) Then
            ' G
            DoCmd.ApplyFilter "", "[Name] Like ""G*"""
        End If
        If (.[Firmen Filter] = 8) Then
            ' H
            DoCmd.ApplyFilter "", "[Name] Like ""H*"""
        End If
        If (.[Firmen Filter] = 9) Then
            ' I, Ì, Í, Î oder Ï
            DoCmd.ApplyFilter "", "[Name] Like ""[IÌÍÎÏ]*"""
        End If
        If (.[Firmen Filter] = 10) Then
            ' J
            DoCmd.ApplyFilter "", "[Name] Like ""J*"""
        End If
        If (.[Firmen Filter] = 11) Then
            ' K
            DoCmd.ApplyFilter "", "[Name] Like ""K*"""
        End If
        If (.[Firmen Filter] = 12) Then
            ' L
            DoCmd.ApplyFilter "", "[Name] Like ""L*"""
        End If
        If (.[Firmen Filter] = 13) Then
            ' M
            DoCmd.ApplyFilter "", "[Name] Like ""M*"""
        End If
        If (.[Firmen Filter] = 14) Then
            ' N, oder Ñ
            DoCmd.ApplyFilter "", "[Name] Like ""[NÑ]*"""
        End If
        If (.[Firmen Filter] = 15) Then
            ' O, Ò, Ó, Ô, Õ oder Ö
            DoCmd.ApplyFilter "", "[Name] Like ""[OÒÓÔÕÖ]*"""
        End If
        If (.[Firmen Filter] = 16) Then
            ' P
            DoCmd.ApplyFilter "", "[Name] Like ""P*"""
        End If
        If (.[Firmen Filter] = 17) Then
            ' Q
            DoCmd.ApplyFilter "", "[Name] Like ""Q*"""
        End If
        If (.[Firmen Filter] = 18) Then
            ' R
            DoCmd.ApplyFilter "", "[Name] Like ""R*"""
        End If
        If (.[Firmen Filter] = 19) Then
            ' S oder Š (S hacek)
            DoCmd.ApplyFilter "", "[Name] Like ""[SŠ]*"""
        End If
        If (.[Firmen Filter] = 20) Then
            ' T
            DoCmd.ApplyFilter "", "[Name] Like ""T*"""
        End If
        If (.[Firmen Filter] = 21) Then
            ' U, Ù, Ú, Û oder Ü
            DoCmd.ApplyFilter "", "[Name] Like ""[UÙÚÛÜ]*"""
        End If
        If (.[Firmen Filter] = 22) Then
            ' V
            DoCmd.ApplyFilter "", "[Name] Like ""V*"""
        End If
        If (.[Firmen Filter] = 23) Then
            ' W
            DoCmd.ApplyFilter "", "[Name] Like ""W*"""
        End If
        If (.[Firmen Filter] = 24) Then
            ' X
            DoCmd.ApplyFilter "", "[Name] Like ""X*"""
        End If
        If (.[Firmen Filter] = 25) Then
            ' Y, Ý oder  ÿ
            DoCmd.ApplyFilter "", "[Name] Like ""[YÝÿ]*"""
        End If
        If (.[Firmen Filter] = 26) Then
            ' Z, Æ, Ø oder  Å
            DoCmd.ApplyFilter "", "[Name] Like ""[ZÆØÅ]*"""
        End If
        If (.[Firmen Filter] = 27) Then
            ' Zeigt alle Datensätze an.
            DoCmd.ShowAllRecords
        End If
    End With


A_Z_Schaltflächen__Filter_Exit:
    Exit Function

A_Z_Schaltflächen__Filter_Err:
    MsgBox Error$
    Resume A_Z_Schaltflächen__Filter_Exit

End Function
Titel: Re: Access 2003 Makros in VBA konvertieren möglich?
Beitrag von: bambi1408 am Oktober 31, 2016, 20:22:08
Ich weiss auch gar nicht, ob das ganze überhaupt so realisierbar ist....
Titel: Re: Access 2003 Makros in VBA konvertieren möglich?
Beitrag von: MaggieMay am Oktober 31, 2016, 23:29:10
Hi,
Zitat von: bambi1408 am Oktober 31, 2016, 20:22:08
Ich weiss auch gar nicht, ob das ganze überhaupt so realisierbar ist....
dazu müsste man wiederum wissen, was "das Ganze" für dich bedeutet.

Beschreibe dein Problem bzw. die ganze Thematik doch bitte noch etwas ausführlicher.
Titel: Re: Access 2003 Makros in VBA konvertieren möglich?
Beitrag von: bambi1408 am November 01, 2016, 08:30:17
Guten Morgen

Kann mir mal eben jemand erklären wie ich ein Bild hier einfüge?
Dann ist das Ganze vielleicht etwas einfacher zu erklären.

Danke und sorry, hab das in der Hilfe nicht gefunden :-(

Gruss Nicole

Titel: Re: Access 2003 Makros in VBA konvertieren möglich?
Beitrag von: MzKlMu am November 01, 2016, 08:54:57
Hallo,
ZitatKann mir mal eben jemand erklären wie ich ein Bild hier einfüge?
bei einer Antwort erscheint unten die Option:
+Anhänge und andere Optionen
Ist eigentlich nicht zu übersehen.
Titel: Re: Access 2003 Makros in VBA konvertieren möglich?
Beitrag von: Josef P. am November 01, 2016, 12:19:04
Hallo!

Von Access konvertierter Makrocode ist meist nicht besonders gut gestaltet.
Function A_Z_Schaltflächen__Filter()
On Error GoTo A_Z_Schaltflächen__Filter_Err

    With CodeContextObject
        ' Verknüpft mit den Schaltflächen "A" bis "Z" und "Alle" im Formular "Adressen".
        If (.[Firmen Filter] = 1) Then
            ' Filter für Firmennamen, die mit  A, À, Á, Â, Ã, oder Ä beginnen.
            DoCmd.ApplyFilter "", "[Name] Like ""[123456789AÀÁÂÃÄ]*"""
        End If
        If (.[Firmen Filter] = 2) Then
            ' B
            DoCmd.ApplyFilter "", "[Name] Like ""B*"""
        End If
        If (.[Firmen Filter] = 3) Then
            ' C oder Ç
            DoCmd.ApplyFilter "", "[Name] Like ""[CÇ]*"""
        End If
       
        ...

        If (.[Firmen Filter] = 27) Then
            ' Zeigt alle Datensätze an.
            DoCmd.ShowAllRecords
        End If

   End With

A_Z_Schaltflächen__Filter_Exit:
    Exit Function

A_Z_Schaltflächen__Filter_Err:
    MsgBox Error$
    Resume A_Z_Schaltflächen__Filter_Exit

End Function


Ich gehe davon aus, dass [Firmen Filter] eine Optionsgruppe ist. Damit kann es nur eine gültige If-Bedingung im obigen Code geben. Es werden aber immer alle If-Bedingungen geprüft.

Dieser Code ist meiner Meinung nach besser lesbar (nur Refactoring, ohne andere Verbesserungsmaßnahmen):
Ich gehe davon aus, dass diese Funktion im Codemodul des Formulars enthalten ist, in dem sich auch die Optionsgruppe befindet.
Private Function A_Z_Schaltflächen__Filter()
On Error GoTo A_Z_Schaltflächen__Filter_Err
   
    dim NameFilterValue as string

    select case Me.[Firmen Filter].Value
        ' Verknüpft mit den Schaltflächen "A" bis "Z" und "Alle" im Formular "Adressen".
        Case 1 ' Filter für Firmennamen, die mit  A, À, Á, Â, Ã, oder Ä beginnen.
            NameFilterValue = "[123456789AÀÁÂÃÄ]"
        Case 2 ' B
            NameFilterValue  = "B"
        Case 3 ' C oder Ç
            NameFilterValue = "[CÇ]"
        ...

        Case 27 ' Zeigt alle Datensätze an.
            NameFilterValue  = vbnullstring
    End Select

    if len(NameFilterValue)>0 then
        me.Filter = "[Name] Like '" & NameFilterValue & "*'"
    else
        Me.Filter = vbnullstring
    end If
    me.FilterOn = (Len(NameFilterValue)>0)

A_Z_Schaltflächen__Filter_Exit:
    Exit Function

A_Z_Schaltflächen__Filter_Err:
    MsgBox Error$
    Resume A_Z_Schaltflächen__Filter_Exit

End Function



Anm.: Ich würde die Filter-Texte als Tag in den Buchstaben-Umschaltbuttons schreiben, dann würde der Filtercode noch viel kürzer werden. ;)

mfg
Josef
Titel: Re: Access 2003 Makros in VBA konvertieren möglich?
Beitrag von: bambi1408 am November 01, 2016, 12:50:30
Hallo Josef

Vielen Dank für deine Antwort. Ich habe diesen Button wo man Dateien und Bilder anfügen kann schon gesehen, aber es gibt ja auch die Möglichkeit, direkt in dem Beitrag ein Image einzufügen, und das wüsste ich gerne wie ich das hier mache.

ZitatAnm.: Ich würde die Filter-Texte als Tag in den Buchstaben-Umschaltbuttons schreiben, dann würde der Filtercode noch viel kürzer werden.
Welchen Teil meinst du genau?

Sorry ich bin wirklich ein Newbie in Access und steh da im Moment wirklich wie der Ochs vorm Berg. Ich finde irgendwie den Anfang nicht. Ich habe zum Beispiel versucht, einen Bezug in der Umschalttaste und dem VBA herzustellen, aber entweder hat er Probleme das auszulesen, vielleicht eben weil er immer alle If-Bedingungen prüft, oder ich check das nicht.

Vielen Dank jetzt schon einmal für die Hilfe.

Gruss Nicole
Titel: Re: Access 2003 Makros in VBA konvertieren möglich?
Beitrag von: MzKlMu am November 01, 2016, 12:59:30
Hallo,
Zitatdirekt in dem Beitrag ein Image einzufügen
das geht nur, wenn Du eine eigene Internetseite hast auf der Du das Bild darstellst. Der Link im Beitrag muss dann auf Deine Seite verweisen.
Titel: Re: Access 2003 Makros in VBA konvertieren möglich?
Beitrag von: bambi1408 am November 01, 2016, 13:21:25
Zitatdas geht nur, wenn Du eine eigene Internetseite hast auf der Du das Bild darstellst. Der Link im Beitrag muss dann auf Deine Seite verweisen.
Ah ok Danke Klaus.

Dann werde ich mal versuchen, das Problem etwas genauer zu erklären und die Bilder in den Anhang stellen.

Wir haben ein sehr altes Buchhaltungsprogramm,  das in Access2.0 geschrieben ist und wo man an die Tabellen heran kommt. Der Vorbesitzer der Firma hat dann mal vor etlichen Jahren eine Datenbank in AC2.0 gebaut, wo die Aufträge erfasst werden, die Artikel usw. Die Adressverwaltung wird auch in dieser DB gemacht, wobei allerdings auf die Tabelle aus dem Buchhaltungsprogramm zugegriffen wird. Aus diesem Grund können wir das ganze bisher auch nicht höher wie max. AC2007 konvertieren.
Im angehängten Bild PPS_1 sieht man, wie das ganze aussieht, wenn ich in einem Formular (Projekte) auf die Schaltfläche Adressen klicke. Eigentlich sollte er da direkt in dem unteren Feld die Adressen reinschreiben, beginnend mit der ersten. Das tut er aber nicht mehr, unter AC2.0 lief das noch.
Wenn ich jetzt auf "A" klicke, dann gibt er mir die Adressen schön aus, er gibt mir auch die Detailangaben in dem oberen Feld aus. Wenn ich auf eine andere Adresse klicke, dann aktualisiert er das auch schön oben. Drücke ich jetzt aber auf "B", bringt er mir oben sowie unten nur leere Felder. Wenn ich Glück habe, aktualisiert er mir das dann irgendwann nach ein bisschen rumzappen, manchmal aber auch nicht. Diesen Fehler hat er auch nicht nur bei "B", sondern bei einigen Buchstaben, allerdings nicht bei allen.

Ein weiteres Problem wo ich habe ist, das manche Firmen 2 oder 3 Adressen haben. Diese sind mit unterschiedlichen Kundennummern erfasst, also Firma A mit Firmensitz A hat die Kd. Nr. 1, Firma A mit Firmensitz B hat die Kd. Nr. 2. Klicke ich jetzt auf die Kd. Nr. 1, bekomme ich die Daten schön im oberen Feld aktualisiert, möchte ich jetzt allerdings das mir Kd. Nr. 2 angezeigt wird, funktioniert das nicht. Hat es allerding vorher auch schon nicht. Wenn ich den Firmennamen auch nur mit einem Buchstaben ändere, dann kann ich drauf zugreifen, von daher gehe ich davon aus, das die Abfrage (oder Filter) da nicht schön geschrieben ist??

ZitatIch gehe davon aus, dass [Firmen Filter] eine Optionsgruppe is
Ganz ehrlich, ich weiss es nicht. Ich habe nach diesem Namen gesucht, ihn aber in dem Eigenschaftenfenster bisher noch nicht entdecken können. Auch unter den Makros oder Modulen ist er nicht zu finden.

Gruss Nicole
Titel: Re: Access 2003 Makros in VBA konvertieren möglich?
Beitrag von: bambi1408 am November 01, 2016, 13:38:33
Die Anhänge fehlen noch
Titel: Re: Access 2003 Makros in VBA konvertieren möglich?
Beitrag von: bambi1408 am November 01, 2016, 17:20:35
Hallo nochmal

Ich hab jetzt hab ich mal den Code rausgefunden der im Hintergrund beim Klicken von den ABC Tasten noch abläuft. Vielleicht läuft ja auch da was falsch?

Function fktDatensatzklick3()

    Dim DocName As String
    Dim LinkCriteria As String
   
    DocName = "Adressen"
    LinkCriteria = "[NAME] = Forms![Adressen]![Feld159]"
     DoCmd.OpenForm DocName, , , LinkCriteria
   
    ' 30.09.14 Alternativcode
    ' Forms(DocName).Filter = LinkCriteria
    ' Forms(DocName).FilterOn = True
    ' Forms(DocName).Requery

End Function


Mit dem Alternativcode habe ich es auch schon versucht, das funktioniert auch nicht.

Gruss Nicole
Titel: Re: Access 2003 Makros in VBA konvertieren möglich?
Beitrag von: Josef P. am November 01, 2016, 18:00:51
Hallo!

Der letzte Code von dir zeigt einen Ablauf, um ein Formular gefiltert zu öffnen.
Ich erkenne keinen Zusammenhang mit dem Filtern durch das Klicken auf die Buchstaben-Umschaltflächen.
Falls das Formular in dem diese Funktionen ausgeführt werden auch das Formular "Adressen" ist, gehört vermutlich einiges umgebaut, um einen wartbaren und einigermaßen sauberen Code zu erhalten.
Der bisher gezeigte Code beeindruckt mich nicht besonders. ;)

Ich kann dir in diesem Forum zeigen, wie man Filtern kann - es wird aber vermutlich nicht möglich sein, deine gesamte Anwendung zu verbessern.
Wenn du bereit bist, dich in VBA einzuarbeiten, kann im Forum sicher geholfen werden. Ansonsten ist das eher ein Auftrag an jemanden, der sich mit Access und VBA auskennt. Das kosten zwar dann etwas, wenn niemand innerhalb des Unternehmens einspringen kann, spart aber vermutlich trotzdem Geld. ;)


ZitatVielleicht läuft ja auch da was falsch?
DocName = "Adressen"
LinkCriteria = "[NAME] = Forms![Adressen]![Feld159]"
DoCmd.OpenForm DocName, , , LinkCriteria

Mit diesem Code wird das Formular "Adressen" geöffnet und dann mit dem Wert der im Feld159 im Formular Adressen steht gefiltert. (Falls es bereits geöffnet ist, wird nur der Filterausdruck angewendet.)

Erkennst du die Absicht hinter diesem Code? Ich erkenne sie nämlich nicht. Ich weiß aber auch nicht, welche Aufgabe das Feld159 hat. Aus dem Namen kann ich nicht viel ableiten. ;)

mfg
Josef
Titel: Re: Access 2003 Makros in VBA konvertieren möglich?
Beitrag von: bambi1408 am November 01, 2016, 18:26:29
Hallo Josef

Vielen Dank für deine Antwort.
ZitatIch weiß aber auch nicht, was das Feld159 für eine Aufgabe hat.
Das Feld159 ist das Feld wo die ganzen Adressen drin stehen, also das Feld unterhalb von ABCDE.....

ZitatWenn du bereit bist, dich in VBA einzuarbeiten, kann im Forum sicher geholfen werden.
Natürlich bin ich bereit mich in VBA einzuarbeiten und bin über jede Hilfe dankbar. Die Firma hat leider momentan eine schlechte Auftragslage weshalb es nicht möglich ist, jemand externen damit zu beautragen.

Gruss Nicole
Titel: Re: Access 2003 Makros in VBA konvertieren möglich?
Beitrag von: Josef P. am November 01, 2016, 19:18:25
Hallo!

ZitatNatürlich bin ich bereit mich in VBA einzuarbeiten
Es könnte auch an der Bereitschaft der Vorgesetzten scheitern, dir dafür Zeit zu geben. ;)

ZitatDas Feld159 ist das Feld wo die ganzen Adressen drin stehen, ...
Kann es sein, dass mit den Buchstaben-Steuerelementen zuerst diese Adressliste gefiltert werden soll und dann nach Auswahl einer bestimmten Adresse in diesem Listenfeld (Feld159) im Formular der Datensatz angezeigt werden soll?


Aber erstmal zum Filtern eines gebundenes Formulars:
Dafür würde ich die Filter-Eigenschaft des Formulars verwenden.

Erstelle einmal zum Ausprobieren ein neues Formular als Endlosformular, binde das Formular an die Datenquelle mit den Adressdaten. Am besten erstellst du das in einer Kopie der Anwendung bzw. vielleicht überhaupt in einer kleinen Testanwendung, die du auch zum Download bereitstellen kannst. (Daten anonymisieren, nur die wichtigsten Tabellen und Formulare usw. bereitstellen)

Ich glaube nämlich, dass es einfacher ist, ein einem neuen Formular den Filter/Anzeige-Ablauf vereinfacht nachzubauen, um damit später die Probeme im eigentlich Formular zu finden, als sich gleich auf das vorhanden Formular zu stürzen.

Den Button bitte im Formular-Kopf oder Formular-Fuß einfügen und z. B. mit "cmdSetFilter" bezeichnen.

Teste dann z. B. als Reaktion auf einen Button-Click folgenden Code:
private sub cmdSetFilter_Click()
    SetFormFilter
End Sub

private sub SetFormFilter()
    Me.Filter = "[Name] like 'a*'"
    Me.FilterOn = True
End Sub

=> Du solltest nun nur noch Adressen sehen deren "Name" mit a beginnt.

Der Filterausdruck muss natürlich variabel im Code gestaltet werden können.

=> Umbau:
dim FilterString as String
dim FilterValue as String

FilterValue = "a" ' diese Anweisung könnte z. B. im zuvor gezeigten Select-Case-Block stehen
FilterString = "[Name] like '" & FilterValue & "*'"

Me.Filter = FilterString
Me.FilterOn = True


Anm.: ich hoffe nicht, dass Name zum Problem wird. Wenn er mit [] einklammert ist, sollte Access das eigentlich als Datenfeld annehmen. (Sicher bin ich mir allerdings nicht - aber das sehen wir spätestens beim 1. Test.)

Damit du gleich mit mehreren Buchstaben testen kannst, bauen wir eine Inputbox in die Prozedur ein.
Anm.: Die Inputbox ist nur zum Testen, die muss später wieder weg und durch die Optionsgruppe mit den Buchstaben ersetzt werden.
Zum Testen ist sie aber gut geeignet, da der Code übersichtlich bleibt.

private sub cmdSetFilter_Click()
    SetFormFilter
End Sub

private sub SetFormFilter()
 
    dim FilterString as String
    dim FilterValue as String

    FilterValue = Inputbox("Bitte Anfangsbuchstaben eingeben")
    FilterString = "[Name] like '" & FilterValue & "*'"

    Me.Filter = FilterString
    Me.FilterOn = True

End Sub


Sollten bei diesem Code bei der Eingabe von a Datensätze angezeigt werden und bei der Eingabe von b keine Datensätze kommen, gibt es keine Datensätze die mit b beginnen. ;)

Sollte das jetzt zu einfach gewesen sein, bitte gleich melden bzw. den Code so erweitern, dass die Optionsgruppe verwendet wird.

Anm.: Es sollten mit Google & Co. einige Beispiele zu finden sein, wie ein Formular gefiltert werden kann. Für deinen konrketen Anwendungsfall gehe ich nämlich auf die Besonderheiten Filterwerte in einen SQL-Text zu konvertieren nicht ein. Das brauchen wir hier nur nebenbei und ich will nicht vom eignetlichen Problem zu weit ablenken.

mfg
Josef
Titel: Re: Access 2003 Makros in VBA konvertieren möglich?
Beitrag von: MzKlMu am November 01, 2016, 19:22:17
Hallo,
ZitatAnm.: ich hoffe nicht, dass Name zum Problem wird. Wenn er mit [] einklammert ist, sollte Access das eigentlich als Datenfeld annehmen. (Sicher bin ich mir allerdings nicht - aber das sehen wir spätestens beim 1. Test.)
ich würde unter allen Umständen das Feld Name vermeiden. Aus eigener Erfahrung weis, dass das zu den unerklärlichsten Fehlern führt. Auch mit der Klammerung.

Nur als Anmerkung, zum Problem kann ich nichts beitragen.
Titel: Re: Access 2003 Makros in VBA konvertieren möglich?
Beitrag von: Josef P. am November 01, 2016, 19:28:36
Zitatich würde unter allen Umständen das Feld Name vermeiden.
Das auf jeden Fall!
Allerdings darf das dann Nicole im Formular korrigieren, da das vermutlich nicht nur beim Filtern vorkommen wird.
Daher dachte ich mir: probieren wir es einfach einmal auf gut Glück mit [Name] in einem Testformular aus. Dann haben wir wenigstens den Beweis, falls bereits [Name] beim Filtern Probleme macht. ;)

mfg
Josef
Titel: Re: Access 2003 Makros in VBA konvertieren möglich?
Beitrag von: bambi1408 am November 01, 2016, 19:31:09
Vielen Dank Josef, das du mir helfen möchtest.

ZitatKann es sein, dass mit den Buchstaben-Steuerelementen zuerst diese Adressliste gefiltert werden soll und dann nach Auswahl einer bestimmten Adresse in diesem Listenfeld (Feld159) im Formular der Datensatz angezeigt werden soll?
Also das würde ich eigentlich mit Nein beantworten. Im Feld159 werden eigentlich alle Datensätze aufgeführt, die in meiner Tabelle Adressen enthalten sind. Durch die Umschalttasten erreiche ich lediglich, das er mir in der Tabelle an den Datensatz springt, der mit dem ausgewählten Buchstaben anfängt, also bei B springt er zu dem Anfang der Adressen, wo der Firmenname mit B anfängt. Er listet mir aber nicht nur alle Firmen mit B auf, sondern fängt einfach nur da an und im Alphabet geht es dann normal weiter.
Für die Anzeige eines bestimmten Datensatzes ist der Formularbereich oberhalb der Umschalttasten zuständig. Also wenn ich im Feld159 eine Adresse anklicke, aktualisiert er mir über den Umschalttasten die Einzelheiten zur Adresse. Wie er die Daten da aber genau übergibt ist mir noch nicht klar, das müsste doch eigentlich mit einer Abfrage passieren oder?

Ansonsten werde ich deine Testversuche mal ausführen und schauen wie weit ich komm. Zu einfach ist das nicht unbedingt, ich bin froh wenn wir vorne anfangen, damit ich es auch wirklich nachvollziehen kann :-)

Gruss Nicole
Titel: Re: Access 2003 Makros in VBA konvertieren möglich?
Beitrag von: Josef P. am November 01, 2016, 19:35:12
ZitatDurch die Umschalttasten erreiche ich lediglich, das er mir in der Tabelle an den Datensatz springt, der mit dem ausgewählten Buchstaben anfängt, also bei B springt er zu dem Anfang der Adressen, wo der Firmenname mit B anfängt.
Gemäß Code (DoCmd.ApplyFilter) sollte aber nicht zum Datensatz gesprungen werden sondern nur noch die Datensätze angezeigt werden, die mit B beginnen.

mfg
Josef
Titel: Re: Access 2003 Makros in VBA konvertieren möglich?
Beitrag von: bambi1408 am November 01, 2016, 20:14:20
Josef ich habe jetzt dein Beispiel nachgebaut und alles funktioniert einwandfrei -:)

Jetzt habe ich eine Verständnisfrage: [Name] Bezieht sich das auf das Feld in der Tabelle?

ZitatGemäß Code (DoCmd.ApplyFilter) sollte aber nicht zum Datensatz gesprungen werden sondern nur noch die Datensätze angezeigt werden, die mit B beginnen.
Das scheint wohl nicht zu funktionieren :-(
Titel: Re: Access 2003 Makros in VBA konvertieren möglich?
Beitrag von: bambi1408 am November 01, 2016, 20:18:53
Zitat& FilterValue & "*'"
Das * ist einfach ein Platzhalter oder?

Kein Platzhalter sondern einfach das er nachfolgend alle Zeichen akzeptiert.

Habs auch schon ausprobiert...also wenn ich be eingebe, bringt er mir alle die mit be anfangen...klappt wirklich gut
Titel: Re: Access 2003 Makros in VBA konvertieren möglich?
Beitrag von: Josef P. am November 01, 2016, 21:21:56
Zitat
ZitatGemäß Code (DoCmd.ApplyFilter) sollte aber nicht zum Datensatz gesprungen werden sondern nur noch die Datensätze angezeigt werden, die mit B beginnen.
Das scheint wohl nicht zu funktionieren :-(
.. oder es wird etwas anderes ausgeführt.

Geh einmal in den Entwurf des Formulars, markiere die Optionsgruppe der Buttons und schau im Eigenschaftsfenster unter Ereignisse nach, was dort ausgeführt wird.
Eventuell auch bei den einzelnen Buchstaben-Umschaltflächen nachsehen, ob dort auf Ereignisse reagiert wird.


Weiter mit dem Test-Formular:
Kopiere bitte die Optionsgruppe mit den Buchstaben vom "Original"-Formular in dein Test-Formular und benenne die Optionsgruppe "ogNameFilterValue".
Im Original müsste diese Optionsgruppe "Firmen Filter" heißen.

Anschließend fügst du in das Testformular folgenden Code ein:
private function GetNameFilterValue() as String

    dim NameFilterValue as string

    With Me.ogNameFilterValue
      select case .Value
        Case 1 ' Filter für Firmennamen, die mit  A, À, Á, Â, Ã, oder Ä beginnen.
            NameFilterValue = "[123456789AÀÁÂÃÄ]"
        Case 3 ' C oder Ç
            NameFilterValue = "[CÇ]"
       
        ' ... hier später die restlichen Buchstaben auflisten, die für mehr als ein Zeichen stehen

        Case 27 ' Zeigt alle Datensätze an.
            NameFilterValue  = vbnullstring

        Case Else
             NameFilterValue  = Chr(64 + .Value)
      End Select
    End With

    GetNameFilterValue = NameFilterValue 

end function


Die Prozedur SetFormFilter änderst du auf:
private sub SetFormFilter()
 
    dim FilterString as String
    dim FilterValue as String

    FilterValue = GetNameFilterValue()
    FilterString = "[Name] like '" & FilterValue & "*'"

    Me.Filter = FilterString
    Me.FilterOn = True

End Sub


mfg
Josef
Titel: Re: Access 2003 Makros in VBA konvertieren möglich?
Beitrag von: bambi1408 am November 02, 2016, 06:49:27
ZitatGeh einmal in den Entwurf des Formulars, markiere die Optionsgruppe der Buttons und schau im Eigenschaftsfenster unter Ereignisse nach, was dort ausgeführt wird.
Eventuell auch bei den einzelnen Buchstaben-Umschaltflächen nachsehen, ob dort auf Ereignisse reagiert wird.

Das Problem ist, das er mir für die "Optionsgruppe" ABC.... keine Optionsgruppe anzeigt. Wenn ich aber alle Umschalter markiere, kopiere und dann in das Testformular einfüge, dann erhalte ich eine Optionsgruppe wo ich auch dann den Namen "Firmen Filter" habe. Schon seltsam. So kann ich dir auch nicht sagen, welches Ereignis er ausführt, da ich bei den Eigenschaften im Original keine Option "beim Klick" habe.

Im Original bekomme ich auf der Eigenschaftenseite angezeigt: Auswahltyp: Mehrfachauswahl, bei dem reinkopierten in das Testformular wird angezeigt: Auswahltyp: Optionsgruppe.
Weisst du was da falsch läuft?
Titel: Re: Access 2003 Makros in VBA konvertieren möglich?
Beitrag von: bambi1408 am November 02, 2016, 08:31:57
Hallo Josef

Habe jetzt mal dasFormular nach deinen Angaben geändert. Allerdings bringt er mir jetzt bei Klick die Fehlermeldung, das er nicht auf den Filter A-Z Schaltflächen nicht zugreifen kann, also auf das Makro. Muss ich da jetzt noch was ändern bei den einzelnen Umschaltern? Da ist ja jeweils der Filter angegeben und den hat er ja mitkopiert.
Titel: Re: Access 2003 Makros in VBA konvertieren möglich?
Beitrag von: Josef P. am November 02, 2016, 08:46:18
Hallo!

Versuche einmal im Original über das Eigenschaftsfenster die Optionsgruppe "Firmen Filter" auszuwählen. Der Name sollte im Dropdown zur Auswahl stehen.

ZitatAllerdings bringt er mir jetzt bei Klick die Fehlermeldung, das er nicht auf den Filter A-Z Schaltflächen nicht zugreifen kann, also auf das Makro.
Mit Makro meinst du die VBA-Funktion, oder?
Diesen Eintrag im Testformular bitte entfernen. Steht der Funktionsaufruf bei AfterUpdate?
Den Aufruf der Funktion als Eigenschaftseintrag ersetzen wir durch eine Ereignisbehandlung.

Private Sub ogNameFilterValue_AfterUpdate()
    SetFormFilter
End Sub
Titel: Re: Access 2003 Makros in VBA konvertieren möglich?
Beitrag von: bambi1408 am November 02, 2016, 11:11:41
ZitatVersuche einmal im Original über das Eigenschaftsfenster die Optionsgruppe "Firmen Filter" auszuwählen. Der Name sollte im Dropdown zur Auswahl stehen.
Ok das hat geklappt. Dann zeigt er mir folgendes bei Klick an:

Private Sub Firmen_Filter_Click() 
        DoCmd.DoMenuItem A_FORMBAR, A_RECORDSMENU, A_REFRESH, , A_MENU_VER20
End Sub


Das steht bei "Vor Aktualisierung"

Private Sub Firmen_Filter_BeforeUpdate(Cancel As Integer)

End Sub

und bei "Nach Aktualisierung" ist der Filtername vom Makro eingesetzt.

ZitatMit Makro meinst du die VBA-Funktion, oder?
Ich denke das er immer noch auf das Makro zugreifen will und mir deswegen diese Fehlermeldung bringt. Im VBA-Code habe ich Filternamen "A-Z Schaltflächen" ja nirgendwo drin. Wegen dem anderen schau ich gleich. Ich schaue auch mal, ob er bei dem Testformular in der Optionsgruppe irgendwo den Filter noch drin hat.
Titel: Re: Access 2003 Makros in VBA konvertieren möglich?
Beitrag von: bambi1408 am November 02, 2016, 13:18:06
Muss ich die einzelnen Reiter noch in Case 1, Case2 usw umbenennen oder bezieht er das automatisch?

Es funktioniert erst mal alles super bis hierher.
Titel: Re: Access 2003 Makros in VBA konvertieren möglich?
Beitrag von: Josef P. am November 02, 2016, 13:31:42
Reiter? Ist das ein Registersteuerelement? In der Optionsgruppe sollten das eher Umschaltflächen sein.
Aber egal was es ist - umbenennen ist nicht erforderlich. ;)

select-case bitte in der Hilfe nachlesen.
"Case" ist ein VBA-Statement.
1 - n sind die Werte, die in den Umschaltflächen eingestellt sind.

With Me.ogNameFilterValue
    select case .Value
        Case 1 ' Filter für Firmennamen, die mit  A, À, Á, Â, Ã, oder Ä beginnen.
            NameFilterValue = "[123456789AÀÁÂÃÄ]"
        Case 3 ' C oder Ç
            NameFilterValue = "[CÇ]"


Obiges könntes mit If- und ElseIf auch so schreiben:
With Me.ogNameFilterValue
    IF .Value = 1 then ' Filter für Firmennamen, die mit  A, À, Á, Â, Ã, oder Ä beginnen.
            NameFilterValue = "[123456789AÀÁÂÃÄ]"
   Elseif .Value = 3 then ' C oder Ç
            NameFilterValue = "[CÇ]"

Das finde ich zwar unübersichtlicher, aber vielleicht hilfts für Verstehen der Select-Case-Anweisung.

mfg
Josef
Titel: Re: Access 2003 Makros in VBA konvertieren möglich?
Beitrag von: bambi1408 am November 02, 2016, 16:28:41
Ok das hab ich jetzt soweit verstanden. Wie mache ich jetzt weiter oder kann ich das jetzt einfach so wie es ist in mein Original einbauen? Und es sollen mir ja im oberen Feld noch die Einzelheiten zur Adresse aktualisiert werden. Muss ich da jetzt was anpassen? Oder sollte das so funktionieren?
Titel: Re: Access 2003 Makros in VBA konvertieren möglich?
Beitrag von: bambi1408 am November 02, 2016, 17:39:12
Ich hab jetzt mal versucht, das ganze in mein Original einzubauen. Debuggt hab ich alles und er bringt keine Fehlermeldung mehr. Wenn ich die Optionsschalter durchklicke, aktualisiert er mir zwar oberhalb der Op.Schalter immer die erste Adresse vom betreffenden Buchstaben, im unteren ungebunden Feld 159 fängt er allerdings bei D an und das ändert sich auch durch das Umschalten nicht. Kannst du mir sagen, was ich da jetzt einbauen muss, damit er das macht?

Danke schon mal.
Gruss Nicole
Titel: Re: Access 2003 Makros in VBA konvertieren möglich?
Beitrag von: Josef P. am November 02, 2016, 18:04:11
Zitat
ZitatKann es sein, dass mit den Buchstaben-Steuerelementen zuerst diese Adressliste gefiltert werden soll und dann nach Auswahl einer bestimmten Adresse in diesem Listenfeld (Feld159) im Formular der Datensatz angezeigt werden soll?
Also das würde ich eigentlich mit Nein beantworten. Im Feld159 werden eigentlich alle Datensätze aufgeführt, die in meiner Tabelle Adressen enthalten sind.

Zitatim unteren ungebunden Feld 159 fängt er allerdings bei D an und das ändert sich auch durch das Umschalten nicht
Also wir doch gefiltert? ;)

Wie sieht die SQL-Anweisung (RowSource) der Listbox (Feld159) aus?

Vielleicht bereits
Me.Feld159.Requery
aus, um die Listbox zu filtern, falls die SQL-Anweisung entsprechend gestaltet ist.

mfg
Josef
Titel: Re: Access 2003 Makros in VBA konvertieren möglich?
Beitrag von: bambi1408 am November 02, 2016, 21:24:06
ZitatAlso wir doch gefiltert? ;)
Ja also gefiltert wird schon, aber es wird nicht nur ein einziger Datensatz angezeigt sondern er springt dann eigentlich nur zu dem ersten Datensatz mit dem Buchstaben. Aber alle anderen Buchstaben hat er darunter auch weiter aufgelistet.

Private Sub Feld159_GotFocus()
    Me.Requery
End Sub

Das habe ich mal versucht gehabt um das Listenfeld zu Aktualisieren, hatte aber im Original nichts gebracht. Das ist unter "Bei Focuserhalt".

ZitatWie sieht die SQL-Anweisung (RowSource) der Listbox (Feld159) aus?
Muss ich das anders einbauen?

Function fktDatensatzklick3()

    Dim DocName As String
    Dim LinkCriteria As String
   
    DocName = "Adressen"
    LinkCriteria = "[NAME] = Forms![Adressen]![Feld159]"
    DoCmd.OpenForm DocName, , , LinkCriteria

End Function

Das ist der Code der noch in dem Feld 159 definiert ist, unter "Beim Klicken".


Titel: Re: Access 2003 Makros in VBA konvertieren möglich?
Beitrag von: bambi1408 am November 03, 2016, 08:52:13
Guten Morgen

Ich habe mir die Datenherkunft für das Feld 159 nochmal genauer angeschaut. Die Herkunft ist aus einer Abfrage, die sich auf die Adresstabelle bezieht. Allerdings steht auch in der Herkunftsangabe folgendes :

From [Adressensort] WHERE (([Adressensort].[NAME] >= [NAMEF])) OR ((Adressensort.[SUCH_INDEX]=[Feld185]));
Adressensort ist die Abfrage. Aber NAMEF ist darunter nicht aufgeführt, also nehme ich mal an es ist ein Filter? Er muss sich ja irgendwie auf meine Umschalter darin beziehen. Kann ich das ganze jetzt mit einem VBA-Code bewerkstelligen?

Danke und Gruss
Nicole
Titel: Re: Access 2003 Makros in VBA konvertieren möglich?
Beitrag von: Josef P. am November 03, 2016, 09:38:10
Hallo!

NAMEF wird ein Steuerelement im Formular sein. Vermutlich mit einer Funktion im Steuerelementinhalt, die den in der Optionsgruppe ausgewählten Buchstaben zurückgibt.


ZitatPrivate Sub Feld159_GotFocus()
    Me.Requery
End Sub
Mit Me.Requery aktualisierst du die Formulardaten. Wenn du die Listbox aktualisieren willst, musst du Me.Feld159.Requery schreiben.

GotFocus der Listbox als Einstieg, um die Listbox zu akutalisieren, finde ich unpassend.
Besser du aktualisierst die Listbox nach Änderung der Optionsgruppe.

mfg
Josef
Titel: Re: Access 2003 Makros in VBA konvertieren möglich?
Beitrag von: bambi1408 am November 03, 2016, 13:12:40
Also ich bin schon mal einen (kleinen) Schritt weiter. Habs jetzt hinbekommen das er mir in dem ungebundenen Listenfeld sortiert...ABER er sortiert mir nicht richtig. Wenn ich auf A geh fängt er z.b. bei den Namen mit C an, die Namen mit V bringt er mir wenn ich auf U gehe usw., vielleicht habe ich die Requery einfach an der falschen Stelle oder ich muss die Filter neu einbinden? Wie kann ich die DB hier hochladen? Die ist 3 MB, obwohl sie nur eine Tabelle, eine Abfrage und ein Formular enthält.

Danke und Gruss
Nicole
Titel: Re: Access 2003 Makros in VBA konvertieren möglich?
Beitrag von: Josef P. am November 03, 2016, 15:15:01
Zitat.. das er mir in dem ungebundenen Listenfeld sortiert...
Du meinst "filtert" und nicht "sortiert", oder?

ZitatWie kann ich die DB hier hochladen? Die ist 3 MB, obwohl sie nur eine Tabelle, eine Abfrage und ein Formular enthält.
Komprimieren und dann zippen. Sollte das nicht reichen, könntest du noch mit einem /decompile (
http://www.donkarl.com?FAQ1.23) gefolgt von komprimieren die Größe verkleinern.
Oder du erstellst eine leere Datei und importierst alles aus der alten Daten. Das sollte dann wie /decompile + komrimieren wirken.

mfg
Josef
Titel: Re: Access 2003 Makros in VBA konvertieren möglich?
Beitrag von: Hondo am November 03, 2016, 15:30:32
Hallo,
eine Frage sei mir sicher gestattet, hat das alles noch mit dem ursprünglichen Thema zu tun?
Falls nicht, bitte bei weiteren/anderen Fragen ein neues Thema beginnen, danke.

Gruß Andreas
Titel: Re: Access 2003 Makros in VBA konvertieren möglich?
Beitrag von: bambi1408 am November 03, 2016, 20:03:31
Hallo Josef

klar meinte ich gefiltert und nicht sortiert...sorry  :)

Ich lade mal eben meine aktuelle DB hoch und im VBA-Code sind auch ein paar Sachen drin, die ich versucht habe, aber haben nicht funktioniert. Ich habe sie drin stehen lassen, einfach auskommentiert.

Was ich gemerkt habe ist folgendes: beim aktualisieren des Listenfeldes aktualisisert er mir eigentlich immer die Adressen, wo ich als letztes auf dem Umschalter war. Also wenn ich z.b. auf B gehe und danach auf C, filtert er von B an, wenn ich dann auf D gehe von C an.

Was er mir nur teilweise macht, ist das er den ersten Eintrag markiert. Das funktioniert mal und mal nicht.

Gruss Nicole
Titel: Re: Access 2003 Makros in VBA konvertieren möglich?
Beitrag von: Josef P. am November 03, 2016, 21:15:20
Hallo!

Den Zweck der Listbox verstehen ich nicht.
Steht in der Listbox im Originalformular der Name in der gebundenen Spalte?
Dann könnte ich mir zumindest vorstellen, dass man mit Klick auf die Listbox zum jeweiligen Datensatz springt. (Wobei das mit gesetztem Filter schwierig wird, wenn die Auswahl nicht in den gefilterten DS enthalten ist.)

Private Sub Liste9_AfterUpdate()
   GotoNameRecord Me.Liste9.Value
End Sub

Private Sub GotoNameRecord(ByVal NameToFind As String)
   With Me.RecordsetClone
      .FindFirst "[NAME] = '" & Replace(NameToFind, "'", "''") & "'"
      If Not .NoMatch Then
         Me.Bookmark = .Bookmark
      End If
   End With
End Sub



Die Aktualisierung der Listbox könntest du als Reaktion auf Form.Current umsetzen.
Private Sub Form_Current()
   Me.Liste9.Requery
End Sub


oder beim Filtern des Formulars:
Private Sub SetFormFilter()

    ...
   
    Me.Filter = FilterString
    Me.FilterOn = True

    Me.Liste9.Requery

End Sub


Mir kommt die Bedienung des Formulars etwas eigenartig vor.
Klickt man auf einen Filterbutton, werden die Datensätze nach diesem Anfangszeichen gefiltert. Die Listbox enthält aber auch Namen, die darüber hinaus gehen.
Klickt man dann auf einen Eintrag diese Liste soll was passieren?

Für mich wäre es logischer, dass mittels der Buttons das Formular und die Listbox gefiltert werden und dann mit Auswahl eines Datensatzes in der Listbox zu diesem DS gesprungen wird.

Oder es wird mit den Buttons die Listbox gefiltert und die Auswahl in der Listbox zeigt dann diesen Datensatz an.

Was macht der Code
' ersten Datensatz der Liste markieren ...
Me!Liste9.Selected(0) = True

in der Prozedur "GetNameFilterValue". Welchen Anteil hat dieser Code um den Filterwert zu ermitteln?
Falls er keinen hat, gehört er dort nicht rein. ;)
(Single-Responsibility-Prinzip (https://de.wikipedia.org/wiki/Single-Responsibility-Prinzip))

BTW: in der Tabelle fehlt ein Primärschlüssel.

mfg
Josef
Titel: Re: Access 2003 Makros in VBA konvertieren möglich?
Beitrag von: bambi1408 am November 04, 2016, 09:12:57
Guten Morgen

ZitatFür mich wäre es logischer, dass mittels der Buttons das Formular und die Listbox gefiltert werden und dann mit Auswahl eines Datensatzes in der Listbox zu diesem DS gesprungen wird.
Also ich denke das ist in etwa so wie im Original oder?

Also das Formular hat ja im Original im oberen Bereich die Felder, wo die Daten des aktuell ausgewählten Datensatzes ausgegeben werden. Dann kommt die Optionsgruppe und darunter das ungebundene Listenfeld. In diesem Listenfeld sollen die Datensätze gefiltert angezeigt werden, je nach dem welchen Umschalter man halt gedrückt hat. Im Original kann man dann im Listenfeld einen Datensatz markieren und der wird dann auch in die Felder oberhalb der Optionsgruppe ausgegeben.

Ich hatte jetzt einfach mal ein bisschen im Internet wegen der Aktualisierung des Listenfeldes mit Optionsgruppe gesucht und dann ein paar Sachen ausprobiert, die aber nicht wirklich zum Erfolg geführt haben. Hab die Codes davon aber drin stehen lassen und einfach auskommentiert, damit ich noch weiss was ich probiert habe.

ZitatWas macht der Code
' ersten Datensatz der Liste markieren ...
Me!Liste9.Selected(0) = True
Der soll mir eigentlich nach Betätigung eines Umschalters immer den ersten Datensatz der nun gefiltert in dem Listenfeld steht markieren, damit dieser schon oben aktualisiert wird. Muss ich das an eine andere Stelle setzen?

ZitatBTW: in der Tabelle fehlt ein Primärschlüssel.
In der Originaltabelle übernimmt die Kd.Nr. den Primärschlüssel.

Gruss Nicole


Titel: Re: Access 2003 Makros in VBA konvertieren möglich?
Beitrag von: Josef P. am November 04, 2016, 10:09:00
ZitatIn diesem Listenfeld sollen die Datensätze gefiltert angezeigt werden, je nach dem welchen Umschalter man halt gedrückt hat.
Das Listenfeld wird aber nicht nach den Buchstaben gefiltert, sondern nach dem aktuell im Formular angezeigten Namen.

ZitatIm Original kann man dann im Listenfeld einen Datensatz markieren und der wird dann auch in die Felder oberhalb der Optionsgruppe ausgegeben.
Wird auf genau diesen Datensatz gefiltert oder wird zum Datensatz gesprungen?

Zitat
ZitatWas macht der Code
' ersten Datensatz der Liste markieren ...
Me!Liste9.Selected(0) = True
Der soll mir eigentlich nach Betätigung eines Umschalters immer den ersten Datensatz der nun gefiltert in dem Listenfeld steht markieren, damit dieser schon oben aktualisiert wird. Muss ich das an eine andere Stelle setzen?
Bei meiner Frage ging es vor allem um: Was macht der Code in der Prozedur "GetNameFilterValue".
Stell dir vor du benötigst an anderer Stelle im Formular auch den Filterwert. Dann verwendest du die Funktion GetNameFilterValue, da diese dem Namen nach genau diesen liefert. Anschließend wunderst du dich, warum in der Listbox der markierte Eintrag geändert wurde.

ZitatIn der Originaltabelle übernimmt die Kd.Nr. den Primärschlüssel.
Dann solltest du auf diesen PK die Datensatzauswahl auslegen.
=> Kundennummer in die Listbox anfügen (sichtbar oder unsichtbar ist egal) und nach der Auswahl eines Eintrags in der Listbox zum Datensatz mit dieser Kundennummer springen.


BTW: Wären die anzuzeigenden Datenfelder in einem Unterformular, müsstest du nicht einmal Code dafür erstellen, da dann eine Verknüpfung vom Unterformular zum Listenfeld ausreichen würde.
Diese Variante behandlen wir in diesem Thread bitte nicht näher, wir schauen nur, wie wir die konvertierten Makros zum laufen bringen. ;)
.. also Refaktoring inkl. Korrektur ohne das Ergebnis bzw. die Schnittstellen zu ändern.

mfg
Josef
Titel: Re: Access 2003 Makros in VBA konvertieren möglich?
Beitrag von: bambi1408 am November 04, 2016, 11:25:43
Ich hab das Ganze jetzt mal ins Original eingebaut und soweit funktioniert es. Was er mir allerdings nicht macht, das er mir oberhalb der Optionsgruppe die Einzelheiten zu der angewählten Adresse ausgibt.
Hier mal der Code der denke ich diese Aktion eigentlich betreffen sollte:

Private Sub NAMEF_AfterUpdate()

    DoCmd.DoMenuItem A_FORMBAR, A_RECORDSMENU, A_REFRESH, , A_MENU_VER20

End Sub

Private Sub NAMEF_Change()

On Error GoTo Err_NAMEF_Change


    DoCmd.DoMenuItem A_FORMBAR, A_RECORDSMENU, A_REFRESH, , A_MENU_VER20

Exit_NAMEF_Change:
    Exit Sub

Err_NAMEF_Change:
    MsgBox Error$
    Resume Exit_NAMEF_Change

End Sub

Ist der Code falsch oder passt das jetzt mit dem Filter nicht?

Private Sub Feld159_GotFocus()
    Me.Requery
End Sub

Das kann ich im Original nicht rausnehmen, obwohl es in der Testumgebung nicht nötig ist. Aber im Original aktualisiert er mir dann die Liste wieder nicht.

Gruss Nicole
Titel: Re: Access 2003 Makros in VBA konvertieren möglich?
Beitrag von: Josef P. am November 04, 2016, 11:39:37
ZitatAber im Original aktualisiert er mir dann die Liste wieder nicht.
Dann musst du im Original selbst für die Aktualisierung sorgen. ;)
Eine Liste aktualisiert man mit Me.Listboxname.Requery und nicht durch das Aktualisieren der Datenquelle des Formulars. Wie und wo du diese Aktualisierung für dein Szenario einbauen kannst, zeigte ich dir schon.

Im Original ist für meinen Geschmack ziemlich viel "Pfusch"-Code enthalten. Vor allem diese DoMenuItem-Anweisungen solltest du ersetzen.
DoCmd.DoMenuItem A_FORMBAR, A_RECORDSMENU, [b]A_REFRESH[/b], , A_MENU_VER20
steht vermutlich für
Me.Refresh

Dafür musst du dich aber selbst etwas in VBA und das Access-Objektmodell einarbeiten. Im Forum ist mir das zu viel Aufwand.
Ich helfe gerne beim Konzept und bei Problemen einer Code-Verbesserung, aber umsetzen will ich sie nicht im Forum.

mfg
Josef
Titel: Re: Access 2003 Makros in VBA konvertieren möglich?
Beitrag von: bambi1408 am November 04, 2016, 13:19:36
Vielen Dank für Deine Antwort.


Kannst Du mir vielleicht noch sagen, wie ich es jetzt in meiner Testumgebung hinbekomme, das wenn ich jetzt einen Datensatz in der Liste anwähle, er mir den oben reinschreibt? Also oberhalb der Optionsgruppe, in die Felder?

ZitatEine Liste aktualisiert man mit Me.Listboxname.Requery und nicht durch das Aktualisieren der Datenquelle des Formulars. Wie und wo du diese Aktualisierung für dein Szenario einbauen kannst, zeigte ich dir schon.
Das hatte ich im Original so versucht, aber wenn ich das so wie in der Testumgebung nur bei dem Sub SetFormFilter() unterbringe, aktualisiert er mir sie halt nicht.

Gruss Nicole


Titel: Re: Access 2003 Makros in VBA konvertieren möglich?
Beitrag von: Josef P. am November 04, 2016, 14:53:34
Dein Listenfeld hängt vom im Formular angezeigten Datensatz ab.
Wenn du die Abhängigkeit auf die Optionsgruppe verlagerst, kannst du das Ändern der Optionsgruppe verwenden, um das Listenfeld zu aktualisieren.

Im gezeigten Testformular funktioniert das nur so:
1. Buchstaben in Optionsgruppe wählen
2. Formular mit Optionsgruppe filter => angezeigter Datensatz ändert sich
3. Listenfeld aktualisieren (da nun ein neuer Wert im Textfeld "NameF" steht.)

mfg
Josef
Titel: Re: Access 2003 Makros in VBA konvertieren möglich?
Beitrag von: bambi1408 am November 04, 2016, 15:12:39
Ok ich danke dir ganz herzlich für deine ausführliche Hilfe. Ich hoffe ich bekomme es jetzt so hin. Das ganze scheint etwas instabil zu laufen, da es mal klappt und mal nicht. Bei mir Zuhause klappt es mit dem Original meistens sehr gut, im Geschäft dagegen meistens eher nicht. Ist halt da ein anderes BS und das liegt dann vielleicht wirklich an dem ganzen Müll der im VBA drin steht.

Vielen Dank noch einmal und Gruss
Nicole
Titel: OT: DoMenuItem
Beitrag von: Beaker s.a. am November 04, 2016, 16:25:35
Hallo Josef,
Vor allem diese DoMenuItem-Anweisungen solltest du ersetzen.
Man sieht es ja Gottseidank nicht mehr so häufig; - aber gibt es irgendeine Liste,
die man heranziehen könnte um diese Anweisungen übersetzen zu können.
Da könne man eine Hilfe dazu präzisieren.
gruss ekkehard
Titel: Re: Access 2003 Makros in VBA konvertieren möglich?
Beitrag von: Josef P. am November 04, 2016, 17:57:48
Hallo!

Ich kenne keine Liste. Hab aber auch noch nie danach gesucht. ;-)

mfg
Josef
Titel: Re: Access 2003 Makros in VBA konvertieren möglich?
Beitrag von: bahasu am November 04, 2016, 18:27:25
Hi,
Zitat von: Beaker s.a. am November 04, 2016, 16:25:35
Hallo Josef,
Vor allem diese DoMenuItem-Anweisungen solltest du ersetzen.
Man sieht es ja Gottseidank nicht mehr so häufig; - aber gibt es irgendeine Liste,
die man heranziehen könnte um diese Anweisungen übersetzen zu können.

meinst Du etwas wie: http://access.mvps.org/access/RunCommand/domenuitem.htm

Harald
Titel: Re: Access 2003 Makros in VBA konvertieren möglich?
Beitrag von: Beaker s.a. am November 04, 2016, 18:38:35
Hallo Harald,
Ja, genau, - danke.

gruss ekkehard