PDA

Vollständige Version anzeigen : Textfelder via Script ansprechen


annivw
20.04.2005, 14:25
Hallo Forum,

habe mir die 12er Graphic Suite von Corel installiert um damit täglich wieder neu Bild + Text als Jpeg zu exportieren und anschließend weiter zu verarbeiten... soweit der grobe Umriss.

Das 'Bild' bleibt dabei identisch nur der Text muss geändert werden.
Aus diesem Grund habe ich mir - wie von Excel und Access gewöhnt ein schönes Userform gebastelt, in der Hoffnung, dass ich auch hier die Textfelder ansprechen und so aktualisieren kann.

Im Objektmanager heißt zB das erste Textfeld aktKurs und im Userform txtaktKurs

Ich hatte gehofft, dass ich nun ähnlich wie folgt die Werte updaten kann:

activepage.aktkurs = me.txtaktkurs

Leider funktioniert das nicht wie geplant:-(
Für Hilfe zu diesem Problem wäre ich sehr dankbar, ggfls würde ich auch andere Lösungsansätze übernehmen.
(Ich hatte schon drüber nachgedacht, dass man vielleicht 'das Bild' als Vorlage nimmt und die Textfelder jeden Morgen via VBA/ CorelScript neu erstellen lässt - aber leider benötige auch hierbei Hilfe...)

Wichtig wäre hierbei eine ausgesprochen hohe Nutzerfreundlichkeit, da dieses Progrämmchen auch von ziemlichen Laien fehlerfrei bedient werden können muss.

Ich hoffe wieder einmal auf eure Hilfe!

peppi
20.04.2005, 18:02
Hallo,

so ganz klar ist mir nicht, was Du vorhast. Sind es mehrere Textfelder, die aktualisiert werden müssen? Denn bei einem ist es doch egal, ob der neue Text in die Userform oder direkt ins Textfeld geschrieben wird...

Was das Exportieren angeht, ist vielleicht der Thumbnailer von Oberon [klick mich] (http://www.oberonplace.com/vba/drawmacros/thumbnailer/index.htm) etwas für Dich?

annivw
21.04.2005, 12:40
hallo Peppi, Hallo Forum

Entschuldige, - ja es sind mehrere Textfelder pro Page sind es 5 bei ca 9 Pages insgesamt.

Da die Pages abgesehen von den Werten und einem 'Namenskästchen' identisch sind, wollte ich über o.g. Userform mittels Toggelbutton die entsprechend benötigte Seite auswählen und die Werte über die Userform eintragen/neu erstellen

- Mein Problem ist jedoch, dass mir mein Brett gerade so vor dem Kopf hängt, dass ich weder weiß wie ich die Textfelder ansprechen kann um sie mit neuem Text zu füllen
noch wie ich die Textfelder per CorelScript erstellen, platzieren und füllen kann
(Vorher müsste ich natürlich noch die alten Textfelder löschen)....

Ich hoffe, du hast eine Idee, weil Corel nun nicht wirklich meine Spezialität ist!
Habe vor Jahren mal 'rein geschaut' und musste mir nun schnell ein Programm anschaffen um schnellschnell oben besagte Aufgaben lösen zu können...


Danke für den Hinweis mit dem Thumnailer, doch das Problem hatte ich bereits mit dem Makrorekorder lösen können...

peppi
21.04.2005, 12:47
Hallo,

da hast Du Dir aber wohl irgendwie das falsche Programm angeschafft...

Warum müssen denn die Bildunterschriften mit exportiert werden? In welchem Programm wird das denn eingefügt?

Wenn Du mir mal nähere Angaben machst, fällt mir vielleicht noch eine andere Lösung ein?

annivw
21.04.2005, 13:09
Hallo,

da hast Du Dir aber wohl irgendwie das falsche Programm angeschafft...

Warum müssen denn die Bildunterschriften mit exportiert werden? In welchem Programm wird das denn eingefügt?

Wenn Du mir mal nähere Angaben machst, fällt mir vielleicht noch eine andere Lösung ein?


Hallo,
nein, das sind keine BIldunterschriften, sondern Texte IM Bild

naja, Vielleicht ist es auch nicht wirklich ein Bild - es ist schwer zu erklären....
- daher siehe mal das beigefügte Attachment....
(Ist nur ein Ausschnitt - daher kann man den 5. Wert nicht erkennen - verdeckt durch das heruntergeklappte Menue...)
Das 'Namenskästchen ' ist das links oben - die anderen Werte wie zB 1,2925 müssen täglich geupdatet werden...

Ich hoffe, dass macht es klarer?!

peppi
21.04.2005, 13:33
Hallo,

ich würde es mir in diesem Fall einfacher machen und den Seriendruck verwenden, und in ein pdf drucken. Wenn es sein muß, kann man das aus dem Acrobat heraus ja auch als jpg oder eps speichern, kommt halt darauf an, in welchem Programm bzw. wo überhaupt es denn nachher eingebunden werden muß.

annivw
21.04.2005, 13:40
Hallo,

ich würde es mir in diesem Fall einfacher machen und den Seriendruck verwenden, und in ein pdf drucken. Wenn es sein muß, kann man das aus dem Acrobat heraus ja auch als jpg oder eps speichern, kommt halt darauf an, in welchem Programm bzw. wo überhaupt es denn nachher eingebunden werden muß.


Hallo, kannst du mir das mit dem Seriendruck näher erläutern?
Wie ist dabei die (möglichst genaue) Vorgehensweise?
Woher können die Quelldaten kommen - und irgendwie muss dann doch auch die Textfelder ansprechen????
Mir geht es wirklich nur um die Textfelder, der Rest ist eigtenlich schon verwirklicht - nur, da die Textfelder das allerwichtigste sind, kann ich eben derzeit auch mit dem Rest nix anfangen :-( ....


Ich benötige jpegs 300 auf 400 pixel mit 300 dpi
Aber wie gesagt, die Konvertierung klappt ja, nur mit Atualisierung (auf automatischem Weg) hapert es.

peppi
21.04.2005, 13:59
Hallo,

der Seriendruck ist in Coreldraw sehr einfach geworden. Man ruft einfach Datei | Seriendruck auf und läßt sich "führen". Wobei Du darauf achten mußt, daß Du nach Eingabe der Seriendruckdaten auf speichern klickst. Das ist dann eine Textdatei, die Du täglich ändern kannst.

Wenn Du die Daten eingegeben hast, kannst Du sie einfach mittels der Seriendruck-Symbolleiste in Deinem Dokument platzieren und nach Deinen Wünschen formatieren.

Wenn Du möchtest, kannst Du mir diese Datei mal zuschicken, und ich könnte es Dir vorbereiten, bzw. auch selbst mal ein wenig damit "spielen". Meine Mailadresse: peppi (peppi@ms-office-forum.net). Selbstverständlich bleiben die Daten geheim.

Allerdings werde ich erst heute am späten Abend oder morgen im Laufe des Vormittags dazu kommen.

annivw
21.04.2005, 14:11
Hallo,

Allerdings werde ich erst heute am späten Abend oder morgen im Laufe des Vormittags dazu kommen.

hallo Peppi,
Danke schon einmal bis hierher - auf die idee mit dem seriendruck wäre ich nicht gekommen - da ich selbst erst morgen wieder am "Corel" Rechner sitze, würde ich sagen wir verschieben das Ganze auf morgen :-)

Schönen Tag noch ...

annivw
22.04.2005, 13:09
Hallo Peppi,

das File ist auf dem Weg....

schönes WE

peppi
22.04.2005, 14:14
Hallo Anni,

"Teil" ist angekommen... nur muß ich selbst zu meiner Schande gestehen, daß ich blöd bin... ich habe doch "nur" Corel 11. Das heißt, Du müßtest die Datei im 11er Format abspeichern und mir nochmals schicken. Jetzt muß ich aber auch wieder weg, so daß ich erst morgen dazu kommen werde. Reicht das dann?

annivw
22.04.2005, 18:10
Hallo Anni,

"Teil" ist angekommen... nur muß ich selbst zu meiner Schande gestehen, daß ich blöd bin... ich habe doch "nur" Corel 11. Das heißt, Du müßtest die Datei im 11er Format abspeichern und mir nochmals schicken. Jetzt muß ich aber auch wieder weg, so daß ich erst morgen dazu kommen werde. Reicht das dann?


Sorry, komme vor Montag nicht an die Datei dran!
Also schönes Wochenende
(und natürlich reicht das - Hauptsache es läuft hinterher...)

annivw
25.04.2005, 09:59
Sorry, komme vor Montag nicht an die Datei dran!
Also schönes Wochenende
(und natürlich reicht das - Hauptsache es läuft hinterher...)


OK, Datei ist auf dem Weg....

peppi
25.04.2005, 10:02
Hallo,

habe sie bekommen, muß aber gleich weg und werde mich erst heute abend damit beschäftigen können.

annivw
28.04.2005, 09:09
und, schon mal drüber geschaut?

peppi
28.04.2005, 10:07
Hi Anni,

nicht so früh am Morgen :grins: bei mir fängt der Tag später an...

Ich habe mich die letzten Tage immer mal wieder durch die vba-Geschichte gekämpft. Das Problem ist nur, daß das bei mir nicht aktiv ist (warum weiß der Himmel). An meinem Rechner "auf Arbeit" funktioniert es, nur da habe ich wenig Zeit. Eigentlich müßte es über vba gehen, da die Textfelder Bezeichnungen haben.

Das mit dem Serienbrief ist kein Problem, es ist halt nur ein weiterer Schritt für Dich, da Du erst einmal in ein pdf drucken, um dann den Acrobat zu öffnen, und die Datei als jpg abspeichern mußt. Deshalb juckt es mich ja in den Fingern, was vba angeht.

In der mir übersandten Datei fehlt die Userform und der Code dafür. Kannst Du den Code, den Du bis jetzt dafür hast, mal hier posten?

annivw
28.04.2005, 12:15
Also gut....



Sub LadePunkteFileszumUpdate()
'
' Description:
'öffnet alle Punktefiles anschließend manuelles Updaten der Kurse erforderlich
'öffnet entsprechende Dokumente
Set EURUSD = CreateDocumentFromTemplate("C:\PFAD\EUR-USD.cdt", True)
Set USDJPY = CreateDocumentFromTemplate("C:\PFAD\USD-JPY.cdt", True)
Set EURJPY = CreateDocumentFromTemplate("C:\PFAD\EUR-JPY.cdt", True)
Set EURGBP = CreateDocumentFromTemplate("C:\PFAD\EUR_GBP.cdr", True)
Set DAX = CreateDocumentFromTemplate("C:\PFAD\DAXcdt.cdt", True)
Set EStxx = CreateDocumentFromTemplate("C:\PFAD\Estxx.cdt", True)
Set TecDax = CreateDocumentFromTemplate("C:\PFAD\TecDAXcdt.cdt", True)
'Ansichtsoptimierung
Windows.Arrange cdrTileVertically
'EUR/USD in den Vordergrund da vermutlich default
EURUSD.Activate
ActiveWindow.WindowState = cdrWindowMaximized
Set OrigSelection = ActiveSelectionRange
ActiveWindow.ActiveView.ToFitAllObjects

'Updateform anzeigen
frmUpdating.Show
frmUpdating.cmbSlide.SetFocus

End Sub

Zum Schluss folgender Vorgang:
Sub convert2jpeg()
'
' Recorded 11.04.2005
'
' Description:
' Konvertiert UsedFiles zu jpegs im Format 141auf 113
'
Dim OrigSelection As ShapeRange
Set OrigSelection = ActiveSelectionRange
Dim expflt As ExportFilter
Set expflt = ActiveDocument.ExportBitmap("D:\PFAD\EUR_JPY.jpg", cdrJPEG, cdrCurrentPage, cdrRGBColorImage, 141, 113, 300, 300, cdrNormalAntiAliasing, False, False, False, False, cdrCompressionNone)
With expflt
.Progressive = False
.Optimized = False
.SubFormat = 1
.Compression = 0
.Smoothing = 0
.Finish
End With
Documents(6).Activate
Set expflt = ActiveDocument.ExportBitmap("D:\PFAD\Estoxx.jpg", cdrJPEG, cdrAllPages, cdrRGBColorImage, 141, 113, 300, 300, cdrNormalAntiAliasing, False, False, False, False, cdrCompressionNone)
With expflt
.Progressive = False
.Optimized = False
.SubFormat = 1
.Compression = 0
.Smoothing = 0
.Finish
End With
Documents(2).Activate
Set expflt = ActiveDocument.ExportBitmap("D:\PFAD\DAX.jpg", cdrJPEG, cdrAllPages, cdrRGBColorImage, 141, 113, 300, 300, cdrNormalAntiAliasing, False, False, False, False, cdrCompressionNone)
With expflt
.Progressive = False
.Optimized = False
.SubFormat = 1
.Compression = 0
.Smoothing = 0
.Finish
End With
Documents(1).Activate
Set expflt = ActiveDocument.ExportBitmap("D:\PFAD\EUR_USD.jpg", cdrJPEG, cdrAllPages, cdrRGBColorImage, 141, 113, 300, 300, cdrNormalAntiAliasing, False, False, False, False, cdrCompressionNone)
With expflt
.Progressive = False
.Optimized = False
.SubFormat = 1
.Compression = 0
.Smoothing = 0
.Finish
End With
Documents(7).Activate
Set expflt = ActiveDocument.ExportBitmap("D:\PFAD\EUR_GBP.jpg", cdrJPEG, cdrAllPages, cdrRGBColorImage, 141, 113, 300, 300, cdrNormalAntiAliasing, False, False, False, False, cdrCompressionNone)
With expflt
.Progressive = False
.Optimized = False
.SubFormat = 1
.Compression = 0
.Smoothing = 0
.Finish
End With
Documents(4).Activate
ActiveDocument.Close
Documents(4).Activate
Set expflt = ActiveDocument.ExportBitmap("D:\PFAD\TecDAX.jpg", cdrJPEG, cdrAllPages, cdrRGBColorImage, 141, 113, 300, 300, cdrNormalAntiAliasing, False, False, False, False, cdrCompressionNone)
With expflt
.Progressive = False
.Optimized = False
.SubFormat = 1
.Compression = 0
.Smoothing = 0
.Finish
End With
'schließen und Beenden aufrufen
Call SchliesseAlleFiles
Call QuitApp '---> funktioniert nicht?!
End Sub


Sub SchliesseAlleFiles()
Dim anzahl, i
anzahl = Documents.Count
For i = 1 To anzahl - 1 Step 1
If i > 1 Then i = i - 1
Documents(i).Close
anzahl = Documents.Count
i = 1
If anzahl < i Then Exit For
Next
Call QuitApp
End Sub


Sub QuitApp()

Quit

End Sub



_____________________________

Bis hierher funktioniert alles , außer das Corel sich nicht automatisch beendet (was aber nicht weiter schlimm ist)

Nun kommt der Problematischere teil mit dem UserForm:
_____________________________


Private Sub cmbSlide_()
'hier Namen des zu aktivierenden Slides auswählen und entsprechende Punkt eintragen

'Me.cmbSlide.AddItem "EURUSD", 0
'Me.cmbSlide.AddItem "USDJPY", 1
'Me.cmbSlide.AddItem "EURJPY", 2
'Me.cmbSlide.AddItem "EURGBP", 3
'Me.cmbSlide.AddItem "DAX", 4
'Me.cmbSlide.AddItem "EStxx", 5
'Me.cmbSlide.AddItem "TecDax", 6

Select Case cmbSlide.Value
Case Is = "EURUSD"
Documents(EURUSD).Activate
ActiveWindow.WindowState = cdrWindowMaximized
Set OrigSelection = ActiveSelectionRange
ActiveWindow.ActiveView.ToFitAllObjects

Case Is = "USDJPY"
USDJPY.Activate
ActiveWindow.WindowState = cdrWindowMaximized
Set OrigSelection = ActiveSelectionRange
ActiveWindow.ActiveView.ToFitAllObjects

Case Is = "EURJPY"
EURJPY.Activate
ActiveWindow.WindowState = cdrWindowMaximized
Set OrigSelection = ActiveSelectionRange
ActiveWindow.ActiveView.ToFitAllObjects

Case Is = "EURGBP"
EURGBP.Activate
ActiveWindow.WindowState = cdrWindowMaximized
Set OrigSelection = ActiveSelectionRange
ActiveWindow.ActiveView.ToFitAllObjects

'und die Indizes
'usw

End Select
End Sub

Private Sub cmbSlide_Change()
Select Case cmbSlide.Value
Case Is = "EURUSD"
EURUSD.Activate
ActiveWindow.WindowState = cdrWindowMaximized
Set OrigSelection = ActiveSelectionRange
ActiveWindow.ActiveView.ToFitAllObjects

Case Is = "USDJPY"
USDJPY.Activate
ActiveWindow.WindowState = cdrWindowMaximized
Set OrigSelection = ActiveSelectionRange
ActiveWindow.ActiveView.ToFitAllObjects

Case Is = "EURJPY"
EURJPY.Activate
ActiveWindow.WindowState = cdrWindowMaximized
Set OrigSelection = ActiveSelectionRange
ActiveWindow.ActiveView.ToFitAllObjects

Case Is = "EURGBP"
EURGBP.Activate
ActiveWindow.WindowState = cdrWindowMaximized
Set OrigSelection = ActiveSelectionRange
ActiveWindow.ActiveView.ToFitAllObjects

'und für die Indices
Case Else
EURUSD.Activate
ActiveWindow.WindowState = cdrWindowMaximized
Set OrigSelection = ActiveSelectionRange
ActiveWindow.ActiveView.ToFitAllObjects
End Select

End Sub

Private Sub cmbSlide_DropButtonClick()
Dim i

If Me.cmbSlide.ListCount > 0 Then
For i = 0 To 6
Me.cmbSlide.RemoveItem i
Next
End If
Me.cmbSlide.AddItem "EURUSD", 0
Me.cmbSlide.AddItem "USDJPY", 1
Me.cmbSlide.AddItem "EURJPY", 2
Me.cmbSlide.AddItem "EURGBP", 3
Me.cmbSlide.AddItem "DAX", 4
Me.cmbSlide.AddItem "EStxx", 5
Me.cmbSlide.AddItem "TecDax", 6
Me.cmbSlide.Value = ""
Me.Repaint
End Sub

Private Sub cmdOK_Click()
Dim OrigSelection As ShapeRange
Set OrigSelection = ActiveSelectionRange
SlideName = Me.cmbSlide.Value
'Documents(SlideName).Activate
Dim aktkurs As ShapeRange
'getLayerOnPage
'Set aktkurs = "aktKurs"
ActivePage.Layers("Internet-Ebene").Activate
'ActivePage.ActiveLayer.Editable = True
Dim Tr As TextRange


If ActiveLayer.Name = ("Internet-Ebene") Then MsgBox ("ActiveLayer= Internet-Ebene")
MsgBox ("ActiveLayer.Shape.Name = " & ActiveLayer.FindShape.Name)
If ActiveLayer.FindShape.Name = "ersterWiderstand" Then
'ActivePage.ActiveShape = "aktkurs"
Dim wert


'###################################
'#
'# Und ab hier DAS PROBLEM
'#
'###################################

wert = Me.txtaktuellerKurs.Value
Set ActiveLayer.ActiveShape = wert


ActiveLayer.ActiveShape.write = Me.txtaktuellerKurs.Value
ActiveLayer.FindShape("aktkurs").Text = Me.txtaktuellerKurs.Value
End If
' Documents!SlideName.ersterWiderstand = Me.txtWiderstand1
' Documents!SlideName.zweiterWiderstand = Me.txtWiderstand2
' Documents!SlideName.ersteUnterstützung = Me.txtUnterstützung1
' Documents!SlideName.zweiteUnterstützung = Me.txtUnterstützung2
' ActiveDocument.Refresh
End Sub

Function getLayerOnPage()
Dim pagelayers As Layers
ActivePage.Shapes.All
Dim anzahl, i
anzahl = ActivePage.Shapes.Count
For i = 1 To anzahl
ActivePage.Shapes.FindShape "aktKurs"
' If i = 2 Then ActivePage.Layers(i) = "ersterWiderstand"
' If i = 3 Then ActivePage.Layers(i) = "zweiterWiderstand"
' If i = 4 Then ActivePage.Layers(i) = "ersteUnterstützung"
' If i = 5 Then ActivePage.Layers(i) = "zweiteUnterstützung"
Next

End Function

Private Sub txtaktKurs_Change()
aktkurs = Me.txtaktKurs
End Sub

annivw
02.05.2005, 07:32
on Top :(