PDA

Vollständige Version anzeigen : Diagramme und VBA??


Steffen in Space
30.08.2001, 08:19
Hallo Ihr Götter!
Ich möchte ein MS Graph 97-Diagramm in ein Access97-Formular einbinden und seine Eigenschaften (Skalierung der Achsen, dargestellte Inhalte, Legende, Überschrift etc.etc.etc.) mit VBA-Code vom Formular aus verändern. Kann mir einer von Euch sagen, wos dazu Tutorials oder sonstwelche Infos gibt? War in zig Bibliotheken (IRL), hab aber keine Bücher drüber gefunden. Das Diagramm ist doch bestimmt wieder ein Objekt, das man mit VB ansprechen kann (hoffe ich jedenfalls inbrünstig!! ;o) )...?
Vielen Dank für Hilfe! Machts gut. Steffen

EricB
30.08.2001, 11:35
Hallo!

Nachfolgend ein Beispiel, wie ich in eine PP-Datei schreibe. (Nur mal so als Ansatz - in der Hilfe findest du sicher weiter!)

Ciao
Eric

' Das Recordset mit den Daten woird übergeben
' und die Nummer des Betriebes, für den die Charts geschrieben werden

Public Sub WritePowerPoint(rsF As DAO.Recordset, strBnr As String)

Dim i As Long

Dim prsPres As PowerPoint.Presentation ' PP-Präsentation
Dim sldSlide As PowerPoint.Slide ' PP-Folie
Dim intSlide As Integer ' interne Nummer der Folie
' Aus dem Recordset mit dein Fragen eingelesen

Dim oGraph As Object ' Grafik-Objekt
Dim oDataSheet As Object ' Zugrundeliegendes Tabellenblatt vom Grafik-Objekt
Dim shpGraph As PowerPoint.Shape ' Rahmen mit Inhalt der Präsentation
Dim shpShape As PowerPoint.Shape ' Rahmen mit Inhalt der Präsentation
Dim lColCnt As Long ' Spaltennummer zum schreiben der neuen
' Werte in das Tabellenblatt
Dim strPresPathAndName As String ' Pfad und Name der Vorlage

Dim strMasterTitle As String ' Titel im Folienmaster
Dim strLegende As String ' Bezeichnung ind er Legende (Gruppe der Betriebe)
Dim strUser As String ' Anweder der die PP-erstellt hat (links unten)

' Wieder zum ersten DS gehen, damit der RS weiterverwendet werden kann
rsF.MoveFirst

' Ja nach gewählter Gruppe den Titel im FolienMaster einstellen
If gStrGruppe = "LINZ" Then
' Einstellungen für Linz"
strMasterTitle = gStrTitleLinz
strLegende = gStrLegendeLinz
strUser = gStrUserLinz
Else
' Einstellungen für "Pilot"
strMasterTitle = gStrTitleDL
strLegende = gStrLegendeDL
strUser = gStrUserDL
End If

' Die Vorlagen-Präsentation öffnen
Set prsPres = ppApp.Presentations.Open(gStrTemplate)
DoEvents
' Den Anwendername in die Fusszeile einstellen
prsPres.SlideMaster.Shapes(7).TextFrame.TextRange = strUser
' Den Mastertitel einstellen
prsPres.SlideMaster.Shapes(10).TextFrame.TextRange = strMasterTitle
' Änderung sofort machen
DoEvents

' Den Betriebsnamen in der ersten Folie einfügen.
With prsPres.Slides(1)
' Auf Shape-Objekt verweisen
Set shpShape = .Shapes(2)
' Den Betriebsnamen schreiben
shpShape.TextFrame.TextRange = CStr(strBnr) & " - " & _
DLookup("bnamk", "partnerliste", "Betriebsnummer = " & CLng(strBnr))
DoEvents
Set shpShape = Nothing
Set shpShape = .Shapes(3)
' Den Zeitraum der Auswertung in die Erste Folie einfügen
shpShape.TextFrame.TextRange = valDate(gLngColumn, 1) & " - " & valDate(1, 2)
DoEvents
Set shpShape = Nothing
End With


