2017-03-16 1 views
0

[Une autre question récente avec un titre similaire qui n'a pas encore reçu de réponse satisfaisante, et m'a donné aucune idée :-(]Suppression filigrane dans Word à partir d'Excel VBA (Redux) Différence entre Word et Excel VBA

C'est ma première tentative d'intégrer un peu d'automatisation de Word avec Excel VBA, j'ai donc commencé avec un enregistrement de macro dans Word VBA pour avoir un indice.Malheureusement, quand j'essaie de traduire cela en Excel, même en tenant compte de l'utilisation d'Excel local wrdDoc Pour qualifier les références, le code qui fonctionne dans Word VBA ne fonctionne pas à partir de Excel VBA.Full frustrant

Voici le code enregistré s nippet à partir de Word que j'ai commencé avec: [Nom de la forme modifié manuellement après l'enregistrement pour correspondre au nom attribué à l'image du filigrane]

ActiveDocument.Sections(1).Range.Select 
ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader 
Selection.HeaderFooter.Shapes("US-CA watermark").Select 
Selection.Delete 

Voici l'extrait de code à partir d'Excel, je tirais de cette: [sWatermark chaîne prédéfini pour correspondre au nom de l'image]

With wrdDoc 
    .Sections(1).Range.Select 
    .ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader 
    .Selection.HeaderFooter.Shapes(sWatermark).Select 
    .Selection.Delete 
End With 

Résultat: VBA étrangle chaque fois que je tente de sélectionner le filigrane (la ligne 3 dans le bloc avec).

J'ai essayé la ligne de problème avec et sans. préfixe [i.e. comme wrdDoc.Selection et juste Selection (comme dans la macro Word originale)].

J'ai essayé d'accéder au filigrane en tant que .HeaderFooter.shapes (1) après avoir vérifié qu'il n'y avait qu'un seul élément dans la plage. Encore une fois, cela semble fonctionner de manière plutôt satisfaisante dans Word VBA, mais jamais dans Excel VBA.

POURQUOI?!?!?!

+1

'' .Selection' devrait être .Application.Selection' – Slai

Répondre

0

Évitez d'utiliser la sélection lorsque cela est possible, car elle peut être modifiée pendant l'exécution de la macro. Par exemple:

wrdDoc.StoryRanges(wdPrimaryHeaderStory).ShapeRange(1).Delete 
+0

Je sais que d'essayer d'éviter la sélection en général, bien que je l'ai trouvé dans le passé que VBA peut être très impitoyables de cela. Par exemple, même ici, j'ai essayé de me passer du .Sections (1) .Range.select et de fusionner les deux premières lignes, mais échoué misérablement à cela aussi. En outre, votre admonition ne semble pas répondre à la question de toute façon, pourquoi le code VBA fonctionne dans Word, mais l'équivalent ne fonctionne pas dans Excel. – Alister

+0

@Alister 'Selection' fait référence à' Application.Selection', mais dans le second code 'wrdDoc.Selection' et il n'y a pas de propriété' Document.Selection' – Slai

+0

si vous pouvez ajouter une référence à Microsoft Word et 'Dim wrdDoc As Word .Document', vous devriez obtenir une erreur de compilation sur la ou les lignes 'wrdDoc.Selection' – Slai