Using Word VBA to automate Excel, I get Run-time error '13': Type mismatch when using the .Find function

蓝咒 提交于 2021-01-29 02:16:11

问题


I'm trying to get data from an excel sheet to a word document. I try using the 'Find' function however I keep getting the same error "Type mismatch" on this line:

Set FoundRange = .Cells.Find(260707)

Here is the subroutine I am running.

    Sub GetID()
Dim oXL As Object
Dim oWB As Object
Dim oSheet As Object
Dim WorkbookToWorkOn As String
Dim FoundRange As Range
Dim dummyvar As String

'Start a new instance of Excel
Set oXL = CreateObject("Excel.Application")
'Line to make Excel Visible or not
oXL.Visible = False
'Open the workbook
'Set the file path to access the 'Certified Personnel' table
WorkbookToWorkOn = "\\DataSource\CertifiedPersonnel.xlsx"
Set oWB = oXL.Workbooks.Open(FileName:=WorkbookToWorkOn, ReadOnly:=True, IgnoreReadOnlyRecommended:=True)
Set oSheet = oXL.ActiveWorkbook.Sheets("tblCertifiedPersonnel")
'End of Excel Automation. Everything from this point on can reference Excel.

With oSheet
    dummyvar = .Cells(1, 2).Text
    .Cells(1, 2).Select
    'Set the range of the cell containing the ID number
     'If the ID was found
    Set FoundRange = .Cells.Find(260707)

    If Not FoundRange Is Nothing Then
        'Set the NTlogin equal to the value of column 1, and row corresponding to the FoundRange row
        NTlogin = .Cells(FoundRange.Rows, 1).Text
        Role = .Cells(FoundRange.Rows, 4).Text
    End If
End With

'End Excel reference
oXL.ActiveWorkbook.Close SaveChanges:=False
oXL.Application.Quit
Set oXL = Nothing
Set oWB = Nothing
Set oSheet = Nothing


End Sub

I know it is accessing the correct workbook, because the dummy variable (dummyvar) is returning the value I expect. I have tried several things related to the 'Find' function, however I have not been able to get it to work. Any ideas? Much appreciated.


回答1:


You are using late binding and have FoundRange declared as a Range. Since this is in a Word document, you're implicitly declaring it as a Word.Range here:

Dim FoundRange As Range

.Find is returning an Excel.Range. Change it to:

Dim FoundRange As Object



回答2:


With the assumption that the ID values are stored as text in the worksheet, either with a cell type of Text or with an apostrophe/single-quote in front of the number, you may need to format the ID as string. With the further assumption that eventually you may want to pass the ID via parameter to the procedure, give this a try:

Set FoundRange = .Cells.Find(CStr(260707))

That will also allow you to replace the constant number with a variable if desired.



来源:https://stackoverflow.com/questions/38747963/using-word-vba-to-automate-excel-i-get-run-time-error-13-type-mismatch-when

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!