2016-07-05 1 views
0

Je travaille actuellement sur un projet qui a un modèle de mot intégré dans un modèle Excel.Insertion de texte dans un modèle Word incorporé, dans un signet, à partir d'Excel. erreur "erreur de type 13" erreur

Un bouton dans Excel a été créé pour ouvrir le modèle de mot incorporé, exporter les données d'Excel et les mettre en mots en utilisant des signets dans un modèle de mot. Le problème est que le rapport de mot ne peut être généré qu'une seule fois, car le texte sera inséré dans le signet d'origine plutôt que d'écraser les données précédentes. J'essaie d'exporter un champ nommé à partir d'Excel (CoverPageRCA) et de le copier dans un modèle de mot incorporé en utilisant un signet (bkmtable1_1).

je reçois:

erreur d'exécution 13 Incompatibilité de type

qui se produit à la ligne suivante:

Set bkMark = ActiveDocument.Bookmarks (bookmarkname) .Range

J'ai effectué une recherche sur Internet il y a passé presque 24 heures. Quelqu'un peut-il suggérer une solution?

Option Explicit

Dim WD As New Word.Application

Dim RCAcell1 comme gamme

Sous CreateRCAReports1()

Dim WordDoc Comme Word.Document

Dim OLEObj Comme oleObject

Dim WordApp Comme Word.Application

WD.Visible = True

Set OLEObj = ActiveWorkbook.Sheets ("CoverPageRCA"). OLEObjects (1) oleObj.Verb xlVerbPrimary

Set WordApp = oleObj.Object .Application

Avec WordApp

.Visible = True 

.Activate 

Set wordDoc = .Documents(1) 

End With 

« ---------------------------------- ---------------------

ThisWorkbook.Sheets ("CoverPageRCA"). Activer

ActiveSheet.Range ("B2"). Sélectionnez

Set RCAcell1 = ActiveSheet.Range (ActiveCell, ActiveCell.Fin (xlDown))

'aller à chaque signet et tapez les détails

CopyCell1 "bkmtable1_1", 1

Set WD = Nothing

End Sub

' --- -------------------------------------------------- Sous-CopyCell1 (nom de signet As String, RowOffset As Integer)

Dim bkMark comme gamme

« un contenu clair sur chaque signet et ajouter une nouvelle marque-page

Set bkMark = ActiveDocument.Bookmarks (bookmarkname) .Range

bkMark.Select

bkMark.Text = "dsfsf"

ActiveDocument.Bookmarks.Add bookmarkname, bkMark

« copier chaque cellule Word pertinente signet

WD.Selection.GoTo Quoi: = wdGoToBookmark, Nom: = bookmarkname

WD.Selection.TypeText RCAcell1 (RowOffset, 1) .Value

Fin sous

+0

Salut Jonathan, bienvenue à SO. Si personne ne peut vous aider, pensez à poster un plus grand échantillon de votre code, et même mieux un [MCVE] (http://stackoverflow.com/help/mcve). Bonne chance. –

+0

Merci pour le conseil, nouveau sur le forum –

Répondre

0

en regardant le code, la question est sur la déclaration de bkMark:

Dim bkMark As Range 

l'objet plage existe sur Excel et Word (diffèrent objets), et comme le code ci-dessus s'exécute sur Excel, il déclarera bkMark comme Excel Range object, et non comme Word Range object.

Mais la plage de retour sur la ligne ci-dessous est une gamme de mots, ce qui provoque l'erreur de décalage de type .:

Set bkMark = ActiveDocument.Bookmarks(bookmarkname).Range 

Pour résoudre ce problème, vous devez déclarer bkMark comme une gamme de mots ,:

Dim bkMark As Word.Range