Announcement

Collapse
No announcement yet.

Tabellenzelle in Word transparent schalten

Collapse
This topic is closed.
X
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Tabellenzelle in Word transparent schalten

    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.

  • #2
    Hallo,

    siehe auch http://entwickler-forum.de/showthread.php?t=58943 und bitte keine Crossposts.


    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

    Comment


    • #3
      Hi Gü,

      Originally posted by gfoidl View Post
      Hallo,

      siehe auch http://entwickler-forum.de/showthread.php?t=58943 und bitte keine Crossposts.


      In diesem Fall handelte es sich eindeutig um ein Word-Problem (auch bei Ausführung des aufgezeichneten Makros blieb die Zelle undurchsichtig weiß), so dass die Frage in diesem Forum eigentlich falsch aufgehoben war. Dies hatte ich nach gewisser Zeit festgestellt, konnte den Thread aus diesem Forum aber nicht zurückziehen. Auch wenn die FAQ zwar sagt, ich könne meine Beiträge löschen, finde ich keinen Knopf dafür und in den Forenregeln unten links steht auch nur ich könne Beiträge bearbeiten.

      Wenn Du die Timestamps der Threads gelesen hättest, wäre Dir auch der Zeitunterschied aufgefallen. Es handelt sich hiermit also um kein Crosspost im eigentlichen Sinn (Stellen einer Frage ZEITGLEICH in zwei Foren, was ja auch nur deshalb gefährlich ist, weil die beiden Threads nichts voneinander wissen und auf die bisherigen Antworten im jeweils anderen Thread nicht zurückgeifen können; aus diesem Grund hatte ich explizit auf diesen verwiesen), sondern um den Ausgleich des Mankos, dass mir keine Möglichkeit zur Verfügung stand, den Thread in ein anderes Forum zu verschieben. Nicht jeder arbeitet parallel in allen Foren (das kenne ich ja von mir, ich sehe in die Word- und Excel-Foren auch nur alle Jubeljahre mal rein, konnte aber trotzdem schon einige Male auch dort helfen), und wenn einer mit Kernkompetenz VBA für Word diese Frage hätte beantworten können, hätte er diese Frage niemals finden können, wenn er in seinem Kompetenzforum verbleibt.

      Die Frage hat sich übrigens inzwischen erledigt, ich habe eine andere Möglichkeit gefunden, die allerdings den Nachteil enthält, dass ich die benötigte Grafik parallel zu der Vorlage mit verteilen muss, aber wenigstens funktioniert das. Da ich der Art und Weise, wie DU definierst, was ein Crosspost ist und wen man dafür ansch... darf, entnehme, dass Du nicht nur regelmäßiger Gast sondern Forenmoderator bist (das mit der helfenden Art stimmt zwar, das mit der freundlichen muss ich aber irgendwie verpasst haben), könntest Du die beiden Threads bitte schließen? (bzw. diesen schließen und den anderen löschen?) Und wenn das nächste Mal so etwas auftaucht, kann ich mich dann einfach an Dich wenden, um den Thread zu verschieben?

      Danke und schönes Wochenende
      Martin Dietz

      Comment


      • #4
        Und wenn das nächste Mal so etwas auftaucht, kann ich mich dann einfach an Dich wenden, um den Thread zu verschieben?
        Wenn man mal ein Frage in einem 2.ten Forum stellen möchte aus welchem Grund auch immer (es gibt legitime Gründe) dann sollte es reichen wenn man genau das macht was Gü nachgeholt hat, nämlich die Threads zu verlinken. So kann jeder geneigte Leser sich das ~ganze~ Bild von deinem Problem machen oder zumindest feststellen das dir woanders schon geholfen wurde und man selbst sich keinen Mühe mehr machen brauch.

        @Gü: Um die Sache zu vereinfachen, da ja häufiger auf Crossposts hingewiesen werden muß, würde ich für einen Stickypost 'Wie Crossposte ich richtige' plädieren.

        Comment


        • #5
          Hallo,

          Und wenn das nächste Mal so etwas auftaucht, kann ich mich dann einfach an Dich wenden, um den Thread zu verschieben?
          Ja. Oder an sonst einen Mod für das zuständige Forum.

          Für mich ist es ein Crosspost. Gleiches Problem wurde in zwei Foren gefragt. Da aber beides im Entwickler-Forum ist habe ich das Thema nicht geschlossen wie ich dies sonst machen würde.

          Gewundert hat mich nur warum im anderen Thema der Link auf dieses war und hier kein Link auf das andere. Darum hab ich die Antwort überhaupt erstellt. Ansonsten gebe ich dir keine Antworten mehr, da du mir das vorgeschlagen hast. Dies bestätigt sich auch in
          dass Du nicht nur regelmäßiger Gast sondern Forenmoderator bist (das mit der helfenden Art stimmt zwar, das mit der freundlichen muss ich aber irgendwie verpasst haben)
          Es stimmt dass ich Moderator für den .net-Bereich bin.
          Aber was soll die nicht freundliche Art? Ich begrüße jeden gleich mit Hallo und außerdem steht in obiger sachlichen Antwort von mir sogar ein bitte drin. Außerdem wird jede meiner Antworten bewusst mit "mfG" für "mit freundlichen Grüßen" abgeschlossen. Was willst du denn mehr?
          Mir sind deine Äußerungen schleierhaft, wenn schon begründe sie. Solltest du private Probleme haben dann geh Holzhacken oder sonst was, aber schreib das nicht unbegründet im Forum.
          Mir ist auch egal was du darüber denkst. Ich werde meinen Stil nicht ändern und ich denke dass die meisten anderen damit ganz zu frieden sind. Sonst kannst du dich ja an die Foren-Leitung wenden und dich über mich beschweren

          könntest Du die beiden Threads bitte schließen? (bzw. diesen schließen und den anderen löschen?)
          Diesen kann ich schließen, beim anderen habe ich nicht die Rechte dazu.



          @Ralf: Hab ich in http://entwickler-forum.de/showthread.php?p=180526 ergänzt. Danke für den Hinweis.


          Zuletzt editiert von gfoidl; 27.11.2009, 16:02.
          "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

          Comment

          Working...
          X