Zum Inhalt springen

Word aus Excel "fernsteuern"


PromiseYou

Empfohlene Beiträge

:new

Hallo zusammen,

ich hab da nen Problem, was mich nun schon einige tage gekostet hat, und ich dennoch nicht weiterkomme.

es ist durchaus möglich, dass das, was ich machen möchte so garnicht zu realisieren ist, dann bitte ich um entsprechende alternativen.

Ziel ist es, eine Insel-Lösung zu schaffen, in der Daten aus "Genehmigungen" gesammelt werden.

Ich weiß, dass dies ein klassischer Fall für Access ist, jedoch besitzt hier nicht jeder eine Access - Version auf dem Rechner, und das soll sich auch nicht ändern.

Also habe ich mir Excel als Datensammlung geschnappt.

In Excel hab ich nun div. Arbeitsblätter mit div. Daten. Ein Datensatz besteht aus 10 Elemente, die nun in ein "Karteiblatt" ausgedruckt werden sollen.

Hierzu habe ich probeweise unter Word ein "Vordruck" entworfen:

Sub Makro1()

'

' Makro1 Makro

' Neues Dokument vorbereiten mit Textmarken und Überschriften für Karteiblatt

'

  Documents.Add DocumentType:=0

  Application.Move Left:=-2, Top:=373

  Selection.ParagraphFormat.TabStops.Add Position:=CentimetersToPoints(11.11 _

    ), Alignment:=wdAlignTabLeft, Leader:=wdTabLeaderSpaces

  Application.Move Left:=26, Top:=111

  Selection.Font.Bold = wdToggle

  Selection.TypeText Text:="Gemeinde" & vbTab & "Antragsteller"

  Selection.TypeParagraph

  With ActiveDocument.Bookmarks

    .Add Range:=Selection.Range, Name:="Gemeinde"

    .DefaultSorting = wdSortByName

    .ShowHidden = False

  End With

  Selection.TypeText Text:=vbTab

  With ActiveDocument.Bookmarks

    .Add Range:=Selection.Range, Name:="Antragsteller"

    .DefaultSorting = wdSortByName

    .ShowHidden = False

  End With

  Selection.TypeParagraph

  Selection.TypeParagraph

  Selection.TypeText Text:="Gemarkung:" & vbTab & "Aktenzeichen:"

  Selection.TypeParagraph

  With ActiveDocument.Bookmarks

    .Add Range:=Selection.Range, Name:="Gemarkung"

    .DefaultSorting = wdSortByName

    .ShowHidden = False

  End With

  Selection.TypeText Text:=vbTab

  With ActiveDocument.Bookmarks

    .Add Range:=Selection.Range, Name:="Aktenzeichen"

    .DefaultSorting = wdSortByName

    .ShowHidden = False

  End With

  Selection.TypeParagraph

  Selection.TypeParagraph

  Selection.TypeText Text:="Gebiet:" & vbTab & "Ablage:"

  Selection.TypeParagraph

  With ActiveDocument.Bookmarks

    .Add Range:=Selection.Range, Name:="Gebiet"

    .DefaultSorting = wdSortByName

    .ShowHidden = False

  End With

  Selection.TypeText Text:=vbTab

  With ActiveDocument.Bookmarks

    .Add Range:=Selection.Range, Name:="Ablage"

    .DefaultSorting = wdSortByName

    .ShowHidden = False

  End With

  Selection.TypeParagraph

  Selection.TypeParagraph

  Selection.TypeText Text:="Erlaubnis von:" & vbTab & "Erlaubnis bis:"

  Selection.TypeParagraph

  With ActiveDocument.Bookmarks

    .Add Range:=Selection.Range, Name:="Datum_von"

    .DefaultSorting = wdSortByName

    .ShowHidden = False

  End With

  Selection.TypeText Text:=vbTab

  With ActiveDocument.Bookmarks

    .Add Range:=Selection.Range, Name:="Datum_bis"

    .DefaultSorting = wdSortByName

    .ShowHidden = False

  End With

.

.

.

.

.

End Sub
Das haut auch super hin :bimei nun kann ich im Direktfenster:
oWord.Selection.ParagraphFormat.TabStops.Add Position:=CentimetersToPoints(11.11 _

    ), Alignment:=wdAlignTabLeft, Leader:=wdTabLeaderSpaces

oder auch:
oword.selection.GoTo what:=wdGoToBookmark, name:="Gemeinde"

eingeben und es wird alles richtig ausgeführt (also der Tab wird richtig gesetzt, und auch der Sprung zu Textmarke gelingt). Wenn ich dieses nun im Quellcode integriere bekomme ich immer den Laufzeitfehler: "438" mit der Beschreibung: "Objekt unterstützt diese Eigenschaft oder Methode nicht" zur Deklaration: Ich habe es auf verschiedene Weisen versucht :/
Option Explicit

Dim oWord As Object

Dim oText As Object

Dim bWordVorhanden As Boolean

