2014-07-07 76 views
0

我正在做一个项目来生成Microsoft Word文档。我的代码如下。我得到异常为“System.InvalidCastException:无法将'System .__ ComObject'类型的COM对象转换为类类型'System.String'。表示COM组件的类型实例不能转换为不代表COM组件的类型只要底层COM组件支持QueryInterface调用接口的IID,它们就可以转换为接口。 位于F:\ reportexample \ reportexample \ Form1.vb中的reportexample.Form1.GetNewResult(Field wField,Document WordDoc):line 114"运行时错误无法将'System .__ ComObject'类型的COM对象转换为类类型'System.String'

 Private Function GetNewResult(wField As Word.Field, WordDoc As Word.Document) As String 

    Dim StopPos As Long 
    Dim Variable As String = "" 
    Dim UsedVariable As String 
    Dim VariableValue As String 
    Dim wRange As Word.Range 

    Try 
     Debug.Print(wField.Code) 

     ' These three lines strip down the field code to find 
     ' out it's name 
     StopPos = InStrRev(wField.Code, "\*") 
     Variable = Microsoft.VisualBasic.Left(wField.Code, StopPos - 3) 
     Variable = Microsoft.VisualBasic.Right(Variable, Len(Variable) - 14) 
    Catch ex As Exception 
     TextBox1.Text = ex.ToString 

    End Try 


    ' Check this field hasn't already appeared in this 
    ' document. 
    If CheckUsedVariable(Variable) Then 

     VariableValue = GetVariableValue(Variable) 

    Else 

     Select Case UCase(Variable) 

      ' I don't simply want to insert a string - 
      ' I wish to insert a table at the Product Field. 
      Case "PRODUCT" 

       ' Get the range (location) of the product field 
       wRange = wField.Code 
       ' Delete the field, as any text will be inserted into the 
       ' {} of the existing field. 
       wField.Delete() 

       ' Enter our table information including headers. 
       ' Ideally, I would get this data from an ADO recordset 
       ' using GetString(). 
       With wRange 

        .Text = "PRODUCT" & vbTab & "CTSBATCHNO" & vbTab & "SUPP REF" & vbTab & "PACKNO" & vbTab & "STORAGE" & vbTab & "QTY UNITS" & vbCrLf & _ 
           "989797897" & vbTab & "hjhkhk" & vbTab & "kjhkjhkh" & vbTab & "kjhkjh" & vbTab & "Frozen" & vbTab & "3" & vbCrLf & _ 
           "989797897" & vbTab & "hjhkhk" & vbTab & "kjhkjhkh" & vbTab & "kjhkjh" & vbTab & "Frozen" & vbTab & "3" & vbCrLf & _ 
           "989797897" & vbTab & "hjhkhk" & vbTab & "kjhkjhkh" & vbTab & "kjhkjh" & vbTab & "Frozen" & vbTab & "3" & vbCrLf & _ 
           "989797897" & vbTab & "hjhkhk" & vbTab & "kjhkjhkh" & vbTab & "kjhkjh" & vbTab & "Frozen" & vbTab & "3" & vbCrLf & _ 
           "989797897" & vbTab & "hjhkhk" & vbTab & "kjhkjhkh" & vbTab & "kjhkjh" & vbTab & "Frozen" & vbTab & "3" & vbCrLf & _ 
           "989797897" & vbTab & "hjhkhk" & vbTab & "kjhkjhkh" & vbTab & "kjhkjh" & vbTab & "Frozen" & vbTab & "3" & vbCrLf & _ 
           "989797897" & vbTab & "hjhkhk" & vbTab & "kjhkjhkh" & vbTab & "kjhkjh" & vbTab & "Frozen" & vbTab & "3" & vbCrLf & _ 
           "989797897" & vbTab & "hjhkhk" & vbTab & "kjhkjhkh" & vbTab & "kjhkjh" & vbTab & "Frozen" & vbTab & "3" & vbCrLf & _ 
           "989797897" & vbTab & "hjhkhk" & vbTab & "kjhkjhkh" & vbTab & "kjhkjh" & vbTab & "Frozen" & vbTab & "3" & vbCrLf & _ 
           "989797897" & vbTab & "hjhkhk" & vbTab & "kjhkjhkh" & vbTab & "kjhkjh" & vbTab & "Frozen" & vbTab & "3" & vbCrLf & _ 
           "989797897" & vbTab & "hjhkhk" & vbTab & "kjhkjhkh" & vbTab & "kjhkjh" & vbTab & "Frozen" & vbTab & "3" & vbCrLf & _ 
           "989797897" & vbTab & "hjhkhk" & vbTab & "kjhkjhkh" & vbTab & "kjhkjh" & vbTab & "Frozen" & vbTab & "3" & vbCrLf & _ 
           "989797897" & vbTab & "hjhkhk" & vbTab & "kjhkjhkh" & vbTab & "kjhkjh" & vbTab & "Frozen" & vbTab & "3" & vbCrLf & _ 
           "989797897" & vbTab & "hjhkhk" & vbTab & "kjhkjhkh" & vbTab & "kjhkjh" & vbTab & "Frozen" & vbTab & "3" & vbCrLf & _ 
           "989797897" & vbTab & "hjhkhk" & vbTab & "kjhkjhkh" & vbTab & "kjhkjh" & vbTab & "Frozen" & vbTab & "3" & vbCrLf & _ 
           "989797897" & vbTab & "hjhkhk" & vbTab & "kjhkjhkh" & vbTab & "kjhkjh" & vbTab & "Frozen" & vbTab & "3" & vbCrLf & _ 
           "989797897" & vbTab & "hjhkhk" & vbTab & "kjhkjhkh" & vbTab & "kjhkjh" & vbTab & "Frozen" & vbTab & "3" & vbCrLf & _ 
           "989797897" & vbTab & "hjhkhk" & vbTab & "kjhkjhkh" & vbTab & "kjhkjh" & vbTab & "Frozen" & vbTab & "3" & vbCrLf & _ 
           "989797897" & vbTab & "hjhkhk" & vbTab & "kjhkjhkh" & vbTab & "kjhkjh" & vbTab & "Frozen" & vbTab & "3" & vbCrLf & _ 
           "989797897" & vbTab & "hjhkhk" & vbTab & "kjhkjhkh" & vbTab & "kjhkjh" & vbTab & "Frozen" & vbTab & "3" & vbCrLf & _ 
           "989797897" & vbTab & "hjhkhk" & vbTab & "kjhkjhkh" & vbTab & "kjhkjh" & vbTab & "Frozen" & vbTab & "3" & vbCrLf & _ 
           "989797897" & vbTab & "hjhkhk" & vbTab & "kjhkjhkh" & vbTab & "kjhkjh" & vbTab & "Frozen" & vbTab & "3" & vbCrLf & _ 
           "989797897" & vbTab & "hjhkhk" & vbTab & "kjhkjhkh" & vbTab & "kjhkjh" & vbTab & "Frozen" & vbTab & "3" & vbCrLf & _ 
           "989797897" & vbTab & "hjhkhk" & vbTab & "kjhkjhkh" & vbTab & "kjhkjh" & vbTab & "Frozen" & vbTab & "3" 

        .FormattedText.Font.Name = "Arial" 
        .FormattedText.Font.Size = "8" 

        ' Once the data is there, we can convert it to a table 
        ' structure and format it to look pretty! 
        .ConvertToTable(vbTab, , , , WdTableFormat.wdTableFormatColorful2) 

       End With 


       ' Send back blank string as field does not exist anymore 
       VariableValue = "" 

      Case Else 

       ' Get the value of the field from the user 
       VariableValue = InputBox("Enter value for: " & Variable, "Value not recognised for Despatch Note!") 
       AddNewVariable(Variable, VariableValue) 

     End Select 

    End If 

    GetNewResult = VariableValue 

End Function 

回答

0
Word.Field.Code 

是不能被转换为字符串一个Range对象。

尝试wField.Code.Text

相关问题