2017-08-11 107 views
1

在Access中使用VBA时,我试图将Excel工作簿传递给另一个函数。将Access工作簿传递到Access VBA时发生错误424

我创建使用以下(剪断)

Dim Wbk    As Object 
Dim sht    As Object 
Dim xl    As Object 

Set xl = CreateObject("Excel.Application") 
Set Wbk = xl.Workbooks.Open(OutputFileName) 
Set sht = xl.Worksheets("qryTemp") 

使用上面我能够操纵Excel实例的工作簿。

不过,我想和实例传递到使用

OutputLog (xl) 

然后

Function OutputLog(xl As Variant) As String 
    xl.Application.Visible = True 
End Function 

另一个函数...我得到所需的错误424对象

+0

不应该在参数中将x1定义为类型Object吗? –

+0

@RobAnthony一个'Variant'可以是任何东西,包括一个对象的引用,所以这是有效的。将其定义为“Object”只会减少少许内存,因为“Variant”还需要存储其类型。 –

+0

但是,然后您将它用作对象而不将其转换为对象,这就是为什么我怀疑您收到错误。 –

回答

3

的问题是在这条线:

OutputLog (xl)

此处使用括号将ObjectApplication)转换为简单类型(String“Excel应用程序”)。

正确的版本是:

OutputLog xl

Call OutputLog(xl)

In this answer你可以找到关于调用VBA程序的详细信息。

+0

再次感谢 - 完美的作品 – user1936588