Neuigkeiten:

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

Mobiles Hauptmenü

Aufzählung in Word über Access Modul

Begonnen von Bereich31, Februar 17, 2016, 15:48:17

⏪ vorheriges - nächstes ⏩

Bereich31

Hallo zusammen,

ich habe folgendes Problem (ich habe schon etliche Stunden gesucht):
Aus einer Access 2010 Datenbank heraus erstelle ich ein neues Worddokument und fülle es mit Daten aus der Datenbank. Soweit so gut. Ab einen bestimmten Absatz, welcher fest definiert ist und auch angesprungen wird, möchte ich eine Nummerierung beginnen. Wenn ich mir das über den VBA-Editor in Word erstelle und kopiere, funktioniert nur jeder zweite Aufruf. Bei den anderen erhalte ich den Laufzeitfehler 462 (Der Remote-Server-Computer existiert nicht oder ist nicht verfügbar.) Das Dokument wird aber vorher schon angezeigt und ist auch als Objektvaribale deklariert, welche auch wieder freigegeben wird.
Der Laufzeitfehler spring wenn auch hier an:
With ListGalleries(wdNumberGallery).ListTemplates(1).ListLevels(1) ...
Kann mir jemand weiterhelfen?
Viele Grüße aus der Hansestadt Lüneburg und im voraus vielen Dank.

DF6GL

Hallo,

vermutlich wird das Word-Objekt zwischendurch geschlossen oder anderweitig "zerstört"
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

MaggieMay

Hallo,

die Ursache liegt aller Wahrscheinlichkeit nach in "unsauberer" Programmierung bzgl. der Objektbezüge. Du kannst den Code nicht 1:1 aus Word kopieren, sondern musst stets das jeweils zugehörige Word-Objekt explizit initiieren und referenzieren.

Dies ist vermutlich nur ein Beispiel von vielen:
With ListGalleries(wdNumberGallery).ListTemplates(1).ListLevels(1) ...

Worauf bezieht sich denn dieses "ListGalleries"??
Freundliche Grüße
MaggieMay

Bereich31

Hallo,

also, das Word-Dokument wird nicht geschlossen und kann auch nicht "zerstört" sein, denn es funktioniert ja beim ersten Durchgang. Sobald ich allerdings einen zweiten Durchgang durch führe, läuft der Fehler wieder auf. Der dritte Durchgang wieder ohne....
Das Word-Dokument wird wie folgt initiiert:

Set appWord = CreateObject("Word.application.14")
Set docWord = appWord.Documents.Add(Dokumentenpfad & "Domname.dotx")

Die Varibalen appword und docWord werden ganz zu Beginn der Funktion wie folgt geklariert:

Dim appword as Word.Application
Dim docWord as Word.Document

Hier der Code für das Aufrufen der Nummerrieung:

With appWord.ListGalleries(wdNumberGallery).ListTemplates(1).ListLevels(1)
    .NumberFormat = "%1."
    .NumberPosition = CentimetersToPoints(0)
    .TextPosition = CentimetersToPoints(0.75)
    .StartAt = 1
End With
appWord.Selection.Range.ListFormat.ApplyListTemplate ListTemplate:=ListGalleries(wdNumberGallery).ListTemplates(1)

War das soweit hilfreich?

MaggieMay

#4
Hi,

die Umsetzung meines Tipps ist unvollständig (s. rote Markierungen):
ZitatWith appWord.ListGalleries(wdNumberGallery).ListTemplates(1).ListLevels(1)
    .NumberFormat = "%1."
    .NumberPosition = CentimetersToPoints(0)
    .TextPosition = CentimetersToPoints(0.75)
    .StartAt = 1
End With
appWord.Selection.Range.ListFormat.ApplyListTemplate ListTemplate:=ListGalleries(wdNumberGallery).ListTemplates(1)
Außerdem ist das doch sicher nur ein kleiner Ausschnitt vom Ganzen.
Man muss da schon zu 100% konsequent sein, sonst nützt es nichts.
(-> "CentimetersToPoints" ist eine Word-Methode)

PS:
Wieso setzt du noch alte Word- und Excel-Versionen ein?
Freundliche Grüße
MaggieMay

Bereich31

Hi MaggieMay,
wenn den .CentimetersToPoints eine reine Word-Methode ist, wie müsste ich sie denn dan "vernünftig" abändern?
Und was meinst du mit der Frage nach Alten Word bzw. Excel Versionen?
Ich nutze das Office 2010 weil es mir vorgegeben wird!

