Seite 1 von 1
[gelöst] Datum in Textfeld (Placeholder) einfügen
Verfasst: Mi, 26.05.2010 13:25
von GrobMakrobiker
Hallo allerseits,
ich komme an folgender Stelle nicht weiter und bitte um einen kleinen Hinweis...
Ich lese eine Datenarray aus einer Calc-Tabelle aus und füge es in Writer mittels Textmarken (Placeholder) ein.
Das funktioniert auch ganz gut,allerdins wird der Datum-Wert als Zahl eingefügt (z.B. 41205).
Bisher sieht es so aus:
Code: Alles auswählen
If oFeld.Placeholder = arrKopfzeile(l,0) Then 'hier wird der Tabellenkopf ausgelesen. Die Platzhalter heißen wie der Spaltenkopf.
neuerText=arrDataSatz(l,0)
If IsNumeric(neuerText) Then 'falls Zahlen in der Zelle stehen...
' neuesDatum= CDate(neuerText) 'geht nicht
neuesDatum= Format(neuerText, "DDDD, \d\e\n D. M YYYY")
msgbox neuesDatum 'zeigts richtig an, lässt sich aber so nicht schreiben
oText.insertString(oCursor,neuesDatum,true)
oText.insertString(oCursor,Format(neuerText, " "DDDD, \d\e\n D. M YYYY", true)' produziert auch eine Fehlermeldung
End If
oText.insertString(oCursor,neuerText,true) 'dieser Teil ist unproblematisch
Meine Fehlversuche sind im Code noch drinnen... nicht dokumentiert ist mein Versuch ein neues Datumsfeld anzulegen, aber das klappte auch irgendwie nicht.
Meine Fragen:
1. Wie kann ich den Datumswert in den Platzhalter im Text schreiben, so dass er richtig formatiert ist?
2. Gibt es eine elegantere Version der Überprüfung, ob es sich um ein Datum handelt als "IsNumeric"? "IsDate" läuft bei mir einfach so durch...
Vielen Dank, auch für kleinere gedankliche Anstöße
Groby
Re: Datum in Textfeld (Placeholder) einfügen
Verfasst: Mi, 26.05.2010 14:05
von Maxx88
Hi,
bin relativ neu in der Makroprogrammierung also wenn ich jetzt Quark erzähle bitte ich um Berichtigung.
Soweit ich das immer Verstanden habe sind die Datumswerte in Calc im Hintergrund immer Zahlen und erst die Formatierung der Zahlen bewirkt das das ganze als Datum angezeigt wird.
Da im Writer ja nichts als Datumsfeld formatiert werden kann würde ich das mittels einer Funtkion in einen String umwandeln.
In etwa so:
Code: Alles auswählen
function calcToForm(calc) 'SUB zum Umrechnen eines Datums aus der Tabelle in das Format des Formulars
DIM datform as long
DIM str as string
datform=Year(calc)&Format(Month(calc),"00")&Format(Day(calc),"00") 'String uaus dem Datum zusammensetzten im FOrmat YYYYMMDD
calcToForm=datform
end function
Das Format kannst du dir ja dann alleine abändern.
Ich hoffe ich konnte etwas helfen.
Gruß Max
Re: Datum in Textfeld (Placeholder) einfügen
Verfasst: Mi, 26.05.2010 14:29
von GrobMakrobiker
Hallo Max,
danke für Deine Idee, aber damit kriege ich es nicht hin.
Code: Alles auswählen
neuesDatum= Format(neuerText, "DDDD, \d\e\n D. M YYYY")
msgbox neuesDatum
zeigt genau an, was ich will...
Warum kann man es nicht mit
oder mit
Code: Alles auswählen
oText.insertString(oCursor,Format(neuerText, "DDDD, \d\e\n D. M YYYY"),true)
ins Feld schreiben?
Das macht mich irgendwie ratlos.... aber vielen Dank nochmals
Groby
Re: Datum in Textfeld (Placeholder) einfügen
Verfasst: Mi, 26.05.2010 16:43
von DPunch
Aloha
Bei mir funktioniert das Einfügen per CDate absolut problemlos.
Was das Überprüfen angeht, kannst Du mit einem improvisierten Try-Catch-Block arbeiten - wenn der übergebene Satz zu einem Datum umgewandelt werden kann, wird er das auch, wenn nicht, dann eben nicht.
Wenn Deine Platzhalter als Platzhalter vom Typ "Text" im Dokument sind, kannst Du mal das hier probieren:
Code: Alles auswählen
If oFeld.Placeholder = arrKopfzeile(l,0) Then
neuerText=arrDataSatz(l,0)
On Local Error GoTo InsertAnyway
neuerText = CDate(neuerText)
InsertAnyway:
oFeld.Anchor.String = neuerText
End If
Wie liest Du eigentlich Dein Datenarray aus der Calc-Tabelle aus? Per ".getDataArray"?
Wenn ja, dann wundert mich, dass Du mit der Schreibweise "arrKopfzeile(1,0)" darauf zugreifen kannst. Das sollte eigentlich nicht funktionieren.
Re: Datum in Textfeld (Placeholder) einfügen
Verfasst: Do, 27.05.2010 10:12
von GrobMakrobiker
Hmmm- leider gehts nicht, egal ob der Text eingefügt wird oder nicht springt das Makro immer zum "InsertAnyway".
Dort gehts dann nciht weiter, da der "Anchor" nicht gefunden wird. Ich hab überall gesucht, verstehe das aber nicht so ganz ... und hänge mal voller Hoffnung meine Dateien an, vielleicht weiß ja jemand Rat...
Vielen Dank
Groby
Re: Datum in Textfeld (Placeholder) einfügen
Verfasst: Do, 27.05.2010 11:32
von DPunch
Aloha
Ich hab Dir das Makro mal entsprechend angepasst.
Schau mal, ob Du damit was anfangen kannst.
Re: Datum in Textfeld (Placeholder) einfügen
Verfasst: Do, 27.05.2010 11:54
von GrobMakrobiker
Ja, so geht's!
scheint ja viel besser zu sein als meine Versuche... und je länger ich darüber nachdenke, desto logischer erscheint es mir. Wieder was dazugelernt, Danke!
Zu:
muss ich mich dann nochmals informieren, bis ich es richtig verstehe, was da passiert...
however it works!
Vielen Dank für die schnelle Hilfe!!!!!
Groby
Re: [gelöst] Datum in Textfeld (Placeholder) einfügen
Verfasst: Do, 27.05.2010 12:08
von DPunch
Aloha
unterdrückt einfach die Benachrichtigung der Controller, dass sie ihre Darstellung aktualisieren sollen.
In Deinem Fall sind es nicht allzuviele Felder, die sich aktualisieren müssen, so dass der Geschwindigkeitsvorteil kaum auffallen dürfte - aber je mehr Felder Du per Makro ersetzt, desto öfter würde sich die Anzeige normalerweise erneuern und desto länger würde es dauern. Mit lockControllers kann man viele Vorgänge enorm beschleunigen.
(Gilt übrigens nicht nur für Aktionen in Writer-Dokumenten, sondern z.B. auch für das Kopieren, Ersetzen etc in Calc-Dokumenten, eben alles, wofür das Dokumentview sich aktualisieren müsste, um die neuen Daten anzuzeigen)
Re: [gelöst] Datum in Textfeld (Placeholder) einfügen
Verfasst: Do, 27.05.2010 12:38
von GrobMakrobiker
Vielen Dank für die Erläuterung!
Alles läuft nun wie geschmiert. Die Beträge wurden zwar als Datum ausgegeben, aber ich habe sie in der Ausgangstabelle nun einfach als "String" (also mit Hochkomma) deklariert, das ist so kein Problem.
Es macht ja alles viel Spaß, aber der Zeitaufwand ist echt beträchtlich, bis man (als Laie) mal alles am Laufen hat
Viele Grüße!
Groby