Click here to Skip to main content
15,885,754 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
I am doing a project to generate a Microsoft word document. My code as follows. Im getting exception as "System.InvalidCastException: Unable to cast COM object of type 'System.__ComObject' to class type 'System.String'. Instances of types that represent COM components cannot be cast to types that do not represent COM components; however they can be cast to interfaces as long as the underlying COM component supports QueryInterface calls for the IID of the interface.
at reportexample.Form1.GetNewResult(Field wField, Document WordDoc) in F:\reportexample\reportexample\Form1.vb:line 114"

VB
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
Posted
Comments
Bernhard Hiller 7-Jul-14 8:44am    
And which one of these many lines is the line which throws the exception?

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900