Hallo zusammen,
ich war jetzt lange Zeit aus der VBA Programmierung draus und muss jetzt mal wieder ran. Ich hoffe ihr könnt mir helfen. Vielen Dank schonmal im Voraus.
Zum Thema:
Ich habe eine DB in Access aus dem Office365. Dort werden natürlich Auswertungen und auch Berichte mit Diagrammen erstellt. Damit die Diagramme in einem Bericht die gleiche Range und Unterteilung haben soll diese vorgebenen werden können. Soll heißen der User soll sich min und max selbst einstellen können. Ich hatte das im alten Access mal programmiert (code siehe unten) aber mit den neuen Diagrammen im Access 365 funktioniert das nicht mehr. Da bekomme ich die Fehlermeldung Objektvariable oder With-Blockvariable nicht festgelegt.
Vielleicht noch zur Info. Die Skalierungswerte können in ein Formular eingeben werden. Diese sind auch im aktiven Formular verfügbar
Alter code:
With Reports("B_Test").Controls("Diagramm3").Object.Application.Chart.Axes(xlValue)
.MinimumScale = Forms!AF!y_PrimAchse_Min
.MaximumScale = Forms!AF!y_PrimAchse_Max
.MinorUnit = Forms!AF!y_PrimAchs_Hilfsintervall
.MajorUnit = Forms!AF!y_PrimAchs_Hauptintervall
.Crosses = xlAutomatic
.ReversePlotOrder = False
.ScaleType = xlLinear
End With
VIELEN DANK
Zitat von: tidl am April 19, 2022, 08:14:11Ich hatte das im alten Access mal programmiert (code siehe unten) aber mit den neuen Diagrammen im Access 365 funktioniert das nicht mehr. Da bekomme ich die Fehlermeldung Objektvariable oder With-Blockvariable nicht festgelegt.
Du kannst auch in aktuellen Access-Versionen weiterhin die klassischen Charts verwenden. Das wäre vielleicht die einfachere Lösung, wenn du dafür bereits allen benötigten Code vorliegen hast.
Die Fehlermeldung kommt daher, dass bei den Modern Charts bereits die Referenz auf das Access-Control (
Reports("B_Test").Controls("Diagramm3")) ausreichen sollte. Die Namen der Eigenschaften sind dann auch anders, sofern es überhaupt alle der Eigenschaften gibt.
Hallo und Danke,
leider komme ich damit nicht weiter.
Jetzt bekomme ich die Meldung Objektvariable oder With Blockvariable nicht festgelegt.
Wie müsste man beim Access 2016 die Objektvariable für ein Diagramm festlegen?
MfG
Tidl
Zitat von: tidl am April 19, 2022, 11:23:41Jetzt bekomme ich die Meldung Objektvariable oder With Blockvariable nicht festgelegt.
Wie müsste man beim Access 2016 die Objektvariable für ein Diagramm festlegen?
Das ist doch dieselbe Meldung, die du vorher auch schon hattest.
Eigentlich sollte Folgendes ausreichen:
With Reports("B_Test").Diagramm3
...
Hallo,
damit der eine vom anderen weis:
https://www.ms-office-forum.net/forum/showthread.php?t=380373
Hallo und Danke,
Die Meldung ist jetzt weg.
Habe auch die Achsen angepasst.
in:
Chart.PrimaryValuesAxisMinimun= Forms!AF!y_Primachse_min
Max ebenso angepasst.
Jetzt kommt aber die Meldung Objekt erforderlich
Viele Grüße
Tidl
Zitat von: tidl am April 19, 2022, 12:14:40Jetzt kommt aber die Meldung Objekt erforderlich
Wenn du dazu eine hilfreiche Antwort möchtest, musst du schon ein paar mehr Informationen liefern. Z.B. der Code der zu der Fehlermeldung führt.
Hallo PhilS,
sehr gerne. Welche Infos fehlen noch?
Ich habe den Code wie folgt angepasst:
With Reports("B_Test").Controls("Diagramm3")
.PrimaryValuesAxisRange= fixed
.PrimaryValuesAxisMinimun= Forms!AF!y_Primachse_min
.PrimaryValuesAxisMaximum= Forms!AF!y_Primachse_max
End With
Jetzt kommt keine Fehlermeldung mehr.
ABER: Leider ignoriert er dennoch die Werte für die Achse, welche im Formular AF hinterlegt sind. Er macht praktisch seine Skalierung automatisch.
Hmmm..? :)
Jetzt wieß ich gar nicht mehr, was ich noch machen könnte.
Mfg
Tidl
Zitat von: tidl am April 19, 2022, 12:59:35ABER: Leider ignoriert er dennoch die Werte für die Achse, welche im Formular AF hinterlegt sind. Er macht praktisch seine Skalierung automatisch.
Grundsätzlich sieht dein Code so erstmal OK aus und sollte m.M. das gewünschte Ergebnis bringen.
Evtl. liegt das Problem darin, wann du den Code ausführst. Wenn der Bericht erstmal in der Seitenansicht angezeigt wurde, dürften sich Änderungen danach nicht mehr optisch auswirken.
Hallo PhilS,
danke. Ich habe jetzt im Formular einen Button zum Öffnen des Berichts gelegt. Leider werden die Achseneinstellungen ignoriert.
Hast Du vielleicht noch einen Tip?
Zitat von: tidl am April 21, 2022, 14:24:06Ich habe jetzt im Formular einen Button zum Öffnen des Berichts gelegt. Leider werden die Achseneinstellungen ignoriert.
Das dürfte genau das angesprochene Problem verursachen. Der Bericht wird geöffnet und fertig formatiert. Danach erst wird dein Code für die Diagrammeinstellungen ausgeführt und kann aber keine Auswirkung mehr haben, weil der Bericht bereits feritg formatiert ist.
Das
Open-Ereignis des Berichts könnte ein gutes Event sein um das Diagramm zu formatieren. Wenn das Diagramme mehrfach in verschiedenen Bereichen dargestellt wird, dann das
Format-Ereignis des jeweiligen Bereichs.
@tidl Zitatwann du den Code ausführst
Interpretiere das als Frage.
Wenn du die Skalierung im Formular anschliessend an .OpenReport anstösst,
könnte es zu spät sein. Du musst das dem Bericht überlassen, vermutlich
(bin da jetzt nicht ganz sicher) "Beim Formatieren" des Bereichs mit dem
Diagramm.
Die Werte holst du dir dabei mit Formularbezügen (nicht gern gesehen), per
OpenArgs (im Form einen kommaseparierten String erstellen, den im Bericht
splitten und die Einzelwerte zuweisen) oder mit öffentlichen Properties die
Werte aus dem Form vor dem Öffnen des Berichtes festhalten und im Report auslesen.
gruss ekkehard
Hallo,
ich verstehe was ihr meint. Danke. Aber das dürfte doch nicht das Problemn sein. Im alten Access habe ich den Code unter den Ereignissen beim Öffnen des Berichts geschrieben.
Das habe ich auch gemacht. Zusätzlich habe ich es versucht, wenn der Code aktuell in den Ereignissen:
Bei Laden,
Bei Öffnen,
Beim Anzeigen
steht.
Natürlich habe ich alles einzel und zusammen probiert.
Eine weitere Möglichkeit, welche ich durch euren Tipp sehe, ist den Code beim Klicken einer Schaltfläche auszuführen (ohne das Thema direkt Bericht öffnen).
Hier bekomme ich dann die Fehlermeldung
.PrimaryValuesAxisRange= fixed
Variable nicht deklariert (gehighlightet ist fixed).
Das ist mir aber wiederum klar, da der Bericht ja noch nicht offen ist.
Somit müsste doch der Code z.B. beim Öffnen des Berichtes richtig sein, oder?
MfG
tidl
Zitat von: tidl am April 22, 2022, 09:21:15Aber das dürfte doch nicht das Problemn sein. Im alten Access habe ich den Code unter den Ereignissen beim Öffnen des Berichts geschrieben.
Ich verstehe hier deine Argumentation nicht. Du hast es früher, als es mit den alten Charts funktioniert, so gemacht, wie ich es jetzt empfehle. - Wieso ist das jetzt ein Argument, dass das nicht das Problem ist?
Zitat von: tidl am April 22, 2022, 09:21:15Hier bekomme ich dann die Fehlermeldung
.PrimaryValuesAxisRange= fixed
Variable nicht deklariert (gehighlightet ist fixed).
Das ist mir aber wiederum klar, da der Bericht ja noch nicht offen ist.
Nein. Das hat mit dem Bericht rein gar nichts zu tun!
"fixed" gibt es nicht. Du meinst die Konstante
acAxisRangeFixed.
Das habe ich vorher übersehen, aber es könnte eine Erklärung für einige deiner Probleme sein. In Berichtsereignissen werden Fehlermeldungen von Access massiv unterdrückt. Dieser Fehler ist vorher schon aufgetreten und der Code wurde nicht ausgeführt. - Nur gab es evtl. keine Meldung dazu.
Hallo und Danke,
nein da argumentiere ich ja nicht dagegen.
Zitat von: PhilS am April 22, 2022, 12:24:57Ich verstehe hier deine Argumentation nicht. Du hast es früher, als es mit den alten Charts funktioniert, so gemacht, wie ich es jetzt empfehle. - Wieso ist das jetzt ein Argument, dass das nicht das Problem ist?
Ich sage nur, dass ich es immer schon so, wie du sagst gemacht habe.
Zitat von: PhilS am April 22, 2022, 12:24:57Nein. Das hat mit dem Bericht rein gar nichts zu tun!
"fixed" gibt es nicht. Du meinst die Konstante acAxisRangeFixed.
Das habe ich vorher übersehen, aber es könnte eine Erklärung für einige deiner Probleme sein. In Berichtsereignissen werden Fehlermeldungen von Access massiv unterdrückt. Dieser Fehler ist vorher schon aufgetreten und der Code wurde nicht ausgeführt. - Nur gab es evtl. keine Meldung dazu.
wenn ich das rausnehme passiert leider auch nichts.
Kann es ev sein, dass
.PrimaryValuesAxisMinimun
nicht korrekt ist? Früher hieß das ja .Minimumscale
I
Zitat von: tidl am April 22, 2022, 12:44:07wenn ich das rausnehme passiert leider auch nichts.
Das ist wenig überraschend. Wenn du die Zeile entfernst, wird die automatische Skalierung angewendet, die du ja ausdrücklich durch eine starr vorgegebene ersetzen willst.
Du solltest die Zeile nicht rausnehmen, sondern dein
fixed durch
acAxisRangeFixed ersetzen.
Zitat von: tidl am April 22, 2022, 12:44:07Kann es ev sein, dass
.PrimaryValuesAxisMinimun
nicht korrekt ist? Früher hieß das ja .Minimumscale
Nein, das denke ich nicht. Die Eigenschaften der Modern Charts heißen nun mal anders.
Allerdings, wo ich jetzt genau hinsehe, es heißt natürlich:
PrimaryValuesAxisMinimumIch würde dir empfehlen die Funktionalität mit Chart-Skalierung erstmal in einem Formular zu entwickeln. Erst wenn es funktioniert, transferierst du das in den Bericht.
Der Vorteil im Formular ist, dass du den Chart jederzeit ändern kannst und nicht nur in einem engen Zeitfenster, wie beim Bericht. Außerdem werden dort die Fehlermeldungen nicht unterdrückt, wie in manchen Berichtsereignissen.
Und, nur zur Erinnerung: Du könntest auch weiterhin die klassischen Charts verwenden.
Hallo PhilS,
vielen Dank für Deine Unterstützung. Das war es!!!
Für alle die auch mal sowas brauchen hier der Code:
With Reports("Name des Reports").Controls("Name des Diagramms")
.PrimaryValuesAxisRange = acAxisRangeFixed
.PrimaryValuesAxisMinimum= Forms!Formularname!Feldname_Min_im_Formular
.PrimaryValuesAxisMaximum= Forms!Formularname!Feldname_Max_im_Formular
End With
Viele Grüße Tidl