Transfert de données de arrays Word vers table Excel

J'ai écrit / compilé le code à l'aide de plusieurs sources et de mes propres connaissances, mais ça me donne toujours des erreurs. Je suis nouveau sur Word VBA qui a du mal à le débarrasser. Les tables sur Word contiennent des en-têtes et le model Excel que j'utilise a une layout différente des tables de mots, donc j'ai besoin de sortinger les valeurs en fonction des en-têtes et les insert dans la colonne appropriée du model Excel. Le model à la fin devrait être enregistré en tant que classur différent, et les valeurs dans le model doivent être nettoyées.

L'erreur que je reçois est: je reçois des erreurs de compilation sur les parties "oCell.Value" si j'ai configuré oCell comme plage, cependant, lorsque j'ai configuré oCell comme object, j'obtiens l'erreur 5941 sur "Set rText = oTable.Cell (i, n) .Gamme". Je ne peux pas comprendre comment. En outre, si vous me dites que la mise en œuvre de ce code dans Excel VBA serait plus facile, je suis heureux de faire la même procédure sur Excel.

Edit: J'ai ajouté "Application.Templates.LoadBuildingBlocks" mais il donne toujours la même erreur.

Sub Word2ExcelRTM() Dim oDoc As Word.Document, oXlm As Excel.Workbook Dim oTable As Word.Table Dim oRng As Word.Range Dim sFname As Ssortingng Dim rText As Word.Range Dim rHeader As Word.Range Dim oWrks As Excel.Worksheet Dim oCell As Excel.Range Application.Templates.LoadBuildingBlocks 'Change the path in the line below to reflect the name and path of the table document sFname = "C:\Users\KarakaMe\Desktop\transfer requirements into RTM excel\transfer requirements into RTM excel\RTM Template.xlsx" Set oDoc = ActiveDocument Set oXlm = Workbooks.Open(FileName:=sFname) Set oWrks = oXlm.Worksheets("RTM_FD") 'Searches each table in Word Doc For Each oTable In oDoc.Tables If oTable.Rows.Count > 1 And oTable.Columns.Count > 1 Then For i = 2 To oTable.Rows.Count - 1 For n = 1 To oTable.Columns.Count - 1 Set oRng = oDoc.Range Set rText = oTable.Cell(i, n).Range rText.End = rText.End - 1 Set rHeader = oTable.Cell(1, n).Range rHeader = rHeader.End - 1 If rHeader = "Position" Then Set oWrks.Cells(oWrks.Rows.Count, 1) = rText ElseIf rHeader = "Anforderung Lastenheft" Then Set oWrks.Cells(oWrks.Rows.Count, 2) = rText ElseIf rHeader = "Kommentar zum Lastenheft" Then Set oWrks.Cells(oWrks.Rows.Count, 3) = rText ElseIf rHeader = "Q TA P tbd*" Then If rText = "P" Then Set oCell = oWrks.Cells(oWrks.Rows.Count, 9) oCell.Value = "X" oCell.Range.HighlightColorIndex = wdDarkYellow ElseIf rText = "Q" Then Set oCell = oWrks.Cells(oWrks.Rows.Count, 7) oCell.Value = "X" oCell.Range.HighlightColorIndex = wdDarkYellow ElseIf rText = "TA" Then Set oCell = oWrks.Cells(oWrks.Rows.Count, 8) oCell.Value = "X" oCell.Range.HighlightColorIndex = wdDarkYellow Else End If Else End If Next n Next i End If Next oTable oXlm.SaveAs (InputBox("Please enter the name of the new file")) MsgBox "Your file is saved" oXlm.Close (False) End Sub 

Que vous obtenez l'erreur de manière incohérente ne vous aide pas, bien sûr, mais il y a un certain nombre de choses fausses à propos de l'intégration des templates d'object Excel et Word. Je peux voir pourquoi quelqu'un essayerait de l'aborder comme vous le faites. VBA essaie d'être très pardonnable et devine ce que les gens veulent dire, mais cela ne marche pas toujours, ce qui peut être la raison pour laquelle le code échoue de manière intermittente plutôt que de manière cohérente.

  1. Un problème de base est que vous devez utiliser la propriété Text d'un Word.Range lorsque vous voulez le contenu du text. VBA le fera souvent pour vous, au less si tout est dans Word, mais vous ne devez pas le prendre pour acquis. Par exemple: If rHeader.Text = "Position" Then

  2. Vous essayez: Set oWrks.Cells(oWrks.Rows.Count, 1) = rText

    Utilisez le mot-key Set pour atsortingbuer un object à une variable d'object. Il serait possible pour cela de faire ceci: Set oCell = oWrks.Cells(oWrks.Rows.Count, 1).Range . Regarde la différence? oCell est une variable d'object. Faire cela vous permet de travailler avec oCell au lieu de toujours taper à l' oWrks.Cells(oWrks.Rows.Count, 1) .

  3. Comme mentionné dans les commentaires, vous ne pouvez pas atsortingbuer un object Word.Range à un object dans Excel. S'appuyant sur (2), il n'est pas possible pour vous de faire ceci: Set oCell = rText . Bien que les deux soient des objects Range, l'un est Excel et l'autre Word: ils ne sont pas la même chose, même si le nom est identique.

  4. Pour atsortingbuer le text dans un Word.Range à une cellule / Gamme dans Excel, vous avez besoin de quelque chose de plus comme ceci: oCell.Text = rText.Text (Cela pourrait peut-être aussi être oCell.Value = rText.Text )

Je pense que si vous faites ces changements tout au long de votre exécution de code devrait être plus cohérent.