Hallo allerseits,
ich habe mit Access VBA den oben genannten Fehler.
Kommt immer wenn ich das 2te mal etwas drucken will.
Ich erstelle ein neues Word Dokument (NeuesDokument.Docx)
Dann fülle ich dieses mit Daten (Drucken.docx)
Dann kommt der Fehler bei dieser Stelle:
With ActiveDocument.Sections(1) _
.Footers(wdHeaderFooterPrimary).PageNumbers
.NumberStyle = wdPageNumberStyleArabic
.IncludeChapterNumber = False
.RestartNumberingAtSection = True
.StartingNumber = 1
.Add PageNumberAlignment:=wdAlignPageNumberCenter,
Kann mir jemand helfen?
Vielen herzlichen Dank!
Drucken.doc
NeuesDokument.doc
Warum verwendest du ActiveDocument, wenn du doch mit objDocument eine konkrete Referenz auf das Dokument hast?
ActiveDocument kann sich halt jederzeit ändern, wenn man in Word Aktionen ausführt, sowohl manuell als auch per Code.
PS: Bitte poste deinen Code direkt hier im Rorum im Text und nicht in Dateianhängen.
Hallo PhilS,
da brauche ich etwas Unterstützung:
Wenn ich jetzt
With objDocument.Sections(1) _
.Footers(wdHeaderFooterPrimary).PageNumbers
.NumberStyle = wdPageNumberStyleArabic......
arbeite statt mit ActiveDocument dann kommt der gleiche Fehler etwas später:
Do
'
'
With .Selection
.Font.Size = "10"
.TypeText " " & straryTemp(intLoopCounter)
.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, PreserveFormatting:=False
.TypeText Text:="XE """ & straryTemp(intLoopCounter) & """"
.MoveRight Unit:=wdCharacter, Count:=2
.TypeText vbCrLf
End With
ActiveDocument gibt es in Access-VBA gar nicht.
Mit objDocument ist dann eine saubere Referenzierung eingeleitet. Wenn man aber von außen (von Access in das Wordmodell) eingreift, muss die Referenzierung
durchgehend sauber sein.
ZitatRange:=Selection.Range
Diese Auswahl mag zwar innerhalb Word selbstermittelbar sein, aber für Access-VBA ist das wieder ein unbekanntes Wesen und müsste also auf ein schon bekanntes Objekt referenziert werden. Eine Auswahl findet in einem Dokument oder der bezeichneteten Sektion statt?
Hallo ebs17,
das habe ich verstanden das ich durchgängig ohne "AvtiveDocument" arbeiten muss.
Bringe das mit diesem Code nicht hin:
Do
'
'
With .Selection
.Font.Size = "10"
.TypeText " " & straryTemp(intLoopCounter)
.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, PreserveFormatting:=False
.TypeText Text:="XE """ & straryTemp(intLoopCounter) & """"
.MoveRight Unit:=wdCharacter, Count:=2
.TypeText vbCrLf
End With
Wo muss da objDocument hin?
Danke!
Das kann ich Dir auf Anhieb nicht sagen, ich hatte länger mit Word nicht zu tun.
Fragen, die Du Dir selber stellen kannst:
- Wo findet Selection statt?
- Wie findet das statt? Eine Auswahl fällt ja nicht vom Himmel.
- Aber auch siehe Objektkatalog: Worauf kann das Selection-Objekt angewendet werden?
Mir selber ist das Selection-Objekt etwas suspekt. Innerhalb eines Dokuments würde ich mich an Objekten wie Tabellen oder Absätzen orientieren, also nach Objekten, die es im Dokument schon gibt, und gerne auch für eine Verortung auf Textmarken zurückgreifen. So etwas ist recht gut adressierbar. Eine Selection müsste erst vorgenommen werden - nach welchen Kriterien?
Danke ebs17 für deine Hilfe
Trotzdem die Frage an alle anderen.
Kann mir noch jemand etwas Hilfe geben.
Bin so stark nicht in VBA mit Access und Word.
Danke!
Ein freistehendes
Selection in Word meint
Application.
Selection.
In deinem Code schreibst du dann
objWord.
Selection.
Ich schließe mich der Anmerkung von
@ebs17 an; Genauso wie
ActiveDocument bezieht sich
Selection auf ein bewegliches Ziel, das sich abhängig von Benutzeraktionen und/oder Programmcode durchaus schnell ändern kann. Wenn das nicht ausdrücklich gewünscht ist, wäre es zuverlässiger sich auf eine konkrete
Range zu beziehen.
Den einen Codeblock, wo eine leeres Dokument erzeugt und abgespeichert wird, würde ich nur als nutzlose Selbstbeschäftigung bezeichnen.
Ich habe flüchtig in den anderen Code geschaut. Wenn ich das verstehe, wird da zeilenweise(?) ein Inhalt geschrieben und rundum immer heftig formatiert, so als sitzt Du an einer Schreibmaschine. Was da passiert, mag ich nicht beurteilen.
Ich selber würde mir ansehen, was als Ergebnis herauskommen soll, und danach Methoden festlegen.
Eine große Überlegung wäre, ob man eine Wordvorlage mit den nötigen Formatierungen verwenden kann, wovon man sich dann jeweils eine Kopie ableitet und einfach die Inhalte aus dem Recordset hineinschreibt. Vielleicht kann man per Vorlage nicht alles vorbelegen, aber schon einmal einiges. Bildlich: Es wäre nur ein Formular auszufüllen.
Die andere Überlegung (für sich oder in Kombination mit der ersten) wäre, einfach die Inhalte aus dem Recordset in das Dokument zu schreiben und auf diese Inhalte Formate, die man sehr differenziert in Word bereithalten kann, anwendet.
In beiden Fällen hat man durch eine Trennung von Eintrag von Inhalten und Formatierung ganz andere Aufgaben und wohl nicht eine Berührung mit dem Selection-Objekt.
Hallo ebs17,
das sind sicherlich gute Ratschläge die ich leider nicht in der Lage bin auszuführen.
Ich habe seinerzeit so ein ähnliches Word-Dokument aus einer DB erstellt. da dann immer nur mal eine Liste gedruckt wurde, war das kein Problem.
Jetzt habe ich das kopiert, angepasst muss jetzt mehrere Listen drucken.
Das jetzt umzubauen, sehe ich mich nicht in der Lage.
Ich bin jetzt auf folgender Lösung:
Alles was so drum rum ist habe ich aus dokumentiert, bzw. auf objDokument umgestellt.
Set myRange = Selection.Range
Set objInlineShape = objDocument.InlineShapes.AddPicture(FileName:=bildpath, _
SaveWithDocument:=True, LinkToFile:=False, Range:=myRange)
objInlineShape.ScaleHeight = 23
objInlineShape.ScaleWidth = 23
Das Bild muss ich aber drucken. Selection.Range läuft aber auf Fehler.
objDocument nimmt er auch nicht, was kann ich tun?
Danke
Oder anders herum:
Kann mir jemand helfen ein Bild nach der aktuellen Zeile zu drucken
Mit anderem Code?
Ich weiß leider nicht wie!
Zitat von: tommytulpe am April 13, 2024, 13:43:37Das Bild muss ich aber drucken. Selection.Range läuft aber auf Fehler.
objDocument nimmt er auch nicht, was kann ich tun?
Oben nachlesen, was ich dazu schrieb.
Set myRange = Selection.Range
Selection heißt Auswahl. Dazu ist in meiner Vorstellung eine Aktivität nötig, die eben etwas auswählt. Als zweiter Punkt und schon besprochen: Ohne Referenzierung ist das ein unbekanntes Objekt. Womit referenzieren: Der Objektkatalog zeigt nötige und mögliche Abhängigkeiten.
ZitatobjDocument nimmt er auch nicht
Das "auch" impliziert, das war nicht der einzige Versuch. Welche Versuche sind noch gescheitert, und welche wurden nicht ausgeführt?
Hallo allerseits,
ich habe ja verstanden, das mit Selection das so nicht geht.
Ich habe aber eine Bitte:
Nach der aktuellen gedruckten Zeile, möchte ich ein Bild einfügen
Set myRange = .Range
Set objInlineShape = objDocument.InlineShapes.AddPicture(FileName:=bildpath, _
SaveWithDocument:=True, LinkToFile:=False, Range:=myRange)
objInlineShape.ScaleHeight = 23
objInlineShape.ScaleWidth = 23
Okay, so geht es nicht beim 2ten mal.
Kann mir jemand helfen mal einen CodeSchnipsel zu zeigen der funktionieren kann.
Danke!
Zitatms word vba bild einfügen
Das wäre eine einfache Stichwortkette, mit der man eine erste Eigenrecherche starten kann.
Nach Eigentest gibt es da auch Ergebnisse mit Codebeispielen.
Über eine konkrete Gestaltung mag ich nicht urteilen in immer noch vorhandener Unkentnis zu Deinem Dokument.
Hallo allerseits,
da mir ohne großen Aufwand ein umprogrammieren nicht möglich ist,
möchte dieses Thema beenden.
Vielen Dank für Eure Unterstützung.
Bis irgendwann mal wieder.
Mit freundlichen Grüßen
Thomas