Seite 1 von 3
Ergebnis von Select Anweisung in calc Sheet schreiben
Verfasst: Do, 31.07.2008 14:18
von sg1985
Hallo,
ich habe ein Makro, das eine Select Anweisung ausführt, dessen Ergebnis dann in ein Calc Sheet geschrieben werden soll.
Alles kein Problem, solange man das Ergebnis der Select Anweisung spaltenweise in ein Array und dann ins Calc Sheet schreiben kann.
Ich brauche das Ergebnis der Select Anweisung im calc Sheet aber in anderer Form. Ich erhalte als Ergebnis 3 Spalten (mehrere Monate, mehrere Tasknamen, dazugehörige Stundenanzahl),
wobei die Monate in die Spalte geschrieben werden sollen, die Tasknamen in die Zeile und die Stundenanzahl eben in die entsprechende Spalte+Zeile.
Ich habe ein Datei angehängt, die ein Beispiel enthält wie es ausschauen soll.
Als Ergebnis der Select Anweisung erhalte ich beispielsweise folgende Datensätze, wobei jeder Datensatz aus 3 Spalten besteht:
06 Krank 4,5
06 Besprechung 3,25
07 Controlling 25,5
Re: Ergebnis von Select Anweisung in calc Sheet schreiben
Verfasst: Do, 31.07.2008 19:10
von komma4
Eine Ausgabe der Daten im gewünschten Format lässt sich bestimmt auch mit der SQL-Abfrage erzielen (DISTINCT, GROUP BY, SUM, Sub-SELECTs), das kann bei variabler Anzahl der Tätigkeiten aber recht schnell unübersichtlich werden.
wie wäre es mit:
Ausgabe der SQL_Abfrage wie bekannt(Tabelle3), dann erzeuge mit dem Datenpilot die gewünschte Ausgabe (Tabelle2).
Die "Tabelle3" kannst Du ausblenden,
Ist das unsere nächste Basic-Übung?
Re: Ergebnis von Select Anweisung in calc Sheet schreiben
Verfasst: Fr, 01.08.2008 07:37
von sg1985
Hallo Winfried,
Bei der SQL Abfrage kann man hier leider nicht mehr erreichen, die Stunden pro Monat für einen bestimmten Task werden schon nur einmal selektiert und summiert. D.h. es gibt sowieso schon nur mehr einen Datensatz für ein bestimmtes Monat und einen bestimmten Task, natürlich kann es vom gleichen Monat aber auch noch andere Tasks geben.
Die Lösung mit dem Datenpilot gefällt mir insofern nicht, da ich alles mit einem Makro lösen sollte - und es für den späteren Benutzer wirklich so einfach sein sollte, dass er nur auf die Schaltfläche klickt, die das Makro auslöst und schon hat er das Ergebnis der SQL Abfrage im Calc Sheet stehen.
Gibt es da nicht noch mehr Möglichkeiten das Ergebnis per Makrocode in ein Calc Sheet zu schreiben? (also halt nicht nur spaltenweise in ein Array, sondern halt irgendwie anders)
An dieser Stelle möchte ich mich noch einmal bei dir für deine Geduld und deinen Einsatz bedanken

