2017-07-21 1 views
1

J'ai construit un code pour transférer des données d'Excel à Word. Pour essayer cela, j'ai construit un code avec une liste de tableaux. Pour vérifier chaque tableau dans le mot et placez une chaîne à côté de la liste. Mais il ne prend pas le tableau dans la boucle.Pourquoi la boucle for ne continue-t-elle pas pour le premier staement?

Sub CreateNewWordDoc() 

    Dim wrdApp As Word.Application 
    Dim wrdDoc As Word.Document 
    Dim i As Integer 
    Dim arr(12) 

    arr(0) = "(249_L), 38,7 %" 
    arr(1) = "(248_R), 38,7 %" 
    arr(2) = "(249_M), 38,7 " 
    arr(3) = "(3560), 38,7 " 
    arr(4) = "(3550), 38,7 %" 
    arr(5) = "(349_), 38,7 %" 
    arr(6) = "(348_), 38,7 %" 
    arr(7) = "(451), 38,7 %" 
    arr(8) = "(450L), 38,7 " 
    arr(9) = "(450R), 38,7 " 
    arr(10) = "(151), 38,7 %" 
    arr(11) = "(150L), 38,7 %" 
    arr(12) = "(150R), 38,7 %" 

    Set wrdApp = CreateObject("Word.Application") 

    wrdApp.Visible = True 
    Set wrdDoc = wrdApp.Documents.Open("E:\ShareDrive_Ruehl\full-flexible-MBS-models_report\example-report\FullFlexibleGearbox - Copy (2).docx") 


    For i = 0 To 12 


    wrdDoc.Application.Selection.Find.Text = arr(i) 
    wrdDoc.Application.Selection.Find.Execute 
    wrdDoc.Application.Selection.InsertBefore arr(i) & "test" 

    Next 
    End Sub 

Je reçois la sortie comme le montre la figure. Mon intention était de trouver "arr(i)" et placez le texte arr(i) avant lui. Mais il est juste de trouver array (0) et de coller le texte arr(i).

enter image description here

+0

Y a-t-il une raison spécifique pour laquelle vous créez une nouvelle instance de mot au lieu d'utiliser celle en cours? C'est le mot vba après tout. De plus, si vous utilisez Find avec 'Selection', utilisez toujours' Selection.Collapse wdCollapseEnd' avant votre 'Next'. – LocEngineer

+0

Je l'utilise dans l'excel vba donc je l'utilise pour l'ouvrir. –

Répondre

1

Voici votre code légèrement ajusté. Notez l'utilisation de With blocs pour un peu plus « nettoyé » look et le HomeKey pour réinitialiser la sélection avant la découverte suivante:

Dim wrdApp As Word.Application 
Dim wrdDoc As Word.Document 
Dim i As Integer 
Dim arr(12) 

arr(0) = "(249_L), 38,7 %" 
arr(1) = "(248_R), 38,7 %" 
arr(2) = "(249_M), 38,7 " 
arr(3) = "(3560), 38,7 " 
arr(4) = "(3550), 38,7 %" 
arr(5) = "(349_), 38,7 %" 
arr(6) = "(348_), 38,7 %" 
arr(7) = "(451), 38,7 %" 
arr(8) = "(450L), 38,7 " 
arr(9) = "(450R), 38,7 " 
arr(10) = "(151), 38,7 %" 
arr(11) = "(150L), 38,7 %" 
arr(12) = "(150R), 38,7 %" 
Set wrdApp = CreateObject("Word.Application") 
Set wrdDoc = wrdApp.Documents.Open("E:\ShareDrive_Ruehl\full-flexible-MBS-models_report\example-report\FullFlexibleGearbox - Copy (2).docx") 
wrdDoc.Activate 
wrdApp.Selection.HomeKey unit:=wdStory 

For i = 0 To 12 
    With wrdApp.Selection 
     With .Find 
      .ClearFormatting 
      .MatchWildcards = False 
      .MatchWholeWord = False 
      .text = arr(i) 
      .Execute 
     End With 
     .InsertBefore arr(i) & "test" 
     .HomeKey unit:=wdStory 
    End With 
Next 

Note: vos besoins peuvent très probablement être atteints sans utiliser Selection mais plus d'info serait nécessaire pour cela.

+0

Merci pour votre réponse @LocEngineer. Je reçois une erreur d'exécution 424. "Objet requis". Faites-moi savoir si vous savez quelque chose à ce sujet. –

+0

Je vois. J'ai modifié le code à utiliser à partir d'Excel. Aussi wrdApp.Documents.Open' sans l'objet wrdApp a provoqué l'erreur. Devrait le faire maintenant. – LocEngineer

+0

Grand Merci @LocEngineer –