PromiseYou Geschrieben 6. August 2009 Teilen Geschrieben 6. August 2009 (bearbeitet) :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 6. August 2009 von PromiseYou Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Der Kleine Geschrieben 6. August 2009 Teilen Geschrieben 6. August 2009 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
PromiseYou Geschrieben 7. August 2009 Autor Teilen Geschrieben 7. August 2009 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 ^^) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
PromiseYou Geschrieben 7. August 2009 Autor Teilen Geschrieben 7. August 2009 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Der Kleine Geschrieben 10. August 2009 Teilen Geschrieben 10. August 2009 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
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.