传递给函数的VBA变量被修改 您所在的位置:网站首页 vba整型变量 传递给函数的VBA变量被修改

传递给函数的VBA变量被修改

#传递给函数的VBA变量被修改| 来源: 网络整理| 查看: 265

我已将变量作为参数传递给VBA函数,但只引用了函数中的参数,而不是原始变量.似乎原始变量正在由函数修改,这意味着它共享相同的地址空间?这里发生了什么,我该如何防止它发生?

这是函数:(单位,数十,数百和数千是全局整数变量)

Function Components(qty As Integer, stringSize As Integer) If qty = stringSize * 100 Then thousands = qty \ (stringSize * 100) qty = qty - (thousands * stringSize * 100) Components qty, stringSize ElseIf qty >= stringSize * 10 Then hundreds = qty \ (stringSize * 10) qty = qty - (hundreds * stringSize * 10) Components qty, stringSize ElseIf qty >= stringSize Then tens = qty \ (stringSize) qty = qty - (tens * stringSize) Components qty, stringSize End If End Function

我用另一个函数调用它

Components charQty, 26

其中charQty = 565,当它作为参数传递给Components时,charQty = 19,在组件完成后.我通过在函数调用之前和之后立即打印值来确定这一点.

我是VBA的新手.任何帮助将不胜感激.

1> YowE3K..:

与大多数其他语言不同,VBA中参数的默认行为是传递它们ByRef- 这意味着传递对原始对象/变量的引用,因此原始对象/变量可以被被调用函数修改.

另一种方法是使用ByVal,在这种情况下,值的临时副本将传递给被调用的函数.因为它是临时的,所以当函数结束时,所做的任何更改都会丢失.

Function Components(ByVal qty As Integer, ByVal stringSize As Integer)

有一点需要注意......因为对象总是通过对对象的引用来引用,该引用的临时副本仍将指向原始对象.因此,即使您指定*了对象,也几乎就像传递了一个对象一样.(除非函数要对某个其他对象执行该参数,否则原始对象仍将被指向函数外部.)ByRefByVal*Set

MSDN文档



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有