Re: Ergebnis von Select Anweisung in calc Sheet schreiben
Verfasst: Fr, 01.08.2008 07:58
von komma4
You're welcome.
Natürlich kannst Du Zellen einzeln setzen, adressiere eine Zelle und setze Wert, Formel oder Zeichenkette:
Code: Alles auswählen
oBlatt = ThicComponent.Sheets().getByName(" Jahr2008" )
oZelle1 = oBlatt.getCellRangeByName( "F2" )
oZelle2 = oBlatt.getCellByPosition( 3, 6 )
oZelle1.setString( "Datum" )
oZelle2.setValue( 39661 )
Dabei musst Du den Gruppenwechsel für die Zeilen (Monat ändert sich) halt selbst programmieren und Dir die Ausgabespalten aufbereiten (:= merken, welche Tätigkeit in welche Spalte kommt).
Re: Ergebnis von Select Anweisung in calc Sheet schreiben
Verfasst: Fr, 01.08.2008 08:51
von sg1985
hm ok ich glaube das würde zu kompliziert werden.
Also bei deinem Vorschlag mit dem Datenpilot müsste man ja nur auf Daten/Datenpilot gehen, dort "aktuelle Selektion" auswählen, das Layout einstellen und auf "OK" klicken und schon
hat man die gewünscht Ansicht.
Nun meine Frage: kann man das mit dem Makro automatisieren, so dass es der User den Datenpilot nicht händisch aufrufen und einstellen muss, sondern die Arbeit auch gleich vom Makro erledigt wird?
Re: Ergebnis von Select Anweisung in calc Sheet schreiben
Verfasst: Fr, 01.08.2008 10:48
von komma4
Aufwändig sind beide Lösungen.
Wobei das "manuelle Setzen" (Ansteuern der einzelnen Zellen) der Tabelle eben "nur" Fleissarbeit (Gruppenwechsel!) ist.
Ich selbst habe noch keinen DatenPiloten per Makro erstellt. Prinzipiell sollte aber alles, was "per Hand" er-/eingestellt werden kann, auch per Makro zu programmieren sein. Hat den Vorteil der Wiederverwendbarkeit und der Fehlervermeidung....
Code: Alles auswählen
oDok = ThisDocument.Sheets()
oBlatt = oDok.getByName( "Tabelle1" )
oPilotTabellen = oBlatt.getDataPilotTables()
If oPilotTabellen.hasByName( "Jahr2008" ) Then
' refresh ?
Else
' erstellen
xray oPilotTabellen
' Methoden: .insertNewByName( name, datapilotdescriptor )
End If
Zu viel mehr werde ich heute nicht kommen.... Viel Erfolg!
Re: Ergebnis von Select Anweisung in calc Sheet schreiben
Verfasst: Mo, 04.08.2008 07:41
von sg1985
Hört sich gut an, dass man das auch alles per Makro programmieren kann, was man per Hand einstellen kann... dann würde ich das mit dem Datenpiloten gerne so machen, bin aber leider ein
wenig hilflos und habe keinen brauchbaren Code gefunden bis jetzt
Hat jemand von euch so etwas vielleicht schon mal programmiert oder kann mir weiter helfen?
Re: Ergebnis von Select Anweisung in calc Sheet schreiben
Verfasst: Mo, 04.08.2008 08:36
von komma4
wollte mich am Wochenende damit beschäftigen***, und dann war das Wetter zu gut...
Nun regnet es, mal schauen, ob ich ein Beispiel hinbekomme...
*** (bedeutet auch: ich kenne keinen Demo-Code im Netz)
Re: Ergebnis von Select Anweisung in calc Sheet schreiben
Verfasst: Mo, 04.08.2008 08:49
von sg1985
das wäre super, wenn du mir helfen könntest
ich sehe da 2 Möglichkeiten, entweder das SQL statement direkt vom Datenpiloten auswerten lassen (also den Datenpiloten auf eine SQL Abfrage aufrufen), oder das Ergebnis im Calc sheet ausgeben (dann ausblenden) und dann den Datenpiloten auf diese (aktuelle Selektion) aufrufen. Wobei ich wie gesagt nicht weiß inwiefern das alles programmiertechnisch effizient lösbar ist.
Re: Ergebnis von Select Anweisung in calc Sheet schreiben
Verfasst: Mo, 04.08.2008 13:59
von turtle47
sg1985 hat geschrieben:Nun meine Frage: kann man das mit dem Makro automatisieren, so dass es der User den Datenpilot nicht händisch aufrufen und einstellen muss, sondern die Arbeit auch gleich vom Makro erledigt wird?
Hilft dieser
Link weiter?
Jürgen
Re: Ergebnis von Select Anweisung in calc Sheet schreiben
Verfasst: Mo, 04.08.2008 14:12
von komma4
Bei Ian aus Neuseeland findet sich eine Beispieldatei, die ich aber noch nicht untersucht habe:
http://homepages.paradise.net.nz/hillvi ... Pilot3.ods
Viel Erfolg!
Re: Ergebnis von Select Anweisung in calc Sheet schreiben
Verfasst: Mo, 04.08.2008 14:21
von sg1985
auf den Link von turtle bin ich vorher auch schon gestoßen, aber ich komme irgendwie nicht zu Recht mit dem Code
Das Beispiel vom Ian ist mir ein bisschen zu viel, vor allem soll der spätere User ja nicht wieder etwas einstellen müssen bei einem Dialog für den Datenpiloten.
Ich brauche ja immer nur das gleiche Layout des Datenpiloten (Monat als Zeilenfeld, Taskname als Spaltenfeld und Stunden als Datenfeld.
@winfried: versuchst du dich auch noch an einem Demo-Code Beispiel für den Datenpiloten?
Re: Ergebnis von Select Anweisung in calc Sheet schreiben
Verfasst: Mo, 04.08.2008 14:36
von komma4
ja, versuchen will ich das schon. Der erste Blick auf den Code von Ian lässt mich hoffen, dass ich das schaffe.
Die Woche ist allerdings schon arg belegt bei mir.
Re: Ergebnis von Select Anweisung in calc Sheet schreiben
Verfasst: Mo, 04.08.2008 14:55
von sg1985
schade, ich muss es nämlich bis spätestens Mittwoch so hinbringen mit dem einfachen Datenpiloten. Ich hoffe, ich schaff das irgendwie

Re: Ergebnis von Select Anweisung in calc Sheet schreiben
Verfasst: Mo, 04.08.2008 15:04
von sg1985
ich glaube übrigens der Code vom Link von turtle ist einfach zu verstehen, obwohl ich da auch schon hänge...