ByVal:ByValvsByRefVBA

我试图尝试一些由 JaredParByRef vs ByVal Clarification回答的东西

我试图尝试一些由 JaredParByRef vs ByVal Clarification回答的东西

VB.NET 中的ByVal意味着提供的值的副本将被发送到函数。对于值类型 (Integer,Single等),这将提供值的浅表副本。对于较大的类型,这可能是低效的。对于引用类型,虽然 (String,类实例) 将引用的副本传递给

VB.NET 中的ByRef意味着对原始值的引用将被发送到函数 (1)。这几乎就像原始值在函数中被直接使用。像=这样的操作将影响原始值,并在调用函数中立即可见。

我试图用的代码测试它,我似乎无法让它工作使用ByRef将单元格的值更改为0如果它是1

是我测试的代码,我做错了什么?Range("A1")的值仍然是1

Sub test1()
    Dim trythis As Boolean
    trythis = False
    If (Sheets("TESTING").Range("A1").value = 1) Then
        testingRoutine (trythis)
        If (trythis) Then
            Debug.Print "Value changed to 0"
            Sheets("TESTING").Range("A1").value = 0
        End If
    End If
End Sub
Private Function testingRoutine(ByRef trythis As Boolean)
    Debug.Print "Ran Function"
    trythis = True
End Function
12

VB 子程序不需要在参数列表周围使用大括号。但是,如果您传递单个参数并将其括在大括号中,则传递的是表达式。表达式不能通过引用传递。它们被评估,其结果被传递。因此,您必须删除调用testingRoutine (trythis)中的大括号,并写入testingRoutine trythis

注意:如果您在不使用函数返回值的情况下调用该函数,则必须将其编写为过程调用(参数列表周围没有大括号)。

myVal = myFunction (trythis)   ' trythis will be passed by reference
myFunction (trythis)           ' trythis will be seen as an expression
myFunction trythis             ' trythis will be passed by reference
myVal = mySub (trythis)        ' invalid: mySub is not a function
mySub (trythis)                ' trythis will be seen as an expression
mySub trythis                  ' trythis will be passed by reference

当然,当函数或 sub 具有多个参数时,问题将立即清楚,因为逗号不能出现在表达式中。

3

改变这一点:

testingRoutine (trythis)

对此:

testingRoutine trythis

那就试试吧.

另外,看看会发生什么,如果我把它改成这个,函数被用作一个函数(返回的东西)

Sub test1()
    Dim trythis As Boolean
    Dim testit As Boolean
    trythis = False
    If (Sheets("Sheet1").Range("A1").Value = 1) Then
        testit = testingRoutine(trythis)
        If (trythis) Then
            Debug.Print "Value changed to 0"
            Sheets("TESTING").Range("A1").Value = 0
        End If
    End If
End Sub
Private Function testingRoutine(ByRef trythis As Boolean) As Boolean
    Debug.Print "Ran Function"
    trythis = True
End Function
1

我会这样做。

Sub test1()
    Dim trythis As Boolean
    trythis = False
    If (Sheets("TESTING").Range("A1").value = 1) Then
        tr = testingRoutine(trythis)
        If tr Then
            Debug.Print "Value changed to 0"
            Sheets("TESTING").Range("A1").value = 0
        End If
    End If
End Sub
Private Function testingRoutine(ByRef trythis As Boolean)
    Debug.Print "Ran Function"
    testingRoutine = True
End Function

因为trythis不是全局变量,所以在函数中更改它将不会在 sub 中执行任何操作。它只会在函数中将trythis定义为 True 并保留在该范围内。要使trythis受函数影响并被子程序读取,您必须将其分配给子程序中的变量。

0

我不记得我在哪里读到这个,但我知道,如果你在调用子 / 函数时将 bracets()添加到参数中,这是一个特定的(不是错误)方式,微软暗示解决 byref 调用(到 byval)。

例如:假设你调用一个只有 byref 和 2 个参数的子:

call Sub1 (a),(b)

是强制Byval参数的正确方法,即使它们最初被编码为Byval

本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处

(299)
C语言密钥:在 C#中使用密钥和密钥调用API(skincay)
上一篇
4 kh dr:IceCast2.3.2-kh29服务器流404错误
下一篇

相关推荐

  • vba cells函数:行Cells(1, 1) = IDCells(1, 2) = NameCells(1, 3) = Age

    示例示例Cells函数是VBA中的一个常用函数,它可以获取单元格或者一组单元格的值。语法:…

    2023-04-06 03:01:43
    0 96 36
  • vba实例800pdf学习如何使用VBA来提高工作效率

    VBA(Visual Basic for Applications)是一种用于创建自动化应用程序的开发语言。它可以在Microsoft Office应用程序中使用,例如Excel、Word和Access。下面是一个VBA实例,用于将Excel文件转换为PDF格式:…

    2024-03-25 09:47:37
    0 95 62
  • ppt的vba编程语言:为“Hello World”的消息框MsgBox Hello World

    PPT VBA编程语言是一种基于Visual Basic for Applications(VBA)的编程语言,用于在Microsoft PowerPoint中创建宏和自动化任务。它可以帮助您自动执行复杂的任务,如将图像添加到每张幻灯片,或者根据指定的时间间隔自动更改文本。…

    2024-01-23 02:56:47
    0 42 11
  • vba程序解释器:使用VBA程序解释器提高工作效率

    VBA(Visual Basic for Applications)程序解释器是一种编程语言,用于在Microsoft Office应用程序中创建宏和自动化任务。它可以帮助用户更有效地完成日常工作,并且可以在不同的Office应用程序之间共享代码。…

    2023-04-04 01:57:45
    0 62 72
  • vba case 多条件判断如何优化代码?

    VBA Case 多条件判断是指在VBA编程中,使用Case语句进行多条件判断。它可以根据不同的条件执行不同的操作。下面是一个示例代码:…

    2022-12-30 14:07:43
    0 52 74
  • vba编程语言:为“Hello World”的对话框Sub HelloWorld() MsgBox Hello World

    VBA(Visual Basic for Applications)是一种微软公司开发的基于Visual Basic语言的应用程序开发环境,它是Office系列软件(如Word、Excel、Access等)内置的程序设计语言。VBA可以用来创建宏,也可以用来编写完整的应用程序,如果熟悉Visual Basic语言,那么学习VBA就会非常容易。…

    2023-03-09 08:30:57
    0 89 98
  • excel一列求和vba代码 & sumEnd Sub

    以下是求和一列数据的VBA代码:Sub)…

    2023-01-10 12:05:59
    0 87 51
  • 宗地代码查询:在 VBA代码中运行更新查询(access vba update query)

    关于宗地代码查询的问题,在access vba update query中经常遇到,我正在尝试使用 Access 制作一个小型库存程序,但我没有太多知识,到目前为止我所做的任何事情都是通过 Google 搜索的东西。我已经设法制作了使用未绑定表单存储数据的代码,现在我想通过在未绑定表单中为另一个表输入的数据来更新表的某些特定字段。有问题的 2 个表是 Transaction 和 Stock。Stock 有 3 个字段 PartNo,Location 和 Q…

    2022-12-12 10:20:29
    0 72 16

发表评论

登录 后才能评论

评论列表(39条)