将Word表格数据传输到Excel表格

我用几个来源和我自己的知识编写/编译了代码,但它一直给我错误。 我是新的Word VBA所以努力debugging它。 Word上的表包含标题和我使用的Excel模板有一个不同的布局比单词表,因此我需要根据标题sorting值,并将其插入到Excel模板中适当的列。 最后的模板应该保存为不同的工作簿,模板中的值应该被清除。

错误我得到的是:我得到“oCell.Value”部分编译错误,如果我设置oCell作为范围,但是,当我设置oCell作为对象我得到错误5941“设置rText = oTable.Cell(我,n) 。范围”。 我无法弄清楚如何。 另外,如果你告诉我在Excel VBA中实现这样的代码会更容易,我也很乐意在Excel上做同样的过程。

编辑:我已经添加了“Application.Templates.LoadBuildingBlocks”,但它仍然给出了相同的错误。

Sub Word2ExcelRTM() Dim oDoc As Word.Document, oXlm As Excel.Workbook Dim oTable As Word.Table Dim oRng As Word.Range Dim sFname As String 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 

当然,你得到的错误并不会有帮助,但是你如何去集成Excel和Word对象模型还有很多错误。 我明白为什么有人会试图按照你的方式来对待它。 VBA试图很宽容,并猜测人们的意思,但它并不总是正确的,这可能是代码断断续续地而不是一致的原因。

  1. 一个基本的问题是,当你想要文本内容时,你应该使用Word.Range的Text属性。 VBA经常会为你做,至less在所有事情都在Word中,但是你不应该把它当作理所当然的。 例如: If rHeader.Text = "Position" Then

  2. 您可以尝试: Set oWrks.Cells(oWrks.Rows.Count, 1) = rText

    使用Set关键字将对象分配给对象variables。 你可以这样做: Set oCell = oWrks.Cells(oWrks.Rows.Count, 1).Range 。 看到不同? oCell是一个对象variables。 这样做可以让你使用oCell而不是总是inputoWrks.Cells(oWrks.Rows.Count, 1)

  3. 如注释中所述,您不能将Word.Range对象分配给Excel中的对象。 build立在(2)上,这是不可能的: Set oCell = rText 。 虽然两者都是Range对象,但一个是Excel,另一个是Word – 即使名称看起来相同,它们也不是同一个东西。

  4. 为了将Word.Range中的文本分配给Excel中的单元格/范围,您需要更类似于以下内容: oCell.Text = rText.Text (也可能是oCell.Value = rText.Text

我认为如果在整个代码执行过程中进行这些更改应该更加一致。