Hi,
ich habe ein kleines Problem mit dem Fernsteuern von Word:
Verschiedene Formularvorlagen enthalten (an unterschiedlichen Positionen, sonst wäre das ja zu einfach) eine Zelle, in der bei einer bestimmten Aktion ein Bild rein soll (Ein Stempel zur Freigabe des Dokumentes). Ich wollte dies nun so anlegen, dass ich die Formularvorlage schon mit Bild bereitstelle, dieses Bild aber im Hintergrund hinter der Tabelle liegt, und wenn aus meinem Programm heraus das Dokument freigegeben wird, soll die Zelle transparent geschaltet werden (damit der Freistempel sichtbar ist), das Word-Dokument dann in PDF umgewandelt und das PDF archiviert. Die Zelle markiere ich in der entsprechenden Tabelle mit einem Text. Also in etwa so:
[highlight=vbnet]
Public Sub Freigeben(ByVal Dateiname As String)
[Word starten und Dokument laden...]
if Not WinWord.Find("*Freistempel") Then 'Suche die Markierung der Zelle
ShowError("Das Dokument entstammt nicht den Vorlagen und kann daher nicht automatisch freigegeben werden.")
Return
End If
WinWord.Selection.MoveRight(Unit:=WinWord.wdCharac ter, Count:=1, Extend:=WinWord.wdExtend) 'um die Zelle zu markieren und nicht nur den Text
With WinWord.Selection.Cells.Shading
.Texture = WinWord.wdtextureNone
.BackgroundPatternColor = WinWord.wdColorAutomatic
.ForegroundPatternColor = WinWord.wdColorAutomatic
End With
WinWord.Replace("*Freistempel","")
[Umstellen des Druckes auf PDF-Drucker und Drucken...]
[Speichern und schließen des Dokumentes...]
[Beenden von word, sofern oben neu gestartet werden musste...]
End Sub
[/highlight]
WinWord ist hierbei ein Wrapper um die Word-Funktionalität zu kapseln. WinWord.Selection holt sich hierbei aus der aktuell im Wrapper geöffneten Datei die Selection, die Konstanten wdTextureNone und wdColorAutomatic sind gemäß den aus einem in Word aufgezeichneten Makro als wdtextureNon = 0 und wdColorAutomatic = -16777216 definiert.
Das Problem, das ich nun habe, ist dass die Tabellenzelle sich eben NICHT transparent schaltet, sondern weiß bleibt, allerdings ohne dass die Farbe weiß in den Tabelleneigenschaften angezeigt würde. Ich habe auch extra die Tabellenzelle vorher auf Kein Inhalt gesetzt und den Farbwert ausgelesen, aber da gibt er mir auch die -16777216 zurück, am Wert liegt es also nicht, dass ich irgendwo durch das Weglassen der Tabellenrahmenbefehle (die im Makro auch mitaufgetaucht sind) etwas vergessen habe ist es auch nicht, mit einer Farbe wie z.B. hellgelb funktionert es. Muss beim Transparent schalten noch irgendetwas besonderes aufgerufen werden (was das aufgezeichnete Word-Script nicht mit aufgezeichnet hat?). Weil so etwas wie wdColorTransparent gibt es ja anscheinend nicht.
Ich würde nur höchst ungern das Skript im Dokumenttemplate hinterlegen, das ich dann von meinem Programm aus aufrufe, sonst muss der Anwender jedesmal bestätigen, dass die Makros ausgeführt werden sollen, bzw. es geht schief, wenn jemand bei seinem Word eine Sicherheitsstufe eingestellt hat, die das Ausführen von Skripten untersagt.
ich habe ein kleines Problem mit dem Fernsteuern von Word:
Verschiedene Formularvorlagen enthalten (an unterschiedlichen Positionen, sonst wäre das ja zu einfach) eine Zelle, in der bei einer bestimmten Aktion ein Bild rein soll (Ein Stempel zur Freigabe des Dokumentes). Ich wollte dies nun so anlegen, dass ich die Formularvorlage schon mit Bild bereitstelle, dieses Bild aber im Hintergrund hinter der Tabelle liegt, und wenn aus meinem Programm heraus das Dokument freigegeben wird, soll die Zelle transparent geschaltet werden (damit der Freistempel sichtbar ist), das Word-Dokument dann in PDF umgewandelt und das PDF archiviert. Die Zelle markiere ich in der entsprechenden Tabelle mit einem Text. Also in etwa so:
[highlight=vbnet]
Public Sub Freigeben(ByVal Dateiname As String)
[Word starten und Dokument laden...]
if Not WinWord.Find("*Freistempel") Then 'Suche die Markierung der Zelle
ShowError("Das Dokument entstammt nicht den Vorlagen und kann daher nicht automatisch freigegeben werden.")
Return
End If
WinWord.Selection.MoveRight(Unit:=WinWord.wdCharac ter, Count:=1, Extend:=WinWord.wdExtend) 'um die Zelle zu markieren und nicht nur den Text
With WinWord.Selection.Cells.Shading
.Texture = WinWord.wdtextureNone
.BackgroundPatternColor = WinWord.wdColorAutomatic
.ForegroundPatternColor = WinWord.wdColorAutomatic
End With
WinWord.Replace("*Freistempel","")
[Umstellen des Druckes auf PDF-Drucker und Drucken...]
[Speichern und schließen des Dokumentes...]
[Beenden von word, sofern oben neu gestartet werden musste...]
End Sub
[/highlight]
WinWord ist hierbei ein Wrapper um die Word-Funktionalität zu kapseln. WinWord.Selection holt sich hierbei aus der aktuell im Wrapper geöffneten Datei die Selection, die Konstanten wdTextureNone und wdColorAutomatic sind gemäß den aus einem in Word aufgezeichneten Makro als wdtextureNon = 0 und wdColorAutomatic = -16777216 definiert.
Das Problem, das ich nun habe, ist dass die Tabellenzelle sich eben NICHT transparent schaltet, sondern weiß bleibt, allerdings ohne dass die Farbe weiß in den Tabelleneigenschaften angezeigt würde. Ich habe auch extra die Tabellenzelle vorher auf Kein Inhalt gesetzt und den Farbwert ausgelesen, aber da gibt er mir auch die -16777216 zurück, am Wert liegt es also nicht, dass ich irgendwo durch das Weglassen der Tabellenrahmenbefehle (die im Makro auch mitaufgetaucht sind) etwas vergessen habe ist es auch nicht, mit einer Farbe wie z.B. hellgelb funktionert es. Muss beim Transparent schalten noch irgendetwas besonderes aufgerufen werden (was das aufgezeichnete Word-Script nicht mit aufgezeichnet hat?). Weil so etwas wie wdColorTransparent gibt es ja anscheinend nicht.
Ich würde nur höchst ungern das Skript im Dokumenttemplate hinterlegen, das ich dann von meinem Programm aus aufrufe, sonst muss der Anwender jedesmal bestätigen, dass die Makros ausgeführt werden sollen, bzw. es geht schief, wenn jemand bei seinem Word eine Sicherheitsstufe eingestellt hat, die das Ausführen von Skripten untersagt.
Comment