DIAdem-Forum - deutschsprachiges DIAdem Forum
Skript auf mehrere Arbeitsblätter eines Layouts anwenden - Druckversion

+- DIAdem-Forum - deutschsprachiges DIAdem Forum (https://www.diadem-forum.de)
+-- Forum: DIAdem (https://www.diadem-forum.de/forum-4.html)
+--- Forum: Abläufe automatisieren (https://www.diadem-forum.de/forum-16.html)
+--- Thema: Skript auf mehrere Arbeitsblätter eines Layouts anwenden (/thread-1023.html)



Skript auf mehrere Arbeitsblätter eines Layouts anwenden - christoph_TUD - 05.11.2013

Hallo Forum,

ich nutze DIAdem für die Auswertung von Messergebnissen. Die Messergebnisse liegen in verschiedenen Kanälen vor und werden monatsweise ausgewertet.

Für jeden Monat gibt es einen Datensatz.

Im REPORT hab ich für die Auswertung ein Layout hinterlegt in dem für jedes Signal ein eigenes Arbeitsblatt liegt. Alle Arbeitsblätter verfügen über eine X-Achse auf welcher der Zeitkanal für den Monat liegt.

Nun möchte ich ein Skript ausführen das mir den Zeitkanal monatsweise anpasst, das heißt ich nicht jeden Monat Start und Ende der X-Achse manuell für jedes Arbeitsblatt auswerten muss. (In der Stellung "Komplett Automatisch" passen Start und Ende manchmal nicht richtig)

Derzeit bin ich soweit das ich ein Skript habe welches mir das aktuell geöffnete Arbeitsblatt im Report verändert - die gerade nicht angezeigten aber nicht berücksichtigt.

Meine Frage ist nun also wie muss ein Skript aufgebaut sein damit ich eine X-Wert-Anpassung auf alle vorliegenden Arbeitsblätter eines Layouts anwenden kann?

Vielen Dank für eure Hilfe!

Beste Grüße, Christoph


RE: Skript auf mehrere Arbeitsblätter eines Layouts anwenden - Monnem89 - 29.04.2014

Gibt es hierzu immer noch keine passende Antwort?


RE: Skript auf mehrere Arbeitsblätter eines Layouts anwenden - MichiR - 29.04.2014

Mann muss zuerst mal die Arbeitsblätter mit Report.Sheets.Count zäheln, falls die Anzahl variiert...

anschließend muss man eine schleife einbinden die für jedes arbeitsblatt dann die jeweiligen funktionen ausführt. Da man das nur das entsprechende arbeitsblatt im report anspricht hat dies keine auswirkung auf die anderen

Dim i

For i = 1 to Report.Sheets.Count
XXX
Next

XXX --> hier muss auf jedenfall auf das zu bearbeitende Blatt zugegriffen werden. Entweder mit Report.Sheet(i)....
oder über http://zone.ni.com/reference/de-XX/help/370858K-0113/cmdvarlist/cmdvarlist/varlist_report/


RE: Skript auf mehrere Arbeitsblätter eines Layouts anwenden - Monnem89 - 30.04.2014

So weit bin ich dann jetzt auch gekommen...aber wie um alles in der Welt füge ich einem 2D-Graph einer fertigen Vorlage einen X- bzw. Y-Kanal zu...ich zweifel da langsam an mir selbst....
Ich habe mir aus den Eigenschaften des Funktionsgraphen im Report den Quellcode rausgeholt und die Zeile entdeckt, in der der Graph seinen Inhalt enthält. Diese Zeile habe ich kopiert, abgeändert und erhalte nun den Fehlerhinweis

"Der Index 1 liegt nicht im gültigen Bereich"

Meine Vorgehensweise

Call Report.LoadLayout("XY")

Report.Sheets("Seite1").Objects("2DAxis1").Curves2D.Item(1).Shape.XChannel.Reference = "Ergebnisse/XTestkanal"

Report.Sheets("Seite1").Objects("2DAxis1").Curves2D.Item(1).Shape.YChannel.Reference = "Ergebnisse/YTestkanal"

So funktionierts nicht...mein Ziel ist es, mehrere Funktionen in einem Graphen darzustellen...also brauch ich doch mehrere Items 1,2,3....ich verstehe nicht, was ich da vorher noch definieren müsste.


RE: Skript auf mehrere Arbeitsblätter eines Layouts anwenden - Monnem89 - 30.04.2014

Vielen Dank an alle, ich habe das Problem mittlerweile selber gelöst!
Der Trick an der Sache ist folgender:

0. Layout öffnen über
Call Report.LoadLayout("XY")

1. Auswahl des zu bearbeitenden Arbeitsblatts mit
GraphSheetRefSet ("Name")

2. Öffnen des Graphs im Layout mit
GraphObjOpen("2DAxis1"), wobei "2DAxis1" der Standardname ist

3. Erzeugen einer 2D-Kurve mit
GraphObjNew("2D-Curve", "Kurve 1")

4. Öffnen dieser neuen 2D-Kurve mit
GraphObjOpen("Kurve 1")

5. Zuweisung von x und y-Kanälen mit
D2CCHNXName ="X-Kanal"
D2CCHNYName ="Y-Kanal"

6. Schließen der Kurve mit
GraphObjClose("Kurve 1")

7. Schließen des Graphs
GraphObjClose("2DAxis1")


Fertig!