Domino 9 und frühere Versionen > ND6: Entwicklung

Exceldiagramm mit Notes erstellen

(1/2) > >>

Big768:
Hallo Ihr Lieben,

ich habe folgendes Problem:

ich möchte mit Notes ein Exceldiagramm erstellen. Dafür habe ich folgendes Programm geschrieben das auch funktioniert:

   Dim workspace As New NotesUIWorkspace
   Dim uidoc As NotesUIDocument
   Dim doc As notesdocument
   Set uidoc = workspace.CurrentDocument
   Set doc = uidoc.Document
   Dim object As NotesEmbeddedObject
   Dim xlApp As Variant
   Dim oWorkbook As Variant
   
   
   uidoc.EditMode = True
   Set xlApp = CreateObject("Excel.Application")
   xlApp.Visible = False
   Set oworkbook = xlApp.Workbooks
   oworkbook.Add
   
   xlApp.cells(2,1) = "Fehler1"
   xlApp.cells(3,1) = "Fehler2"
   xlApp.cells(4,1) = "Fehlersumme"
   xlApp.cells(5,1) = "Verbrauch"
   
   xlApp.cells(1,2) = "A"
   xlApp.cells(2,2) = 4
   xlApp.cells(3,2) = 3
   xlApp.cells(4,2) = 7
   xlApp.cells(5,2) = 70         
   
   xlApp.cells(1,3) = "B"
   xlApp.cells(2,3) = 3
   xlApp.cells(3,3) = 2
   xlApp.cells(4,3) = 5
   xlApp.cells(5,3) = 50
   xlApp.Range("A1:C5").Select
   
   
   
   xlApp.Charts.Add
   
'   xlApp.ActiveChart.ChartType = xlColumnClustered
'   xlApp.ActiveChart.SetSourceData (Source=Sheets(ActiveChart).Range("A1:D5"), PlotBy=xlRows).select
   
   xlChartType = 51
   xlLocationAsObject = 2
   With xlApp.ActiveWorkbook.ActiveChart
      .Name = "Trend Chart"
      .HasTitle = True
      .HasLegend = False
      .ChartTitle.Text = "Vergleich: "
      .ChartType = xlChartType
      .PlotArea.Interior.ColorIndex = "0"
      .Location xlLocationAsObject , "Trend Chart"
   End With
   xlApp.ActiveSheet.ChartObjects("Chart 1").Activate
   
   xlApp.ActiveChart.ChartArea.Select
   
   xlApp.ActiveChart.ChartArea.Copy
'change chart dimensions
   xlApp.ActiveSheet.Shapes("Chart 1").ScaleWidth 1.50, msoFalse,   msoScaleFromTopLeft
   xlApp.ActiveSheet.Shapes("Chart 1").ScaleHeight 1.24, msoFalse,   msoScaleFromTopLeft
   xlApp.ActiveSheet.Shapes("Diagramm 1").IncrementLeft -183
   xlApp.ActiveSheet.Shapes("Diagramm 1").IncrementTop -122.25
   xlApp.ActiveSheet.ChartObjects("Diagramm 1").Activate
   xlApp.ActiveChart.ChartArea.Select
   xlApp.ActiveChart.HasDataTable = True
   xlApp.ActiveChart.DataTable.ShowLegendKey = True
   xlApp.ActiveChart.DataTable.font.size = 8
   xlApp.ActiveChart.SeriesCollection(1).Interior.ColorIndex = 32
   xlApp.ActiveChart.ChartGroups(1).GapWidth = 10
   xlApp.ActiveChart.SeriesCollection(1).Interior.ColorIndex = 27   
   xlApp.ActiveChart.SeriesCollection(2).Interior.ColorIndex = 32   

   Call uidoc.GotoField( "Chart" )

   Call uidocpm.refresh
   doc.art = "vorab"
   Call doc.Save( True, True )
   
   xlApp.activeworkbook.saveas "C:\Test.xls"
   xlApp.activeworkbook.close
   Call xlApp.Quit    ;D

Das Problem ist, dass er nun das Diagramm nach der Spalte erzeugt. Es soll aber nach der Zeile erzeugt werden. Deshalb füge ich die Zeile:

   xlApp.ActiveChart.SetSourceData (Source=Sheets(ActiveChart).Range("A1:D5"), PlotBy=xlRows).select ???

ein die ich oben deaktiviert habe. Wenn ich nun Versuche die Maske zu speichern erhalte ich folgende Fehlermeldung:

"Illegal parenthesize reference: SHEETS" ???

Was mache ich falsch.

Ich gebe auch zu, dass ich in VBA so gut wie keine Ahnung habe.

Für Eure Hilfe wäre ich Euch trotzdem dankbar.

Johann

Axel:
Was sofort ins Auge fällt, du kannst in LotusScript bie der Parameterübergabe keine = - Zeichen verwenden.

Du musst die Zeile in folgender Form einfügen:

xlApp.ActiveChart.SetSourceData (Sheets(ActiveChart).Range("A1:D5"), xlRows).select


Axel

PS:

--- Zitat von: Big768 am 21.11.06 - 18:06:13 ---Ich gebe auch zu, dass ich in VBA so gut wie keine Ahnung habe.

--- Ende Zitat ---

Wenn du solche Lösungen programmieren willst/musst, kommst du ohne VBA-Kenntnisse aber nicht sehr weit. Die solltest du dir dringend aneignen. Sonst stehst du bei der nächsten Fehlermeldung wieder auf dem Schlauch.

Big768:
Hallo Axel,

vielen Dank für die Hilfe, aber es klappt noch nicht.

Hat noch jemand einen Tipp?

Danke im voraus.

Johann

Johnson:
Hi,

Wenn du in VBA einen Macro aufzeichnest, wirst du feststellen, daß einige Objekte bereits zur Verfügung stehnen. Das liegt daran, daß VBA bereits weiß, worauf du dich beziehst.
Die Variable Sheets in einem VBA Modul gibt dir dann auch das Sheets-Objekt der Arbeitsmappe (Workbook) zurück, in der das Modul auch enthalten ist.
z.B.

--- Code: ---Sub MakroX
MsgBox Sheets.Item(1).Name
End Sub
--- Ende Code ---

In LS musst du erst spezifizieren, von welcher Arbeitsmappe du das Sheets-Objekt haben möchtest.

z.B.
Messagebox xlApp.ActiveWorkbook.Sheets.Item(1).Name

Also....
xlApp.ActiveChart.SetSourceData (xlApp.ActiveWorkbook.Sheets(ActiveChart).Range("A1:D5"), PlotBy=xlRows).select

Aber mal noch ne Frage was sollte denn "Sheets(ActiveChart)" zurück geben? Denn das wird so auch nicht tun (kann ich mir nicht vorstellen).

Gruß
Johnson

Big768:
Hallo,

"Aber mal noch ne Frage was sollte denn "Sheets(ActiveChart)" zurück geben? Denn das wird so auch nicht tun (kann ich mir nicht vorstellen)."

Es handelt sich dabei um ein bestehendes Programm, dass auch funktioniert. Nun habe wir in der Exceltabelle eine zusätzliche Zeile eingefügt. Nun wird das Diagramm nicht mehr nach Zeilen, sondern nach Spalten erzeugt. Den gleichen Effekt erreichst Du auch, wenn Du mit der Rechten Maustaste auf das Diagramm klickst, dann auf Datenquelle, Reiter Datenbereich, Reihe in "Zeilen / Spalten" anklickst.

Das ganze will ich nun über das Script erreichen.

Gruß

Johann

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln