CallByName与MsgBox一起使用,但在分配值时不起作用(“ Object Required”错误)

时间:2019-02-19 19:27:59

标签: vba class variables properties

在excel中使用VBA:

我有一个函数,该函数要使用属性名称变量访问类属性。我可以使用带有CallByName的变量将MsgBox的属性值返回给我:

MsgBox CallByName(oThisInvoice, DataType, VbGet)

其中oThisInvoice是类对象,而DataType是包含要访问的属性名称的变量。该语句有效,并且是对以下内容的重写:

MsgBox oThisInvoice.InvoiceDate

但是,将值分配给相同属性时,无法使用相同方法:

CallByName(oThisInvoice, DataType, VbGet) = 5

不起作用,出现“运行时错误424:需要对象”错误。使用VbLet和VbSet也不起作用,并抛出“运行时错误446:对象不支持命名参数”。

这是对以下内容的重写:

oThisInvoice.InvoiceDate = 5

有效。

有人知道在使用变量引用属性名称时可以用来为VBA中的类属性赋值吗?

1 个答案:

答案 0 :(得分:2)

  

CallByName(oThisInvoice, DataType, VbGet) = 5

当然,这不适用于设置值。您正在调用Get过程,如使用VbGet所证明。获取不设置值,而是获取它们。

您需要做的是将CallByNameVbLet一起使用:

CallByName oThisInvoice, DataType, VbLet, 5