VBA Object对象的函数参数传递

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VBA Object对象的函数参数传递相关的知识,希望对你有一定的参考价值。

参考技术A

VBA的函数参数传递方式是 Byval和Byref ,数值类型、Stirng等那些值类型的是要非常注意用哪种方式的。对于Object对象引用类型的一直都说2种方式完全没有区别。

 Object对象的Byval和Byref参数真的没有区别吗?

对于操作的这个Object对象来说,可以认为是没有区别,但是传递过程和其他数据类型的参数传递是一样的,遵守的规则并没有改变。

对于Object对象,其实我们传递的只是 他的指针 ,也就是VarPtr得到的那个数字,是指向Object所在内存的地址。

可以理解为参数其实就是一个LongPtr类型,所以你是复制一份这个LongPtr类型的数字传递,还是把这个LongPtr类型所在的内存地址传递给函数,对于Object这个对象来说,是没有区别的。它最终都要通过这个数字所代表的内存地址找到Object对象。

从打印输出可以看出,Byval传递需要复制参数,其实只是把保存对象地址的那个内存地址,也就是VarPtr得到的那个地址复制改变了,而这个地址中保存的数据仍然是ObjPtr的那个地址。

测试传递给动作脚本函数的参数的对象类型?

【中文标题】测试传递给动作脚本函数的参数的对象类型?【英文标题】:Testing the object type of a parameter passed into a actionscript function? 【发布时间】:2019-11-19 03:15:17 【问题描述】:

如何检查传递给函数的Object 是否是您所期望的?

public function writeRecord(grid:IExtendedDataGrid, record:Object):String


    ExternalInferface.call("alert","record " + record);

    if (record.contains("HotListItem")
    
        //# I have found my object

    
    else
    
        //# Wrong type of object

    


当我将对象显示到 ExternalInterface alert 调用时,它会显示以下内容...

记录 [object HotListItem]

我希望能够事先测试这种类型的对象。

【问题讨论】:

HotListItem 这个词从何而来?我的意思是alert() 是如何知道显示关于record 的特定文本的?知道这个问题的答案也会给你一个问题的答案...... 使用 is 运算符如下:if (record is HotListItem). 感谢 Organis。 HotListItem 是一个自定义类。我尝试了“record instanceof HotListItem”并且它有效,但说它已被弃用并提示我改用“is”。 【参考方案1】:

使用 is 运算符解决了我的问题。 我尝试了 instanceof 运算符,但这被标记为已弃用。

感谢Organis

if (record is HotListItem)

【讨论】:

以上是关于VBA Object对象的函数参数传递的主要内容,如果未能解决你的问题,请参考以下文章

vba中 find函数每个参数的详细解释

Excel VBA - 将参数参数传递给 Sub

将数组传递给接受参数 object[] 或 IEnumerable<T> 的函数

js函数中参数的传递

java的object类函数详解

从被调用的函数调用函数时 VBA byref 参数类型不匹配