gpt4 book ai didi

vba - 如果一个数字写在方括号中,如 [5],这意味着什么

转载 作者:行者123 更新时间:2023-12-04 03:35:42 27 4
gpt4 key购买 nike

我正在开发一个旧版 VBA/Excel 应用程序,偶然发现了一些代码行,其中长字符串(从文件中读取)被切割成碎片。这些行看起来像这样:

 Range("E16").Value = Mid(line, 49, [6])
显然,写 [6]表示占用 6 个字符,但我从未见过这种将方括号括在数字周围的语法。
我做了一些测试,发现把这些方括号放在数字上并不明显
Dim x As Double
x = 5.1
Debug.Print [2], [3.1], [-5], x
Debug.Print [3.1] * [x] * [-5]

>> 2 3.1 -5 5.1
>> -79.05
所以,没有截断,没有舍入,没有绝对值。
我做了一些更多的测试来检查它是否具有类似于在变量周围放置括号以防止修改通过引用传递的值的魔法,但事实并非如此:
    x = 5.1: test2 x: Debug.Print x
x = 5.1: test2 (x): Debug.Print x
x = 5.1: test2 [x]: Debug.Print x

Sub test2(ByRef y As Double)
y = y * 2
End Sub

>> 10.2
>> 5.1
>> 10.2
令编译器甚至接受这种语法感到惊讶:使用这些括号是什么意思?

最佳答案

VBA/VB6 中的方括号用于访问“外来标识符”,即不合法的标识符。例如:

Public Enum Foo
Some
Thing
[Some Thing] ' please don't do this
End Enum

以及名称以下划线开头的隐藏成员:
Public Property Get NewEnum() As IUnknown
Set NewEnum = myCollection.[_NewEnum]
End Property

但是,在这个问题的代码上下文中,方括号是 as Scott indicated , 本质上是 [_Global].Evaluate 的简写符号,最终解析为 Application.Evaluate ...假设我们不在 Worksheet模块的代码隐藏,在这种情况下它是 Worksheet.Evaluate 的简写- 并且都返回 Variant ,这意味着任何链接的成员调用都是在运行时解决的盲目的、后期绑定(bind)的调用: Option Explicit不能把你从一个错字中拯救出来。

这就是为什么 Rubberduck (我管理/贡献的一个开源 VBIDE 插件项目)将它们解析为“运行时表达式”:

Rubberduck's context-sensitive toolbar showing 'A1' as a 'runtime expression'

换句话说:
Range("E16").Value = Mid(line, 49, [6])

也可以这样写:
[E16] = Mid(line, [49], [6])

...这可以说是可怕的代码,有大量冗余的隐式操作正在进行。

从来没有,从来没有任何理由给整数文字加上方括号:这只不过是一种相当迂回的方式来转动 Integer将文字转换为 Double (因为工作表数值是 Variant/Double ):
Debug.Print TypeName(42)
Integer

Debug.Print TypeName([42])
Double

使用显式转换会更好:
Debug.Print TypeName(CDbl(42))
Double

...甚至带有(喘气)类型的提示:
Debug.Print TypeName(42#)
Double

关于vba - 如果一个数字写在方括号中,如 [5],这意味着什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54579404/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com