Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1348to1352
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Word 2013 Absturz mit PasteSpecial aus Excel

Word 2013 Absturz mit PasteSpecial aus Excel
27.02.2014 20:11:21
Tobias
Hallo Community
Gerne bitte ich um eure Hilfe. Der folgende Code funktioniert problemlos mit Office 2007 und Office 2010, nicht aber bei Office 2013. Die Zeile mit PasteSpecial bringt Word zum Absturz.
********************************************
Option Explicit
Dim WordApp As Word.Application
____________________________________________
Sub PicToWord()
Dim doc As Word.Document
Dim iIndex As Integer
Set WordApp = CreateObject("Word.Application")
With WordApp
.Visible = True
Set doc = .Documents.Add
Set doc = .ActiveDocument
End With
iIndex = WordApp.Documents.Count
Set doc = WordApp.Documents(iIndex)
ThisWorkbook.Worksheets("Tabelle1").Shapes("logogruen").Copy
With doc.Sections(1).Headers(wdHeaderFooterPrimary).Range
.Tables.Add Range:=doc.Sections(1).Headers(wdHeaderFooterPrimary).Range, NumRows:=2, _
_
NumColumns:=2, DefaultTableBehavior:=wdWord9TableBehavior ', AutoFitBehavior:=wdAutoFitContent
.Tables(1).Cell(Row:=1, Column:=1).Merge MergeTo:=.Tables(1).Cell(Row:=2, Column:=1) _
_
.Tables(1).Columns(1).Width = WordApp.CentimetersToPoints(9.5)
.Tables(1).Columns(2).Width = WordApp.CentimetersToPoints(7.5)
.Tables(1).Cell(1, 1).Range.PasteSpecial
.Tables(1).Cell(1, 2).Range.Text = "Titel 1"
.Tables(1).Cell(2, 2).Range.Text = "Untertitel"
.Tables(1).Borders.InsideLineStyle = wdLineStyleNone
.Tables(1).Borders.OutsideLineStyle = wdLineStyleNone
End With
Set WordApp = Nothing
Set doc = Nothing
End Sub

