2017-07-24 1 views
0

Je travaille sur le rapport de roulement. Je dois copier et trouver les données de relèvement pertinentes du fichier Excel et les coller dans la table des mots. J'ai compris les codes àcomment mettre à jour la table dans word?

  1. Pour aller à l'emplacement relavant dans le fichier texte et collez des données dans le document de mot désiré.

    Sub CreateNewWordDoc() 
        Dim wrdApp As Word.Application 
        Dim wrdDoc As Word.Document 
        Dim i As Integer 
        Dim arr(12) 
        'Bearing numbers I need to search 
        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 
        'location of my word document 
    
        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 loop to reach all bearing location 
        For i = 0 To 12 
         With wrdApp.Selection 
          With .Find 
           .ClearFormatting 
           .MatchWildcards = False 
           .MatchWholeWord = False 
           .Text = arr(i) 
           .Execute 
          End With 
          ' Here is where I need to paste my copied data. 
    
          .InsertAfter "I can just paste this shit" 
          .HomeKey unit:=wdStory 
         End With 
        Next 
    End Sub 
    
  2. Aller à l'emplacement dans le fichier Excel, trouver les données pertinentes et copier les données relatives à ce sujet et est le code ici pour cela.

    Sub CopyToWord() 
        'Copy the range Which you want to paste in a New Word Document 
        Cells.Find(What:=arr(0), After:=ActiveCell, LookIn:=xlFormulas _ 
         , LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ 
         MatchCase:=False, SearchFormat:=False).Activate 
        ActiveCell.Offset(2, 0).Range("A1:g8").Select 
        Selection.Copy 
    End Sub 
    

J'ai écrit ces deux codes à fonctionner à partir d'Excel VBA. Mais maintenant, je dois combiner les deux et coller les données copiées à partir du 2ème code à la table qui se trouve dans le 1er code (L'emplacement de l'endroit n'est pas juste après l'endroit où je trouve le mot. le code et peut être mieux compris par les photos ci-dessous.).

Ceci est le code pour moi de sélectionner les données dans le mot où j'ai besoin de remplacer. Je dois écrire même en paroles et le remplacer par les données copiées

Sub pasting() 
    Dim sSample, rResult As String 
    sSample = "(450R), 38,7 % " 

    Set rRange = ActiveDocument.Content 
    Selection.Find.Execute FindText:=sSample, _ 
     Forward:=True, Wrap:=wdFindStop 
    Selection.MoveDown unit:=wdLine, Count:=1 
    Selection.EndKey unit:=wdLine 
    Selection.MoveRight unit:=wdCharacter, Count:=1 
    Selection.EndKey unit:=wdLine 
    Selection.MoveDown unit:=wdLine, Count:=1 

    Selection.MoveDown unit:=wdLine, Count:=5, Extend:=wdExtend 
    Selection.MoveLeft unit:=wdCharacter, Count:=5, Extend:=wdExtend 
    Selection.PasteAndFormat (wdPasteDefault) 
End Sub 

Malheureusement, Bien que j'ai copié les données ce que je veux, je ne suis pas en mesure d'arriver à la solution. Je ne sais pas comment coller des données dans la table existante.

Cette image explique mieux. J'ai besoin de rechercher des données de roulement 248_R dans Excel et coller cela dans le mot. Ce est le fichier Word

enter image description here

c'est le fichier Excel

enter image description here

+0

Pourquoi ne pas vous (au lieu de ce script VBA étendu) lier/intégrer vos données Excel comme expliqué dans [Insérer une feuille de calcul Excel dans un document Word] (http://www.excel-easy.com /examples/embed.html) ou [Liaison de données Excel dans des documents Word] (http://www.k2e.com/tech-update/tips/158-linking-excel-data-into-word-documents)? Ce serait beaucoup plus facile que d'utiliser un script et mettrait à jour les données dans Word automatiquement. Ne réinventez pas la roue! –

+0

La suggestion de Peh semble plutôt attrayante. Toutefois, si cela ne fonctionne pas, notez que vous ne pouvez pas coller les données d'une table Excel dans une table Word existante. Vous devez écrire le contenu de chaque cellule Excel dans chaque cellule Word existante. – Variatus

+0

Merci pour la suggestion @Peh Mais j'écris un code avec lequel, si je tire dans un autre jeu de données de palier, il doit se mettre à jour automatiquement. Je veux dire si je mets d'autres feuilles excel avec les mêmes noms de paliers mais des valeurs différentes, il doit mettre à jour automatiquement –

Répondre

0
Sub CreateNewWordDoc() 
    Dim wrdApp As Word.Application 
    Dim wrdDoc As Word.Document 



    Dim arr(12) 
    'Bearing numbers I need to search 
    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 %" 

    range2 = 6 


    Set wrdApp = CreateObject("Word.Application") 
    wrdApp.Visible = True 
    'location of my word document 

    Set wrdDoc = wrdApp.Documents.Open("E:\Siemens\FullFlexibleGearbox.docx") 
    wrdDoc.Activate 

    wrdApp.Selection.HomeKey Unit:=wdStory 
    'for loop to reach all bearing location 
    For i = 0 To 12 
      Cells.Find(What:=arr(i), After:=ActiveCell, LookIn:=xlFormulas, _ 
      LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ 
       MatchCase:=False, SearchFormat:=False).Activate 
       ActiveCell.Offset(2, 0).Range("A1:G8").Select 
       Application.CutCopyMode = False 
       Selection.Copy 

     With wrdApp.Selection 
      With .Find 
       .ClearFormatting 
       .MatchWildcards = False 
       .MatchWholeWord = False 
       .Text = arr(i) 
       .Execute 
      End With 
      .MoveRight Unit:=wdCharacter, Count:=2 
      .MoveDown Unit:=wdLine, Count:=1 
      .MoveDown Unit:=wdLine, Count:=6, Extend:=wdExtend 
      .MoveLeft Unit:=wdCharacter, Count:=6, Extend:=wdExtend 
      .Paste 
      .HomeKey Unit:=wdStory 



     End With 
    Next 
    End Sub 

Nous vous remercions de votre soutien. :)

1

Oublier copier-coller. Au lieu de cela, une fois que vous avez trouvé vos données (en 2), affectez la plage à une variable de type variant. Maintenant, vous pouvez passer en boucle en affectant chaque élément à une cellule de votre table. Je suis au travail, donc je ne peux pas voir vos images, mais rappelez-vous que les cellules d'un tableau Word sont référencées comme cellule (ligne, colonne) - de sorte que vous pouvez écrire

with Wrdapp.documents(1).tables(1) 
     For x = 0 to ubound(v,1) 
      for y = 0 to ubound(v,2) 
      .cell(x + 1,y + 1).range.text = v(x,y) 
      next y 
     next x 

end with 

pour copier un tableau V dans le premier tableau dans un document (le +1 dans la cellule est parce que les tableaux comptent de zéro, mais les tableaux Word courir d'un si v (0,0) doit aller dans la cellule (1,1)

Espérons que vous devriez obtenir commencé