und in der Prozedur habe ich es dann nochmals als Applikation gesetzt (aber auch ohne versucht)

Vll. hat ja jemand sowas in der Art für sich schon mal gelöst, und kann mir nun dabei helfen ...

Eine andere Alternative die ich versucht habe ist, dieses "Karteiblatt" mit Hilfe von Excel zu erstellen, jedoch tut sich eine fürchterliche Eigenschaft von Excel hier auf.

Damit ich einen mehrzeiligen Text hinterher auch als mehrzeiligen Text auf's Papier bekomme wollte ich die Spalten in einer Zeile zusammenfügen (Merge), und diese dann als mehrzeiliges Textfeld verwenden, jedoch scheitert es daran, dass Excel das "AutoFit" auf verbundene Zellen nicht anwenden kann :/

Nun müßte ich ja, um zu wissen, wie groß die Zelle werden muß (also Höhe), alle Chr(13) und Chr(10) abfangen, sowie die Anzahl der Zeichen, um dann daraus zu errechnen, wieviele Zeilen das ergibt, um dadraufhin dann die Höhe der Zeile einzustellen.

Vllt. ist dies ja sogar anders möglich ...

Das sind halt die zwei Ansätze zur Lösung meines Problems, wo jedoch keine der beiden so wirklich richtig funtzt :(

Thx a lot for help ;)

Bearbeitet von PromiseYou
Link zu diesem Kommentar
Auf anderen Seiten teilen

Oword müsste eigentlich ein worddocument innerhalb einer wordapplication sein.

VBA will es genau wissen.

Such mal unter diesen Stichpunkten (nicht bei der 2007 Hilfe - die ist nicht gut), da gibt es irgendwo Beispiele.

PS: Irgendwo habe ich es (aus Access gemacht - ist im Prinzip da Gleiche), aber ich habe keine Suchlust derzeit.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hmmm ...

also verstanden hab ich das nun nicht wirklich ...

Also welche Stichpunkte soll ich nach suchen ? ...

hier im Büro gibt es die Excel2000 version, somit habe ich nicht die probleme der 2007 hilfe ^^

ich hab nun folgendes ausprobiert:


Option Explicit

Dim oWord As Object

Dim oText As Object

Dim bWordVorhanden As Boolean


Sub WordSteuerung()

  Set oWord = CreateObject("Word.Application") 

  Set oText = oWord.Documents

  oText.Selection.Goto -1, , , "Gemeinde"

End Sub

als auch

Option Explicit

Dim oWord As Object

Dim oText As Object

Dim bWordVorhanden As Boolean


Sub WordSteuerung()

  Set oWord = CreateObject("Word.Application")

  Set oText = oWord.Documents

  oText.Selection.Goto what:= -1, Name:="Gemeinde"

End Sub

in beiden fällen wir mir der fehler " 438 - Objekt unterstützt diese Eigenschaft oder Methode nicht" generiert

ich vermute nun den Fehler in der Deklaration, bin mir aber absolut unsicher, wie ich nun die dekla richtig mache, damit der obige code auch funtzt (sollte doch wohl gehen unter microsoft ... kommen doch auch dem gleichem hause ,... oder ist genau das der grund ?? ^^ ... armes redmond ^^)

Link zu diesem Kommentar
Auf anderen Seiten teilen

okay,

so wie es aussieht habe ich eine lösung gefunden ...

mit:

oWord.ActiveDocument.Bookmarks.Item(i).Select

kann ich nun die Bookmarks "anspringen",

und tabstops setze ich nun einfach global für das ganze dokument mit:

oword.ActiveDocument.DefaultTabStop = InchesToPoints(4.5) '4,5" entspricht 11,43 cm im Dok#

ich schreib das mal hier rein, fals mal wer auch sowas benötigt ...

jedoch eine frage habe ich noch, die wird sich sicher auch bei der weiterarbeitet beantwort, aber ich kann nicht warten ^^ (ist ja schließlich WE)

wenn ich mit

oWord.Application.Documents.Open ("F:\WBA\WBA25\Word\KarteiblattWrE.doc")

ein (neues) word starte, dann wird dies nur in den hintergrund geladen ?!

Also im Taskmanger sehe ich den task, jedoch kann ich ihn nur dort sehen. Jedoch kann ich in diesem "verstecktem" word arbeiten ...

gibt es in diesem bezug einschränkungen ??? wer dazu was weiß, immer her mit infos ^^

thx a lot

Link zu diesem Kommentar
Auf anderen Seiten teilen

gibt es in diesem bezug einschränkungen ???
Nein, du kannst word komplett fernsteuern.

Einschränkungen bzw. Beschränkungen gibt es keine, sofern du alles wieder schliesst und freigibst. Ansonsten wird dir irgendwann dein Arbeitsspeicher deine Grenzen aufzeigen.

Man kann die Applicatiopn auch sichtbar machen. Es könnte also mit

oword.visible=true

schon funktionieren.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...