gpt4 book ai didi

vba - VBA的隐藏特性

转载 作者:行者123 更新时间:2023-12-03 09:12:57 29 4
gpt4 key购买 nike

锁定。这个问题及其答案是locked因为这个问题是题外话,但具有历史意义。它目前不接受新的答案或交互。








VBA 语言的哪些特性要么记录不充分,要么根本不经常使用?

最佳答案

此技巧仅适用于 Access VBA、Excel 和其他不允许的。但是您可以通过在模块名称前加上下划线来使标准模块对对象浏览器隐藏。只有当您将对象浏览器更改为显示隐藏对象时,该模块才会可见。

这个技巧适用于所有基于 vb6 的 VBA 版本中的枚举。您可以通过将其名称括在括号中来创建 Enum 的隐藏成员,然后在其前面加上下划线。例子:

Public Enum MyEnum
meDefault = 0
meThing1 = 1
meThing2 = 2
meThing3 = 3
[_Min] = meDefault
[_Max] = meThing3
End Enum

Public Function IsValidOption(ByVal myOption As MyEnum) As Boolean
If myOption >= MyEnum.[_Min] Then IsValidOption myOption <= MyEnum.[_Max]
End Function

在 Excel-VBA 中,您可以通过将单元格括在方括号中来引用它们,方括号也用作 evaluate command允许您评估公式语法:
Public Sub Example()
[A1] = "Foo"
MsgBox [VLOOKUP(A1,A1,1,0)]
End Sub

您还可以通过将 LSet 与相同大小的用户定义类型结合使用而不使用 MemCopy (RtlMoveMemory) 来传递原始数据:
Public Sub Example()
Dim b() As Byte
b = LongToByteArray(8675309)
MsgBox b(1)
End Sub

Private Function LongToByteArray(ByVal value As Long) As Byte()
Dim tl As TypedLong
Dim bl As ByteLong
tl.value = value
LSet bl = tl
LongToByteArray = bl.value
End Function

八进制和十六进制文字实际上是无符号类型,它们都将输出 -32768:
Public Sub Example()
Debug.Print &H8000
Debug.Print &O100000
End Sub

如前所述,在括号内传递变量会导致它被 ByVal 传递:
Sub PredictTheOutput()
Dim i&, j&, k&
i = 10: j = i: k = i
MySub (i)
MySub j
MySub k + 20
MsgBox Join(Array(i, j, k), vbNewLine), vbQuestion, "Did You Get It Right?"
End Sub

Public Sub MySub(ByRef foo As Long)
foo = 5
End Sub

您可以将字符串直接分配到字节数组中,反之亦然:
Public Sub Example()
Dim myString As String
Dim myBytArr() As Byte
myBytArr = "I am a string."
myString = myBytArr
MsgBox myString
End Sub

“Mid”也是一个运算符。使用它可以覆盖字符串的特定部分,而无需 VBA 众所周知的慢字符串连接:
Public Sub Example1()
''// This takes about 47% of time Example2 does:
Dim myString As String
myString = "I liek pie."
Mid(myString, 5, 2) = "ke"
Mid(myString, 11, 1) = "!"
MsgBox myString
End Sub

Public Sub Example2()
Dim myString As String
myString = "I liek pie."
myString = "I li" & "ke" & " pie" & "!"
MsgBox myString
End Sub

关于vba - VBA的隐藏特性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1070863/

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