我是VBA的新手,我正试图访问我用2 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在哪里或如何解决它。我做错了什么?
答案 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关键字仅用于对象,而不是常规变量。