Mai 19, 2022, 17:35:05

Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!


Skalierung von Diagrammen mit VBA

Begonnen von tidl, April 19, 2022, 08:14:11

⏪ vorheriges - nächstes ⏩

tidl

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

PhilS

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.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

tidl

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

PhilS

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
...
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

MzKlMu

Gruß
Klaus

tidl

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

PhilS

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.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

tidl

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



PhilS

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.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

tidl

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?

PhilS

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.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

Beaker s.a.

@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
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.

tidl

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

PhilS

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.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

tidl

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