Modifier intégré classeur Excel dans un document Word via VBA
J'ai un document Word avec deux incorporé fichiers Excel (ajoutés à l'aide de l'Insertion -> Objet> Créer à Partir d'un Fichier) qui je souhaite modifier à l'aide de Word VBA. J'en suis arrivé au point où je suis en mesure d'ouvrir les fichiers intégrés pour l'édition (voir code ci-dessous), mais je suis incapable de obtenir une poignée sur le classeur Excel à l'aide que je peux faire les modifications et enregistrez le fichier incorporé. Quelqu'un aurait-il une solution pour cela? Merci à l'avance.
Sub TestMacro()
Dim lNumShapes As Long
Dim lShapeCnt As Long
Dim xlApp As Object
Dim wrdActDoc As Document
Set wrdActDoc = ActiveDocument
For lShapeCnt = 1 To 1 'wrdActDoc.InlineShapes.Count
If wrdActDoc.InlineShapes(lShapeCnt).Type = wdInlineShapeEmbeddedOLEObject Then
If wrdActDoc.InlineShapes(lShapeCnt).OLEFormat.ProgID = "Excel.Sheet.8" Then
'This opens the embedded Excel workbook using Excel
wrdActDoc.InlineShapes(lShapeCnt).OLEFormat.Edit
End If
End If
Next lShapeCnt
End Sub
OriginalL'auteur Anindya | 2009-01-27
Vous devez vous connecter pour publier un commentaire.
Aïe, ne pas faire ce qu'on vous suggère dans votre commentaire. Vous finirez probablement avec plusieurs instances d'Excel (vérifier le Gestionnaire des Tâches et de voir combien il y a après l'exécution de votre code).
Tout d'abord, ajouter une référence à la bibliothèque d'objet Excel (Projet->Références & choix de la Bibliothèque d'Objets Microsoft Excel). Maintenant, vous pouvez déclarer vos objets, comme de bonne foi Excel types et utiliser la liaison anticipée plutôt que de déclarer comme "Objet" et d'utiliser la liaison tardive. Ce n'est pas strictement nécessaire, mais, en dehors de toute autre chose, il signifie que vous obtenez Intellisense lors de la modification de votre code.
Vous faites la bonne chose à droite jusqu'à ce que vous faites .OleFormat.Edit. (Je serais personnellement utiliser .OleFormat.Activer mais depuis je n'ai jamais essayé de l'utiliser .Edit je ne pouvais pas dire que cela fait une différence).
L'avoir fait .Activer (ou, sans doute, .Modifier), vous pouvez ensuite accéder à la OleFormat.Membre de l'objet. Depuis l'Objet incorporé est un graphique Excel, "l'Objet" sera le Classeur Excel, de sorte que vous pouvez le faire:
Notez que vous n'avez PAS besoin de fermer Excel, et en effet vous ne pouvez pas le Mot "propriétaire" de l'instance utilisée pour edit-in-place, et de décider du moment de la fermer. C'est effectivement un problème, car il n'y a pas de façon évidente de la force de l'objet incorporé être désactivée, de sorte que le graphique de rester ouvert après que vous exécutez le code ci-dessus.
Il y a un hack-y de façon à obtenir le graphique de la fermer, si. Si vous ajoutez dire Mot pour activer comme quelque chose d'autre, il va de-d'abord l'activer. Donc, si vous dites qu'il l'activer comme quelque chose de non-sensiques, vous pourrez obtenir le bon résultat parce qu'il va de l'activer et ensuite ne pas le ré-activer. Donc, ajoutez la ligne suivante:
Remarque que cela va générer une erreur, de sorte que vous aurez besoin de désactiver temporairement la gestion des erreurs à l'aide de on Error Resume Next. Pour cette raison, j'ai l'habitude de créer un Désactiver méthode, pour éviter de perturber la gestion d'erreur dans ma méthode principale. Comme dans:
Espère que cette aide.
Gary
Jamais l'esprit, j'ai dû spécifier le OLEFormat comme un MOT.OLEFormat, je suppose que c'était par défaut EXCEL.OLEFormat
OriginalL'auteur Gary McGill
Avoir un autre hackey façon d'obtenir le graphique de proximité: il suffit d'utiliser la fonction rechercher pour trouver quelque chose dans le document qui n'est pas là.
Par exemple
Cela va vous prendre du fichier incorporé, à proximité de l'instance et à l'arrière pour le document principal, vous pouvez simplement le code à partir de là.
Espère que cette aide, ce problème a été me rend fou.
OriginalL'auteur Perry
J'ai une solution à mon problème. Tous les autres commentaires seront appréciés
OriginalL'auteur Anindya