anding
Goto Top

Word 2010 - Textmarken mit Exceldaten befüllen

VBA-Skript zum Befüllen von Word mit Exceldaten

Hallo Zusammen,

ich habe ein Problem im Word VBA. Ich suche eine Lösung, in der ich per VBA eine Exceldatei auslesen kann und die Daten in Word-Textmarken einfügen lasse.

Es soll so sein, beim öffnen der Datei werde ich gefragt, was ich auslesen will. Wähle ich Benutzer 1 aus, dann:

Textmarke 1 = Exceldatei1 Tabellenblatt1 Zelle A3
Textmarke 1 = Exceldatei1 Tabellenblatt1 Zelle A5
Textmarke 1 = Exceldatei1 Tabellenblatt1 Zelle A8
Textmarke 1 = Exceldatei1 Tabellenblatt5 Zelle C3
usw.

Lässt sich das irgendwie umsetzen, oder bin ich komplett auf dem Holzweg?!

Content-ID: 201917

Url: https://administrator.de/contentid/201917

Ausgedruckt am: 22.11.2024 um 03:11 Uhr

miniversum
miniversum 18.02.2013 um 14:57:17 Uhr
Goto Top
Für Textmarken weiß ich jetzt nicht aber für ein Textfeld ginge das ungefär so:
Set xlWkb = GetObject("C:\Exceldatei1.xls")  
ZellWert = xlWkb.Sheets("Tabellenblatt1").Range("A3").Value  
xlWkb.Saved = True
xlWkb.Close
Set xlWkb = Nothing
ActiveDocument.CustomDocumentProperties("Textfeld1").Value = ZellWert  

Vielleicht hilft dir das schon mal weiter
76109
76109 18.02.2013 aktualisiert um 16:33:10 Uhr
Goto Top
Hallo miniversum!

Textmarken in etwa so:
    strText = "Textmarken-Text"  
    
    With ActiveDocument
        If .Bookmarks.Exists("Textmarke 1") Then  
            With .Bookmarks("Textmarke 1").Range.Words(1)  
                If .Characters(1) > " " Then .Delete  'Textmarke-Inhalt ggf vorher löschen  
               .InsertBefore strText
            End With
        Else
            MsgBox "Textmarke 1 nicht gefunden!", vbExclamation, "Fehler . . ."  
        End If
    End With

Deine Codezeile 3 und 4 könntest Du auch durch diese Codezeile ersetzen:
xlWkb.Close False  ' Schließen ohne Speichern  

Gruß Dieter
anding
anding 19.02.2013 um 16:02:16 Uhr
Goto Top
Hallo,

ich bin schon recht weit - nur eine Frage stellt sich mir jetzt noch.
Ich will eine Select Case Anweisung in Verbindung mit einer ComboBox:

Wenn Punkt1 ausgewählt --> Mach das
Wenn Punkt2 ausgewählt --> Mach das
Wenn Punkt3 ausgewählt --> Mach das
.
.
.
.

Könnt ihr mir da helfen?!
76109
76109 19.02.2013 um 18:06:50 Uhr
Goto Top
Hallo anding!

In etwa so:
Private Sub ComboBox1_Change()
    Select Case ComboBox1.ListIndex
        Case 0
            MsgBox "Punkt1"  
        Case 1
            MsgBox "Punkt2"  
        Case 2
            MsgBox "Punkt3"  
        Case Else
            MsgBox "PunktX"  
    End Select
End Sub
Oder so:
Private Sub ComboBox1_Change()
    Select Case ComboBox1.Value
        Case "Punkt1"  
            MsgBox "Punkt1"  
        Case "Punkt2"  
            MsgBox "Punkt2"  
        Case "Punkt3"  
            MsgBox "Punkt3"  
        Case Else
            MsgBox "PunktX"  
    End Select
End Sub

Gruß Dieter
miniversum
miniversum 19.02.2013 um 18:33:54 Uhr
Goto Top
Zitat von @76109:
Hallo miniversum!

Deine Codezeile 3 und 4 könntest Du auch durch diese Codezeile ersetzen:
> xlWkb.Close False  ' Schließen ohne Speichern  
> 

Hallo Dieter

Ich weiß das ich das in eine einzelne Zeile packen könnte. Ich mag es allerdings manchmal separat um es übersichtlich zu halten.

Man könnte sich noch als Möglichkeit überlegen zwischen meine Zeile 1 und 2 ein
savestate = xlWkb.Saved
zu packen und dann vor dem schliessen mit
xlWkb.Saved = savestate
den Ursprungszustand wieder herzustellen.
76109
76109 19.02.2013 um 19:48:13 Uhr
Goto Top
Hallo miniversum!

Wozu den Ursprungszustand wiederherstellen, wenn das Workbook eh geschlossen wirdface-wink.

Zudem würde ich in Verbindung mit 'GetObject' nicht raten, ein Workbook zu speichern, sondern GetObject nur zum Auslesen von Workbooks zu verwenden. Was ich damit meine, findest Du heraus, indem Du mal ein Workbook mit GetObject speicherst und anschließend in Excel öffnest...

Gruß Dieter
miniversum
miniversum 19.02.2013 um 20:08:07 Uhr
Goto Top
Wenn es wirklich mit GetObject geöffnet wurde, dann ist das speicher flag sowieso nicht gesetzt und es wird nicht gespeichert.
War die Excel Mappe allerdings bereits geöffnet wird sie ja mit GetObject nicht noch einmal neu geöffnet. Änderungen könnten allerdings gemacht worden sein die noch nicht gespeichert sind. Da macht das rücksetzen Sinn. Der eigentliche close befehl muss natürlich auch bedingt werden.
76109
76109 19.02.2013 um 20:31:09 Uhr
Goto Top
Hallo miniversum!

Ja, wenn das Workbook bereits geöffnet ist, wäre dass ein Zustand, den ich noch nicht getestet habe und unter dieser Annahme, würde ich dann auch kein GetObject verwenden oder vorher mit WSchell.AppActivate prüfen, ob die Datei bereits geöffnet ist...

Gruß Dieter
anding
anding 20.02.2013 um 07:25:13 Uhr
Goto Top
Vielen Dank euch allen! face-smile

Ein Thema hab ich noch. Öffne ich die dotm, startet das UserForm einwandfrei, nur will ich eben, dass es öffnet bei einem neuen Dokument nach dieser Vorlage. Hab ich den Code an der falschen Stele eingefügt?!

Private Sub Document_Open()
UserForm1.Show
End Sub
76109
76109 20.02.2013, aktualisiert am 22.02.2013 um 16:07:23 Uhr
Goto Top
Hallo anding!

Versuchs mal mit:
Private Sub Document_New()

Gruß Dieter
anding
anding 22.02.2013 um 10:38:47 Uhr
Goto Top
Vielen Dank!