Hallo!
Mir geht es ähnlich wie vielen anderen Kollegen, wenn man dem Internet glauben darf. Ich möchte ein Balkendiagramm abhängig vom Wert dynamisch formatieren.
Dazu wollte ich eine Prozedur schreiben - leider komme ich noch nicht zur If-Kombination, da die Anzeige der Farbe via VBA noch nicht funktioniert.
Der Code lautet:
Option Compare Database
Option Explicit
Private Sub Report_Activate()
Dim DiagObj As Object
Set DiagObj = Me!Diagramm1
DiagObj(Me!Diagramm1).Activate
Me!Diagramm1.SeriesCollection(1).InteriorColor = RGB(255, 0, 0)
End Sub
Beim Ausführen erhalte ich eine Fehlermeldung: Laufzeitfehler 438 - Objekt unterstützt diese Eigenschaft oder Methode nicht.
Da in den Forenbeiträgen dieser Code jedoch als zielführend beschrieben wird wollte ich um Rat fragen - vielleicht habt Ihr eine Ahnung was ich falsch gemacht habe.
Vielen Dank,
Peter
Hallo,
nur mal soi in den Wind gereimt:
----> Dim DiagObj As Object
Du deklarierst hiermit ein Object und danach ...
Set DiagObj = Me!Diagramm1
DiagObj(Me!Diagramm1).Activate
----> warum nicht DiagObj.Activate
Achte darauf ob nach der Eingabe des Punkts 'Activate' im Kontext auswählbar ist!
----> Me!Diagramm1.SeriesCollection(1).InteriorColor = RGB(255, 0, 0)
analog dazu ... DiagObj.SeriesCollection(1).InteriorColor = RGB(255, 0, 0)
HTH
Hallo HTH,
vielen Dank für den Tipp.
Werde ich morgen gleich ausprobieren - war leider die letzten Tage nicht verfügbar. Melde mich dann mit dem Ergebnis!
lg
Peter
Hallo,
leider tritt der Laufzeitfehler 438 wieder auf.
Das Kontextmenü öffnet sich ebenso nicht - bedeutet das, dass die Variable nicht deklariert wurde? Ist die Deklarierung als "Object" falsch?
Freue mich über Hilfe.
lg
Robert
Hallo,
versuch mal so:
Dim ObjDiag As Chart
Set ObjDiag = Me.Diagramm1.Object
siehe auch bei donkarl.com FAQ 6.22
Hallo!
DonKarl´s Weg mit dem Excel-Rekorder finde ich gut.
Leider funktioniert die Deklaration des Objekts nicht.
Code:
Dim ObjDiag As Chart
Set ObjDiag = Me.Diagramm1.Object
Beim Aufruf folgt die Fehlermeldung: Laufzeitfehler 2771: Das gebundene oder ungebundene Objektfeld, das Sie bearbeiten wollten, enthält kein OLE-Objekt.
Leider komme ich bei der Lösung nicht weiter.
lg
Peter
So, durch den Input, welchen ich zufällig via Google gefunden habe, habe ich die Prozedur nun wie folgt verändert...
Private Sub Report_Format()
Dim DiagObj As Graph.Chart
Set DiagObj = Me!Diagramm1.Object
DiagObj.SeriesCollection(1).InteriorColor = RGB(0, 255, 0)
End Sub
--> Laufzeitfehler gibt es NICHT mehr!
--> Der Datenbalken ist jedoch unverändert, gemäß Einstellung in Access. Eine Formatierung via VBA hat NICHT stattgefunden.
(Verwendet wird MS Graph, Version 14, d.h. Access 2010. Die Verweise sind gesetzt!)
Gibt es noch Ideen?
lg
Peter
Hallo,
was soll das
Private Sub Report_Format()
für eine Ereignisprozedur sein?
Benutz mal das Ereignis "Beim Formatieren" des Berichts-Bereiches , in dem sich das Diagramm befindet.
Hallo!
Vielen Dankf für den Input. Ist ein Anfängerfehler, oder! Achja, ich bin ja Anfänger...
Ich habe die Prozedur gemäß Deiner Hilfe geändert.
Private Sub Detailbereich_Format(Cancel As Integer, FormatCount As Integer)
Dim DiagObj As Graph.Chart
Set DiagObj = Me!Diagramm1.Object
DiagObj.SeriesCollection(1).InteriorColor = RGB(255, 0, 0)
End Sub
Die Prozedur liefert jedoch noch immer keine Formatierung via VBA.
Hättest Du noch einen Tipp für mich?
lg
Peter
Hallo,
lad die DB mal hier hoch (Anmeldung erforderlich)
Guten Morgen!
Ich habe beim Upload leider zwei Probleme:
1. Die Datei wird auch mittels Komprimierung nicht kleiner als 600 kb
2. Die Datei ist im Access2010-Format (.accdb). Dieses Format ist lt. Beschreibung der Upload-Funktion nicht möglich.
Eine Umwandlung kleiner 600 kb konnte ich ebenso nicht realisieren.
Ich habe jetzt einmal einige Screenshots angehängt. Vielleicht ist darauf auch ein etwaiger Fehler ersichtlich...
lg
Peter
[Anhang gelöscht durch Administrator]
Hallo,
probiers mal mit Konvertierung auf *.mdb anschließend komprimieren/reparieren und zippen
Sorry das ich mich erst jetzt wieder melde. Das Problem ist noch immer akut. Leider war ich unterwegs.
Ich habe dummerweise übersehen, dass zip akzeptiert wird.
Ich schicke daher einmal die Original-2010-Version. Wenn notwendig, könnte dann noch immer ein Konvertierung stattfinden.
Danke für die Hilfe!
lg
Peter
[Anhang gelöscht durch Administrator]
Hallo,
also ich habe dann mal dein Dingsda getestet - ich kann OHNE irgendwas zu verstellen KEIN Problem erkennen!
Getestet mit unterschiedlichen Farbeinstellungen!
Ausser einer Fehlermeldung zu einer fehlenden Referenz ist nichts sonderbar - vielleicht noch die Zusammenstellung deines Tabellenkonstrukts was aber nicht Thema deiner Anfrage ist.
Siehe dazu angehängete Screenshots von den grün gefärbten Diagrammbalken und den von mir geänderten Verweisen (in späterer Folge) ... ;D
Ich gehe daher davon aus, dass es bei deiner Officeinstallation oder den gesetzten Verweisen schiebt. (ich habe alle nicht benötigten entfernt und AUCH mit unten am Bild sichtbaren getestet)
[Anhang gelöscht durch Administrator]
Also jetzt verstehe ich die Welt nicht mehr. Bei mir sind die Balken in oranger Farbe. Von einer grünen Färbung keine Spur.
Woran kann das wieder liegen?
Hättest Du dazu vielleicht eine Idee? An den zusätzlichen Verweisen kann es ja nicht liegen?
lg
Peter
Hallo,
wie schon geschrieben habe ... ich habe dein Beispiel geöffnet und den Bericht in der Seitenansicht geöffnet.
KEINE Fehlermeldung ausser dem fehlenden Bezug zu einer Abfrage (daher auch die Bemerkung zum Tabellenkonstrukt), der dadurch entsteht, dass du im Beziehungsfenster offensichtlich eine Beziehung zwischen Tabellen und Abfragen erstellt hast statt die Beziehungen zwischen den zu grundeliegendene Tabellen zu erstellen.
Ich habe danach versucht unterschiedliche RGB-Werte einzustellen, was ebenfalls ohne Probleme möglich war.
Daher kann es nur entweder an bei dir nicht funktionierenden Verweisen oder an der Office-Installation selbst liegen.
Hast du dein Office-Paket selbst installiert oder kommt dieses aus einer Domänenumgebung?
Wurde das Office Paket 'benutzerdefiniert' installiert oder lediglich eine Vollinstallation durchgeführt? - bei der allerdings NICHT alle Features des Office-Pakets auf der Festplatte vorhanden sind!
Hast du dein Verweisfenster schon mal kontrolliert ob da vielleicht 'gebrochene' Verweise bestehen (NICHT VORHANDEN)
Ich habe dieses jedenfalls in deinem Beispiel bei zumindest Einem festgestellt ... siehe Anhang ...
[Anhang gelöscht durch Administrator]
Hallo!
Das Tabellenkonstrukt ist lediglich ein Beispiel und wird in seiner endgültigen Fassung korrekt aufgebaut. Also daran liegt es nicht, da in meiner Original-Datei die Bezüge korrekt eingestellt funktionieren.
Bei den eingestellten Verweisen habe ich keine Fehlermeldungen erhalten. Aber bei der Office-Installation handelt es sich definitiv um eine Standard-Installation. Ich habe unserem IT-Mann bereits geschrieben und warte auf eine Antwort.
Ich hoffe es klappt dann - ich halte Dich informiert.
lg
Peter
Hi,
ich meinte auch nicht, dass der Fehler deiner Beschreibung aus dem Tabellenkonzept entsteht - mein Einwand war auf die zugeordnete Fehlermeldung beim Aufruf des Berichts bezogen.
Ein Fehler der in einem VBA-Modul entsteht wird sehr selten ein wackeliges Datenmodel zur Ursache haben - in deinem Fall weist es auf nicht intaktes Objektverhalten hin.
Wie angedeutet könnte vielleicht eine Neuinstallation / Reparaturinstallation im Modus 'benutzerdefiniert' mit der Option 'Alles vom Arbeitsplatz starten' Abhilfe schaffen.
HTH
Also ich habe nun alles auf "von der Festplatte" geändert. Es funktioniert trotzdem nicht.
Ich habe jedoch den VBA-Code auf "Report-Current" geändert. Beim Klicken in den Report ändern sich die Farben. Ein kleiner Teilerfolg sozusagen.
Leider ist nun das nächste Problem aufgetaucht.
Das Ziel war, dass Access jede Zeile eigenständig nach dem Wert prüft und je nach Wert (>90, >70, >40, <40) entsprechend formatiert. Dies funktioniert nun leider überhaupt nicht. Hättest Du noch einen Tipp?
Der verwendete VBA-Code lautet:
Private Sub Report_Current()
Dim DiagObj As Chart
Set DiagObj = Me.Diagramm1.Object
If Me.MittelwertvonaurBewertung >= 90 Then DiagObj.SeriesCollection(1).Interior.Color = RGB(4, 200, 13)
If Me.MittelwertvonaurBewertung >= 70 Then DiagObj.SeriesCollection(1).Interior.Color = RGB(153, 255, 102)
If Me.MittelwertvonaurBewertung >= 40 Then DiagObj.SeriesCollection(1).Interior.Color = RGB(4, 200, 13)
If Me.MittelwertvonaurBewertung < 40 Then DiagObj.SeriesCollection(1).Interior.Color = RGB(255, 51, 0)
End Sub
Es wird die erste Zeile abgefragt und dementsprechend die Farbe im ganzen Report verwendet. Wenn ich statt ...Collection(1) ... Collection(), dann gibt es einen Laufzeitfehler.
Vielen Dank für einen Tipp!
Peter
Hallo,
steht deine Datenbank in einem 'vertrauenswürdigen Speicherort'? Dieses Feature gibt es bei Access / Office seit der Version 2007. Es ist nicht unbedingt egal, WO so eine Applikation abgelegt wird.
Kontrolliere bitte daher die Einstellungen die deine Offis-Installation in dem Zusammenhang beinhaltet - findest du im Sicherheitscenter.
ZitatIch habe jedoch den VBA-Code auf "Report-Current" geändert.
??? wenn das funktioniert kann ich mir nicht erklären wieso es beim Formatieren nicht gehen soll?
ZitatDas Ziel war, dass Access jede Zeile eigenständig nach dem Wert prüft und je nach ....
Versuch mal...
If Me.MittelwertvonaurBewertung >= 90 Then DiagObj.SeriesCollection(1).Interior.Color = RGB(4, 200, 13)
If Me.MittelwertvonaurBewertung >= 70 AND Me.MittelwertvonaurBewertung <90 Then DiagObj.SeriesCollection(1).Interior.Color = RGB(153, 255, 102)
If Me.MittelwertvonaurBewertung >= 40 AND Me.MittelwertvonaurBewertung <70 Then DiagObj.SeriesCollection(1).Interior.Color = RGB(4, 200, 13)
If Me.MittelwertvonaurBewertung < 40 Then DiagObj.SeriesCollection(1).Interior.Color = RGB(255, 51, 0)
Du musst bei der Angabe eines unteren Grenzwertes auch dessen obere Grenze anführen sonst wirkt das Ganze nicht so recht ;)
Alternativ kannst auch das testen:
Select Case Me.MittelwertvonaurBewertung
Case Is >= 90
DiagObj.SeriesCollection(1).Interior.Color = RGB(4, 200, 13)
Case 70 To 90
DiagObj.SeriesCollection(1).Interior.Color = RGB(153, 255, 102)
Case 40 To 70
DiagObj.SeriesCollection(1).Interior.Color = RGB(4, 200, 13)
Case Is < 40
DiagObj.SeriesCollection(1).Interior.Color = RGB(255, 51, 0)
End Select
Ja, die Settings im Sicherheitscenter stimmen. Die Anzahl an Verweisen habe ich auch auf ein Minimum reduziert.
Der grundsätzliche If- oder (alternativ) Case-Befehl funktioniert - und zwar dann, wenn ich in die jeweilige Zelle klicke. In diesem Fall werden aber alle Diagramme/Datenbalken des Berichts in die jeweilige Farbe transferiert. Es gibt wieder keine farbliche Differenzierung.
Der Bericht hat ja ein eigenständiges Diagramm je Zeile im Bericht. Basis dafür sind die Werte in "aurHflRefID" / "MittelwertvonaurBewertung".
Kann Access nun zwischen den einzelnen Diagrammen nicht unterscheiden? Mit meinem Laien-Wissen vermute ich das - könnten da Variablen ins Spiel kommen um zu differenzieren?
Danke für die Geduld (!!!) und für Tipps natürlich auch!
Peter
Schönen Abend!
Ich denke ich habe das Problem identifiziert. Es ist die Logik!
Das Diagramm hat den Namen "diagramm1". Somit kann Access/VBA nicht differenzieren, da der Name nicht variabel ist. Variablen schaffen jedoch keine Abhilfe.
Ich denke, es ist somit nicht möglich meinen Bedarf umzusetzen, oder?
Freue mich über eine Rückmeldung.
Peter
Hallo,
ZitatIch denke ich habe das Problem identifiziert. Es ist die Logik!
NÖ!
sieh mal im Anhang...
Beim Aufbau des Berichts wird JEDE Zeile des Detailbereichs für sich 'gezeichnet' und berechnet.
Wodurch es dann nicht zum Tragen kommt, dass sich der Name des Diagramms nicht pro Zeile ändert - was ja auch ein Wahnsinn wäre - denk mal wenn es da 55287 Zeilen (Datensätze) im Abfragergebnis geben würde.
Nimm mal die
Seitenansicht (also die Druckvorschau) und nicht die
Berichtsansicht - Bericht also nicht durch Doppelklick öffnen!
Mit dem Doppelklick funktioniert es bei mir auch nicht
[Anhang gelöscht durch Administrator]
<<gelöscht - doppelt gesendet!>>
Heureka! Ich bin sprachlos - habe ich jetzt unzählige Stunden verschwendet, weil ich die falsche Ansicht genutzt habe...? Ja, so sieht es aus. Hauptsache es funktioniert, über die verschwendeten Stunden wird demnächst keiner mehr nachdenken. Jetzt kann ich die Anwendung ohne Systembruch nutzen, soll heißen, ich erspare mir die Auslagerung der Berichtserstellung ins Excel.
Vielen, vielen Dank - ohne Deiner Hilfe hätte ich das nicht realisieren können.
Viele Grüße,
Peter