Hi,
ich habe in einem Endlosformular die 12 Monate. Beim Klick auf den jeweiligen Monat soll erst absteigend, beim nächsten Klick aufsteigend usw. sortiert werden.
Meine VBA hierfür lautet
Private Sub okt_Bezeichnungsfeld_Click()
Dim strsql As String
Dim a As Integer
a = 1
If a Mod 2 = 0 Then
strsql = "SELECT lehrer.* FROM lehrer ORDER BY lehrer.okt ASC;"
Else
strsql = "SELECT lehrer.* FROM lehrer ORDER BY lehrer.okt DESC; "
End If
Me.RecordSource = strsql
End Sub
Leider wird die Variable a immer wieder auf 1 gesetzt. Mann könnte sie vermutlich in eine Hilfstabelle schreiben/lesen.
Wie löse ich das Problem am besten?
Vielen Dank
Jo
P.S.: Meine VBA-Kenntnisse sind realtiv gering!
Hi,
der Teil
Dim a As Integer
a = 1
stört hier.
1. im Modul deklarieren:
Public a as integer ' byte oder boolean wären auch verwendbar
2. Im Formular beim Ereignis "beim Öffnen" die Zeile hinzufügen:
a = 1
Harald
Herzlichen DANK!!! Klappt perfekt!
Ich habe doch noch ein Problem
Da ich nach den Werten in den Monaten Sep - Aug sortieren will, sieht mein Modul so aus:
Option Compare Database
Public a As Integer
Public b As Integer
Public c As Integer
Public d As Integer
Public e As Integer
Public f As Integer
Public g As Integer
Public h As Integer
Public i As Integer
Public j As Integer
Public k As Integer
Public l As Integer
Beim Formular habe ich unter "Bei Laden" folgendes eingetragen
a=1;b=1;c=1;d=1;e=1;f=1;g=1;h=1;i=1;j=1;k=1;l=1
Ich bekomme jetzt immer den Fehler .... (siehe Anlage)
Hallo,
""Bei Laden" ???
Was verfolgst Du damit?
Habe mich vertan: steht natürlich bei "Beim Öffnen".
Geht aber trotztdem nicht?!
Hi
Zitat von: linuxluder am Oktober 25, 2013, 16:22:04
a=1;b=1;c=1;d=1;e=1;f=1;g=1;h=1;i=1;j=1;k=1;l=1
kann es sein, dass Du von der Pascal-Programmierung kommst?
Auch wenn mir der Sinn noch nicht klar, sollte die obige Zeile aufgeteilt werden:
a=1
b=1
c=1
d=1
e=1
f=1
g=1
h=1
i=1
j=1
k=1
l=1
Du solltest die Fragen von Franz beantworten:
Was ist Dein Ziel?
Danach kann man den Weg versuchen zu gehen.
Harald
Hallo,
ich denke mal, der "Code" steht direkt in der Zeile der "Beim Laden"- oder "Beim Öffnen"-Eigenschaft anstelle in der entspr. Ereignisprozedur....
Es sollte halt so aussehen:
In der Eigenschaften-Zeile des" Beim-Laden"-Ereignissses:
[Ereignisprozedur]
und der dazugehörenden Prozedur-Code:
Private Sub Form_Load()
a=1
b=1
c=1
d=1
e=1
f=1
g=1
h=1
i=1
j=1
k=1
l=1
End Sub
Zur Ausgangsfrage:
Zitatich habe in einem Endlosformular die 12 Monate. Beim Klick auf den jeweiligen Monat soll erst absteigend, beim nächsten Klick aufsteigend usw. sortiert werden.
Was hat die Sortierung mit dem "jeweiligen" Monat zu tun? Entweder wird die Datensätze aufsteigend oder absteigend bezgl. der Monatszahl (oder halt des Monatsnamens, dann aber alphanumerische Sortierung) sortiert....
Soll beim Klick auf das (beim Endlosform auf irgendein) Monatsfeld ("MeinMonatsfeld") abwechselnd sortiert werden, dann könnte das so realisiert werden:
Sub MeinMonatsfeld_Click()
If Me.Orderby = "MeinMonatsfeld Desc" Then
Me.Orderby = "MeinMonatsfeld Asc"
Else
Me.Orderby = "MeinMonatsfeld Desc"
End If
Me.OrderbyOn =true
End Sub
Hi, vielen Dank für eure Antworten. Der Fehler lag daran, dass ich die Variablen zum Laden beim Öffnen des Formulars nicht in das Modul kopierte. Jetzt klappt.
Wie ich jetzt gerade hier sehe, hätte ich mir das mit den 12 Variablen sparen können.
Aber bitte gestattet mir in diesem Zusammenhang noch eine Frage.
Ich lasse mir jeweis die Summe von drei Monaten in ein "neues" Formular-Feld schreiben.
Im Steuerelementinhalt schreibe ich =[sep]+[okt]+[nov]
Wie kann ich nun am einfachsten nach den Werten dieses Feldes sortieren?
Hallo,
irgendwie versteh ich nicht, was du vorhast...
Wenn Du im Form 4 Felder (entsprechend der Jahresquartale) hast und in denen jeweils die Summen aus den entspr. Monats(-beträgen) stehen, was soll denn da sortiert werden?
Vielen Dank für deine Geduld.
Bei angehängtem Bild siehst du die drei Monate, Sep-Nov. Aus deren Werte errechnet sich das gelb markierte Feld.
Nun möchte ich, außer der Sortierung nach den Monaten, die ja nun klappt, auch nach diesem Feld auf- oder absteigend sortieren.
Hallo,
berechne die Quartalssummen in einer berechneten Abfrage (für das Formular) und sortiere nach diesen Feldern
Würde es mit VBA in dem gleichen Stil wie die Sortierung nach Monaten auch gehen. Wie ich das Formular mit eine Abfrage kombinieren soll, weiß ich leider nicht.
Hallo,
probier mal:
Sub MeinMonatsfeld_Click()
If Me.Orderby = "[sep]+[okt]+[nov] Desc" Then
Me.Orderby = "[sep]+[okt]+[nov] Asc"
Else
Me.Orderby = "[sep]+[okt]+[nov] Desc"
End If
Me.OrderbyOn =true
End Sub
geht leider nicht
Wenn ich das berechnete Feld in eine Tabelle schreibe, wäre es dann besser?
Hallo,
WAS geht nicht?
Gibt es die Felder in der Tabelle?
Wird der Code abgearbeitet?
Ist der Order-String EXACT in der If-Bedingung angegeben?
Änder den Code in dieses:
Sub MeinMonatsfeld_Click()
If Instr(Me.Orderby,"Desc") Then
Me.Orderby = "[sep]+[okt]+[nov] Asc"
Else
Me.Orderby = "[sep]+[okt]+[nov] Desc"
End If
Me.OrderbyOn =true
End Sub
Hallo Franz,
danke für deine nochmalige Antwort.
Also, dein zuletzt geposteter Code klappt, allerdings erfolgt die Sortierung nur absteigend. Bei einem nochmaligen Klick bleibt die Sortierung erhalten.
Sag mir bitte einfach nur, ob du mir noch einen Vorschlage schicken willst. Sonst mache ich es einfach wieder mit "modulo". Allerdings müsste ich dazu das berechnete Feld erst in eine Tabelle schreiben, oder?
Schöne Größe von der Donau an den Bodensee
Jo
Hallo,
wir sollten die Ursache für das Fehlverhalten suchen und eliminieren, nicht auf andere fragwürdige Lösungswege ausweichen.
Setz mal einen Haltepunkt an den Code-Anfang und durchlaufe ihn mit Einzelschritt.. Dabei prüfst Du den jeweils den Inhalt der Orderby-Eigenschaft und auch die "Instr" -Funktion.
Vielen Dank, aber da fehlen mir, wie bereits erwähnt, die VBA Grundlagen. Wenn ich am Anfang des Codes "Private Sub ..." einen Haltepunkt setze und dann kommt mit der Taste F8 (Einzelschritt) nur ein "Pling" aus dem Lautsprecher. Ist mir jetzt echt peinlich, das so zu schreiben :'(
Hallo,
erst muss mal die Prozedur durch den normalen Ablauf aufgerufen werden, sprich durch Klick auf das Feld....
So, jetzt:
Ich klicke auf das entsprechende Feld, und dann immer auf F8
Die Sortierung ist sofort absteigend.
Private Sub Bezeichnungsfeld112_Click()
If InStr(Me.OrderBy, "Desc") Then -> InStr (Me.OrderBy, "Desc")=0 ; Me.OrderBy = "[sep]+[okt]+[nov] Asc"
Me.OrderBy = "[sep]+[okt]+[nov] Asc" -> wird nicht angesprungen
Else -> Sprung in dies Zeile
Me.OrderBy = "[sep]+[okt]+[nov] Desc" -> wird ausgeführt
End If
Me.OrderB
Bin ich mit F8 in der letzten Zeile, so werden alle Felder, in den die zu sortierenden Werte enthalten sind, mit #Fehler gefüllt.
Das geschieht bei der Ausführung ohne Einzelschritte nicht.
Hallo,
welche Acc-Version benutzt Du?
Kannst Du die Db (datenreduziert und komprimiert/repariert und gezippt) hier hochladen?
Ich habe dieses Prinzip an einer Acc2013 32Bit (und 64-Bit) Version unter Win7 erfolgreich getestet...
Es muss natürlich solange F8 gedrückt werden, bis die Prozedur vollständig durchlaufen ist (und der Haltepunkt auch wieder entfernt werden) .
Danke im Voraus.
Hallo,
es fehlen
Option Compare Database
Option Explicit
in den Modul-Köpfen.
Zudem ist runcommand acSaveRecord überflüssig, solange man aus dem Form heraus keinen Bericht aufruft, der die aktuellen Formular-Daten anzeigen soll.
Option Compare Database
Option Explicit
Private Sub Bezeichnungsfeld112_Click()
If InStr(Me.OrderBy, "Desc") Then
Me.OrderBy = "[sep]+[okt]+[nov] Asc"
Else
Me.OrderBy = "[sep]+[okt]+[nov] Desc"
End If
Me.OrderByOn = True
End Sub
Private Sub Befehl77_Click()
DoCmd.RunCommand acCmdSaveRecord
DoCmd.OpenReport "dozenten", acViewNormal, , _
"[lid]=" & Me!lid
End Sub
Private Sub Befehl153_Click()
Me!sep = Nz(Me!sep, 0) - 1
End Sub
Private Sub Befehl154_Click()
Me!sep = Nz(Me!sep, 0) + 1
End Sub
Herzlichen Dank!!!
Würde es dir viel ausmachen, mir die DB hier zurück ins Netz zu stellen?
..
VIELEN LIEBEN DANK!!!
Ich denk an dich, wenn ich das nächste mal nach Zürich fahre!
Hallo,
es ist zwar schon lange her, aber ich habe nochmal eine Frage, die jetzt erst aufgetaucht ist. Beim Klick auf ein Feld wird ASC sortiert, nochmaliges Klicken für zur DESC-Sortierung. Warum bekomme ich aber negative Werte nie zuerst angezeigt?
Danke
Jo
Hallo,
in der Beispiel-DB funktioniert das aber, wie hast du es denn umgesetzt?
Hi,
ich habe es so umgesetzt:
Private Sub okt_Bezeichnungsfeld_Click()
Dim strsql As String
c = c + 1
If c Mod 2 = 0 Then
strsql = "SELECT menge.* FROM menge ORDER BY menge.okt ASC;"
Else
strsql = "SELECT menge.* FROM menge ORDER BY menge.okt DESC; "
End If
Me.RecordSource = strsql
End Sub
EDIT
Danke, ich habs. Es lag daran, dass ich statt 0 einfach nichts in den Feldern hatte und somit klappte die Sortierung nicht ordentliche, das erst die leeren Felder gelistet wurden.