Autor Thema: Exceldiagramm mit Notes erstellen  (Gelesen 3255 mal)

Offline Big768

  • Aktives Mitglied
  • ***
  • Beiträge: 164
Exceldiagramm mit Notes erstellen
« am: 21.11.06 - 18:06:13 »
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
Server 7.0.3 und 8.5.1, Client 7.0.3 bis 8.5.3

Die Politik ist nicht Opfer der Staatsverschuldung, sie ist Täter.

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: Exceldiagramm mit Notes erstellen
« Antwort #1 am: 21.11.06 - 19:17:32 »
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:
Ich gebe auch zu, dass ich in VBA so gut wie keine Ahnung habe.

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.

« Letzte Änderung: 21.11.06 - 19:23:07 von Axel »
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline Big768

  • Aktives Mitglied
  • ***
  • Beiträge: 164
Re: Exceldiagramm mit Notes erstellen
« Antwort #2 am: 22.11.06 - 09:39:24 »
Hallo Axel,

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

Hat noch jemand einen Tipp?

Danke im voraus.

Johann
Server 7.0.3 und 8.5.1, Client 7.0.3 bis 8.5.3

Die Politik ist nicht Opfer der Staatsverschuldung, sie ist Täter.

Offline Johnson

  • Senior Mitglied
  • ****
  • Beiträge: 258
  • Geschlecht: Männlich
Re: Exceldiagramm mit Notes erstellen
« Antwort #3 am: 22.11.06 - 10:26:29 »
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

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
Gruß
Johnson

Offline Big768

  • Aktives Mitglied
  • ***
  • Beiträge: 164
Re: Exceldiagramm mit Notes erstellen
« Antwort #4 am: 22.11.06 - 11:08:45 »
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

Server 7.0.3 und 8.5.1, Client 7.0.3 bis 8.5.3

Die Politik ist nicht Opfer der Staatsverschuldung, sie ist Täter.

Offline Johnson

  • Senior Mitglied
  • ****
  • Beiträge: 258
  • Geschlecht: Männlich
Re: Exceldiagramm mit Notes erstellen
« Antwort #5 am: 22.11.06 - 11:20:17 »
Ich hab deien geposteten code mal in einem Agenten ausprobiert und hab ein bisschen umstellen müssen:

Code
Sub Initialize
	
	
' ### create workbook ###
	
' create an excel instance
	
	Dim xlApp As Variant	' excel application object
	
	Set xlApp = CreateObject("Excel.Application")
	xlApp.Visible = True
	
' add a workbook
	
	Dim xlWorkbooks As Variant	' workbook list object
	Dim xlWorkbook As Variant	' workbook object
	
	Set xlWorkbooks = xlApp.Workbooks
	Set xlWorkbook = xlWorkbooks.Add
	
	
' ### create table ###
	
' get the first sheet of the new workbook
	
	Dim xlSheets As Variant	' worksheet list object of one workbook object
	Dim xlSheet As Variant	' worksheet object
	
	Set xlSheets = xlWorkbook.Sheets
	Set xlSheet = xlSheets.Item(1)	' or type Set xlSheet = xlSheets(1)
	
' write row titles
	
	Dim rowtitles As Variant	' range object
	Dim var_rowtitles As Variant	' values of the range object rowtitles
	
	Set rowtitles = xlSheet.Range(xlSheet.Cells(2, 1), xlSheet.Cells(5, 1))	' get the range "A2:A5"
	var_rowtitles = rowtitles.Value
	var_rowtitles(1, 1) = "Fehler1"
	var_rowtitles(2, 1) = "Fehler2"
	var_rowtitles(3, 1) = "Fehlersumme"
	var_rowtitles(4, 1) = "Verbrauch"
	rowtitles.Value = var_rowtitles
	
' write first column
	
	Dim column As Variant	' range object
	Dim var_column As Variant	' values of the range object column
	
	Set column = xlSheet.Range(xlSheet.Cells(1, 2), xlSheet.Cells(5, 2))	' get the range "B1:B5"
	var_column = column.Value
	var_column(1, 1) = "A"
	var_column(2, 1) = 4
	var_column(3, 1) = 3
	var_column(4, 1) = 7
	var_column(5, 1) = 70
	column.Value = var_column
	
' write second column
	Set column = xlSheet.Range(xlSheet.Cells(1, 3), xlSheet.Cells(5, 3))	' get the range "C1:C5"
	var_column = column.Value
	var_column(1, 1) = "B"
	var_column(2, 1) = 3
	var_column(3, 1) = 2
	var_column(4, 1) = 5
	var_column(5, 1) = 50
	column.Value = var_column
	
	
' ### create chart ###
	
	Const xlLocationAsObject = 2
	Const xlColumnClustered = 51
	Const xlRows = 1
	
' add new chart to workbook
	
	Dim xlCharts As Variant	' charts list object of one workbook object
	Dim xlChart As Variant	' chart object
	Dim sc As Variant	' series collection object
	
	Set xlCharts = xlWorkbook.Charts	' get the chart collection of xlWorkbook
	Set xlChart = xlCharts.Add	' create a new chart in xlCharts
	xlChart.ChartType = xlColumnClustered
	Call xlChart.SetSourceData(xlSheet.Range(rowtitles, column), xlRows)	' form row titles to last wridden column
	xlChart.HasTitle = True
	xlChart.ChartTitle.Characters.Text = "Vergleich: "
	xlChart.HasLegend = False
	xlChart.PlotArea.Interior.ColorIndex = "0"
	
	' data table
	xlChart.HasDataTable = True
	xlChart.DataTable.ShowLegendKey = True
	xlChart.DataTable.font.size = 8
	
	' series properties
	Set sc = xlChart.SeriesCollection	' get the speries collection of the xlChart obcect
	xlChart.ChartGroups(1).GapWidth = 10
	sc(1).Interior.ColorIndex = 27   
	sc(2).Interior.ColorIndex = 32  
	xlChart.Location xlLocationAsObject, xlSheet.Name
	
	
' ### set shape properties ###
	
	Const msoScaleFromTopLeft = 0
	Const msoFalse = 0
	Dim xlShape As Variant	' shape object
	
	Set xlShape = xlSheet.Shapes(1)	' get the first shape of xlSheet's shape collection
	xlShape.ScaleWidth 1.50, msoFalse, msoScaleFromTopLeft
	xlShape.ScaleHeight 1.24, msoFalse, msoScaleFromTopLeft
	xlShape.IncrementLeft -183
	xlShape.IncrementTop -122.25
	
	
End Sub

Wichtig für dich ist die Zeile:
Call xlChart.SetSourceData(xlSheet.Range(rowtitles, column), xlRows)
Der Ausdruck xlSheet.Range(rowtitles, column) gibt ein Range Objekt zurück.
Range-Objekte können einzenle Zellen sein (xlSheet.Cells(1)) oder mehrere Zellen (xlSheet.Range("A1:A2") oder xlSheet.Range(xlSheet.Cells(1), xlSheet.Cells(2)))
Der Methode SetSourceData muss ein solches Range-Objekt erhalten.
Gruß
Johnson

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz