尝试从输入文件表中获取值会引发运行时错误'13':typemismatch

时间:2013-10-24 14:56:42

标签: excel vba excel-vba

我是VBA的新手,我正试图访问我用2 GetOpenFilename选择的文件,事情是 我在

中有两个GetOpenFilename
Private Sub Workbook_Open()
MsgBox "Please select Inventory File"
inventory = Application.GetOpenFilename("Text files(*.xlsx),*.xlsx", , "Please select Inventory File")
Set inventoryWorkbook = Application.Workbooks.Open(inventory)
MsgBox "Please select Material List File"
MaterialList = Application.GetOpenFilename("Text files(*.xlsx),*.xlsx", , "Please select Material List File")
Set materialListWorkbook = Application.Workbooks.Open(MaterialList)
Call Process(inventoryWorkbook, materialListWorkbook)
End Sub

我试图调用将处理两个输入文件的Sub Process,这个“Process”在一个模块中,起初我有这个:

Call Process 

并修改为Public Sub Process()

但是它引发了运行时错误'424':对象必需

所以我把它改成了

 Call Process(inventoryWorkbook, materialListWorkbook)

和模块:

Public Sub Process(inventoryWorkbook, materialListWorkbook)
MsgBox "Enters"
Set MaterialList_Main = materialListWorkbook.Worksheets("Sheet2")
Set MainProjectCode = MaterialList_Main.Range("B2").Value
MsgBox MainProjectCode
End Sub

但它抛出运行时错误'13':类型不匹配,我不知道TypeMismatch在哪里或如何解决它。我做错了什么?

1 个答案:

答案 0 :(得分:1)

在每个模块的顶部使用Option Explicit(也是Thisworkbook Module) 这将大大减少类型不匹配的数量。

Option Explicit 

Dim MaterialList As String
Dim materialListWorkbook as Excel.Workbook

MaterialList = Application.GetOpenFilename("Text files(*.xlsx),*.xlsx", , "Please select Material List File")
Set materialListWorkbook = Application.Workbooks.Open(MaterialList)

Call Process(inventoryWorkbook)

这里有一个错误:

Public Sub Process(inventoryWorkbook As Excel.Workbook, materialListWorkbook As Excel.Workbook)
    dim MaterialList_Main as Excel.Worksheet
    dim MainProjectCode as String 

    MsgBox "Enters" 
    Set MaterialList_Main = materialListWorkbook.Worksheets("Sheet2") 
    MainProjectCode = MaterialList_Main.Range("B2").Value 'Error: no Set for value! 
    MsgBox MainProjectCode 
End Sub

Set关键字仅用于对象,而不是常规变量。