Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

VBA Der Remote-Server-Computer existiert nicht oder ist nicht verfügbar

Begonnen von tommytulpe, April 11, 2024, 13:44:48

⏪ vorheriges - nächstes ⏩

tommytulpe

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!
Sie dürfen in diesem Board keine Dateianhänge sehen.
Sie dürfen in diesem Board keine Dateianhänge sehen.
 

PhilS

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.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

tommytulpe

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



 


ebs17

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?
Mit freundlichem Glück Auf!

Eberhard

tommytulpe

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!

ebs17

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?
Mit freundlichem Glück Auf!

Eberhard

tommytulpe

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!

PhilS

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.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

ebs17

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.


Mit freundlichem Glück Auf!

Eberhard

tommytulpe

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
 

tommytulpe

Oder anders herum:

Kann mir jemand helfen ein Bild nach der aktuellen Zeile zu drucken

Mit anderem Code?

Ich weiß leider nicht wie!

PhilS

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.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

ebs17

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?
Mit freundlichem Glück Auf!

Eberhard

tommytulpe

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!

ebs17

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.
Mit freundlichem Glück Auf!

Eberhard