i = 1

' Alle Folien = Fragen im Recordset durchlaufen
Do Until rsF.EOF
' Nummer der Folie aus dem Recordset auslesen
intSlide = CInt(rsF!Slide)

' Auf die aktuelle Folie verweisen
With prsPres.Slides(intSlide)
' Die Folie in PP aktivieren und anzeigen
.Select
' Auf den Rahmen des Diagrammes verweisen
Set shpGraph = .Shapes(rsF!Shape)
End With
DoEvents

' Auf das Diagramm-Objekt verweisen
Set oGraph = shpGraph.OLEFormat.Object
DoEvents
' auf das Tabellenblatt des Diagrammes verweisen
Set oDataSheet = oGraph.Application.DataSheet
DoEvents

' Prüfen welche Art von Grafik zu erstellen ist
Select Case intSlide
' Die Vergleichbalken schreiben
Case 1, 2, 3, 4, 5, 6, 7
' Das Tabellenblatt neu beschreiben

' Erstellen von 3 Zeilenköpfen.
' Betriebsnummer einlesen
oDataSheet.Cells(2, 1).Value = "Betrieb " & strBnr
' Gruppenabhängige Legende einlesen
oDataSheet.Cells(3, 1).Value = strLegende
oDataSheet.Cells(4, 1).Value = "Ø Österreich"

' Alle Spalten (= Balken) durchlaufen
' Spalten werde bei 2 begonnen, da in 1 die Legenden-Daten stehen
For lColCnt = 2 To 1 + gLngColumn
' Beschriftung der Y-Achse einlesen
oDataSheet.Cells(1, lColCnt).Value = valTime(2 + gLngColumn - lColCnt)
DoEvents
' Wert des Betriebes schreiben
oDataSheet.Cells(2, lColCnt).Value = valB(i, 2 + gLngColumn - lColCnt) * 100
DoEvents
' Wert der Gruppe schreiben
oDataSheet.Cells(3, lColCnt).Value = valG(i, 2 + gLngColumn - lColCnt) * 100
DoEvents
' Wert für ganz Österreich schreiben
oDataSheet.Cells(4, lColCnt).Value = valO(i, 2 + gLngColumn - lColCnt) * 100
Next

' Nur Betriebswerte schreiben (Risikopotenzial)
Case 8

' Erstellen von 2 Zeilenköpfen.
oDataSheet.Cells(2, 1).Value = gStrRisiko1
oDataSheet.Cells(3, 1).Value = gStrRisiko2

' Alle Spalten (= Balken) durchlaufen
' Spalten werde bei 2 begonnen, da in 1 die Legenden-Daten stehen
For lColCnt = 2 To 1 + gLngColumn
' Beschriftung der Y-Achse einlesen
oDataSheet.Cells(1, lColCnt).Value = valTime(2 + gLngColumn - lColCnt)
DoEvents
' Wert für wiederbesuch der Werkstätte einlesen
oDataSheet.Cells(2, lColCnt).Value = CLng(valB(i, 2 + gLngColumn - lColCnt) * 100)
DoEvents
' Risikopotenzial errechnen (= 100 miuns Wiederbesuch)
oDataSheet.Cells(3, lColCnt).Value = CLng(100 - valB(i, 2 + gLngColumn - lColCnt) * 100)
Next

End Select
' Die Änderungen im Tabellenblatt speichern
oGraph.Application.Update
' Das Graph-Object schließen
oDataSheet.Application.Quit
DoEvents
' Speicher freigeben
Set oDataSheet = Nothing
Set oGraph = Nothing
Set shpGraph = Nothing
DoEvents
' Zur nächsten Folie wechseln
rsF.MoveNext
i = i + 1
Loop

' Datei unter dem Betriebsnamen Speichern
prsPres.SaveAs gStrSaveDir & strBnr & " HIA Bonusfragen.ppt"
' Präsentation schließen
prsPres.Close
' Speicher Freigeben
Set prsPres = Nothing
DoEvents
End Sub