MaggieMay

Hi,
Zitatwenn den .CentimetersToPoints eine reine Word-Methode ist
dann musst du sie wohl mit der Objektvariablen "appWord" ansprechen.

Aber wie gesagt, du hast ja nur einen kleinen Ausschnitt gezeigt, die Adressierungs-Fehler kommen sicher noch öfter vor.

ZitatIch nutze das Office 2010 weil es mir vorgegeben wird!
Du hattest ja auch die Verweise gezeigt und da sind die Objektbibliotheken der Version 11 (=2003) eingebunden.
Freundliche Grüße
MaggieMay

trebuh

#7
@Bereich31

Hatte in einer Anwendung auch mit Word zu tun. Da kam beim einrichten der Word-Seite auch das "CentimeterToPoints" zum Einsatz.

hier mal ein Auszug aus meinem Code.

30        Set objWord = CreateObject("Word.Application")
40        Set objDocument = objWord.Documents.Add
         
50        objWord.Visible = True
60        AppActivate objDocument.Name

      '******************************************************************
      'Seitenlayout einrichten

70    With objWord.ActiveDocument.PageSetup
80            .LineNumbering.Active = False
90            .Orientation = [color=red]wdOrientPortrait[/color]
100           .TopMargin = objWord.CentimetersToPoints(5.5)
110           .BottomMargin = objWord.CentimetersToPoints(2.2)
120           .LeftMargin = objWord.CentimetersToPoints(2)
130           .RightMargin = objWord.CentimetersToPoints(1.5)
140           .Gutter = objWord.CentimetersToPoints(0)
150           .HeaderDistance = objWord.CentimetersToPoints(0)
160           .FooterDistance = objWord.CentimetersToPoints(0)
170           .PageWidth = objWord.CentimetersToPoints(21)
180           .PageHeight = objWord.CentimetersToPoints(29.7)
190           .FirstPageTray = [color=red]wdPrinterDefaultBin[/color]
200           .OtherPagesTray = [color=red]wdPrinterDefaultBi[/color]n
210           .SectionStart = [color=red]wdSectionNewPage[/color]
220           .OddAndEvenPagesHeaderFooter = False
230           .DifferentFirstPageHeaderFooter = False
240           .VerticalAlignment = [color=red]wdAlignVerticalTop[/color]
250           .SuppressEndnotes = False
260           .MirrorMargins = False
270           .TwoPagesOnOne = False
280           .BookFoldPrinting = False
290           .BookFoldRevPrinting = False
300           .BookFoldPrintingSheets = 1
310           .GutterPos = [color=red]wdGutterPosLef[/color]

320   End With


Die Rot markierten Variablen sind öffentliche Konstanten in einem Modul
Public Const wdSectionNewPage As Integer = 2
Public Const wdOrientPortrait As Integer = 0
Public Const wdPrinterDefaultBin As Integer = 0
Public Const wdAlignVerticalTop As Integer = 0
Public Const wdToggle As Long = 9999998
Public Const wdAlignParagraphRight = 2
Public Const wdAlignParagraphLeft = 0


Wie MaggieMay schon erwähnte, kann man den VBA-Code von Word nicht 1:1 übernehmen.
Da hatte ich auch Probleme damit.

Habe mir dann das Buch "ACCESS und OFFICE" von "André Minhorst" zugelegt.
Ist empfehlenswert.

Gruß
trebuh




Bereich31

Hallo,

ich habe nun die Verweise angepasst, die Objektbibliothek der Word-Version 14 eingebunden und den Code so angepasst:
With appWord.ListGalleries(wdNumberGallery).ListTemplates(1).ListLevels(1)
    .NumberFormat = "%1."
    .NumberPosition = [color=red]appWord[/color].CentimetersToPoints(0)
    .TextPosition = [color=red]appWord[/color].CentimetersToPoints(0.75)
    .StartAt = 1
End With
appWord.Selection.Range.ListFormat.ApplyListTemplate ListTemplate:=[color=red]appWord[/color].ListGalleries(wdNumberGallery).ListTemplates(1)

Es funktioniert und es kommt kein Fehler mehr.
Sorry für eure strapazierten Nerven, aber vielen Dank für eure Hilfe und eure Mühe.