**********************************************
An was könnte das liegen? Ausprobiert habe ich schon "Paste" (mit dem selben Ergebnis) und "PasteAndFormat" (was mir aber ein anderes Problem generiert). Bin Rat los :(
Ich hoffe, ich bin mit meiner Anfrage in diesem Forum richtig, auch wenn der kritische Code-Teil Word betrifft... Weiss momentan einfach nicht weiter...
Danke für jede Hilfe!!
Tobias

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Word 2013 Absturz mit PasteSpecial aus Excel
01.03.2014 10:29:29
fcs
Hallo Tobias,
ich hab jetzt kein Excel/Word 2013, sondern MS Office 2010.
Ich hab dein Makro getestet. Funktioniert bei mir auch.
Scheinbar haben die MS-Fuzzies bei der 2013er Version ein wenig an dem Range.PasteSpecial-Objekt unter Word gebastelt, so dass Word das Format des in Excel kopierten Objektes nicht automatisch erkennt und ein passendes Datenformat beim Einfügen auswählt.
Schau dir in der 2013er-Version von Word-VBA die Hilfe zu
Range.PasteSpecial
---und
WdPasteDataType
an.
Unter Word 2010:
Range.PasteSpecial-Methode
Fügt den Inhalt der Zwischenablage ein.
Syntax
Ausdruck.PasteSpecial(IconIndex, Link, Placement, DisplayAsIcon, DataType, IconFileName,  _
IconLabel)

Ausdruck Erforderlich. Eine Variable, die ein Range-Objekt darstellt.
WdPasteDataType-Enumeration
Gibt das Format für den Inhalt der Zwischenablage an, wenn dieser in ein Dokument eingefügt wird.
Name Wert Beschreibung
wdPasteBitmap 4 Bitmap.
wdPasteDeviceIndependentBitmap 5 Geräteunabhängige Bitmap.
wdPasteEnhancedMetafile 9 Erweitertes Metadatei.
wdPasteHTML 10 HTML.
wdPasteHyperlink 7 Hyperlink.
wdPasteMetafilePicture 3 Metadatei-Grafik.
wdPasteOLEObject 0 OLE-Objekt.
wdPasteRTF 1 Rich Text Format (RTF).
wdPasteShape 8 Form.
wdPasteText 2 Text.
Wenn du für den Parameter "DataType" den Wert wdPasteShape oder einen der Parameter für ein Grafikformat angibst, dann sollte es funktionieren.
            .Tables(1).Cell(1, 1).Range.PasteSpecial DataType:=wdPasteShape
Gruß
Franz

Anzeige
AW: Word 2013 Absturz mit PasteSpecial aus Excel
01.03.2014 15:46:39
Tobias
Lieber Franz
Ganz herzlichen Dank für deine Bemühungen. Leider klappt das auch nicht. In der VBA Entwicklerreferenz für Word 2013 werden dieselben DataType Varianten aufgelistet, wie du angegeben hast. Die habe ich auch bereits durchprobiert, leider ohne Erfolg. Ich vermute eben auch, das Microsoft da irgendwas geändert hat.
Was sehr merkwürdig ist: Wenn ich nach dem Absturz Word 2013 wieder starte, bietet mir Word die Möglichkeit an, die abgestürzte Datei wiederherzustellen. In dieser sehe ich dann, dass das Bild eingebaut wurde, wie gewünscht.
Nur hilft mir das auch nicht weiter.
Danke trotzdem für deine Hilfe.
Liebe Grüsse, Tobias

Anzeige
AW: Word 2013 Absturz mit PasteSpecial aus Excel
02.03.2014 06:45:18
fcs
Hallo Tobias,
Was sehr merkwürdig ist: Wenn ich nach dem Absturz Word 2013 wieder starte, bietet mir Word die Möglichkeit an, die abgestürzte Datei wiederherzustellen. In dieser sehe ich dann, dass das Bild eingebaut wurde, wie gewünscht.
Das ist jetzt eine zusätzliche Info. Das Makro scheint unter der 365-Version zumindest komplett ausgeführt zu werden. Warum Word damm abschmiert?
Was passiert denn, wenn du das Makro ohne die PasteSpecial-Anweisung ausführst?
Wird das Worddolument dann korrekt mit der Tabelle und dem Text angezeigt? Wenn Nein, dann ist es ein Zeichen, dass das Problem an einer ganz anderen Stelle ist. Die Frage ist dann: Wo?
Ich hab jetzt den Kopiervogang in Word mal mit dem Makro-Recorder aufgezeichnet, wobei das zu kopierende Objekt in Excel eine eingefügte Grafik ist. Ergebnis: Für Datatype erscheint zusätzlich die Option "Microsoft Grafik-Objekt", die unter der Hilfe nicht enthalten ist..
      .Tables(1).Cell(1, 1).Range.PasteSpecial Link:=False, DataType:=23, _
Placement:=wdInLine, DisplayAsIcon:=False  '23 =Microsoftoffice-Grafikobjekt
'nachfolgende Zeile erforderliche bei Formen und gruppierten Objekten
doc.Sections(1).Headers(wdHeaderFooterPrimary).Shapes(1).ConvertToInlineShape

Handelt es sich bei den in Excel kopierten Shapes um eine Form oder eine Gruppierung von Formen, dann muss in Word noch zusätzlich das Objekt konvertiert werden, damit die Positionierung in der 1. Tabellenzelle erfolgt.
Ob dies in irgendeiner Form bei deinem Problem weiterhilft?
Nachfolgend dein Makro mal so angepasst, dass der in Word mit dem Makro-Rekorder aufgezeichnete Code eingebaut ist. Ist vom Programmieren her eigentlich schlechter Code, aber du kannst ihn ja mal probieren. Das Makro öffnet dann das Fenster für die Kopfzeile, fügt die Grafik ein und schließt das Fenster wieder.
Gruß
Franz
Option Explicit
Dim WordApp As Word.Application
'___________________________________________
Sub PicToWord_mit_Word_Rekorder()
Dim doc As Word.Document
'Dim iIndex As Integer                              'überflüssig
Set WordApp = CreateObject("Word.Application")
With WordApp
.Visible = True
Set doc = .Documents.Add
'        Set doc = .ActiveDocument                  'überflüssig
End With
'    iIndex = WordApp.Documents.Count               'überflüssig
'    Set doc = WordApp.Documents(iIndex)            'überflüssig
ThisWorkbook.Worksheets("Tabelle1").Shapes("logogruen").Copy
With doc.Sections(1).Headers(wdHeaderFooterPrimary).Range
.Tables.Add Range:=doc.Sections(1).Headers(wdHeaderFooterPrimary).Range, _
NumRows:=2, NumColumns:=2, DefaultTableBehavior:=wdWord9TableBehavior ', _
AutoFitBehavior:=wdAutoFitContent
.Tables(1).Cell(Row:=1, Column:=1).Merge _
MergeTo:=.Tables(1).Cell(Row:=2, Column:=1)
.Tables(1).Columns(1).Width = WordApp.CentimetersToPoints(9.5)
.Tables(1).Columns(2).Width = WordApp.CentimetersToPoints(7.5)
.Tables(1).Cell(1, 2).Range.Text = "Titel 1"
.Tables(1).Cell(2, 2).Range.Text = "Untertitel"
.Tables(1).Borders.InsideLineStyle = wdLineStyleNone
.Tables(1).Borders.OutsideLineStyle = wdLineStyleNone
End With
With WordApp
If .ActiveWindow.View.SplitSpecial  wdPaneNone Then
.ActiveWindow.Panes(2).Close
End If
If .ActiveWindow.ActivePane.View.Type = wdNormalView Or .ActiveWindow. _
ActivePane.View.Type = wdOutlineView Then
.ActiveWindow.ActivePane.View.Type = wdPrintView
End If
.ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader
.Selection.PasteSpecial Link:=False, DataType:=23, Placement:=wdInLine, _
DisplayAsIcon:=False
'nachfolgende Zeile ist nur erforderliche bei Formen und gruppierten Objekten
'damit korrekt positioniert wird
doc.Sections(1).Headers(wdHeaderFooterPrimary).Shapes(1).ConvertToInlineShape
.ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument
End With
Set WordApp = Nothing
Set doc = Nothing
End Sub

Anzeige
AW: Word 2013 Absturz mit PasteSpecial aus Excel
03.03.2014 13:30:59
Tobias
Besten Dank, Franz, für deine intensiven Bemühungen. Die Lösung liegt in der Tat im zusätzlichen Parameter des Datentyps, im folgenden Fall wdPasteBitmap. Damit hat es geklappt.
Nochmals herzlichen Dank für deine Hilfe.
Liebe Grüsse
Tobias

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige