如何使用 92 个字符声明和设置 92 个对象:
如果您担心“占用空间”,并且假设您想将 5 个过程级变量 (w1..w5) 显式设置为 Set 到 5 个工作表 (Sht1..Sht5),您可以使用:
示例 #1:
DefObj W
Sub wSet1()
Dim w1, w2, w3, w4, w5
Set w1=[Sht1]:Set w2=[Sht2]:Set w3=[Sht3]:Set w4=[Sht4]:Set w5=[Sht5]
End Sub
...或者,更节省空间,例如,如果您在 92 个声明的变量中有 92 个工作表到 Set >?那么:
示例 #2:
DefObj W
Sub wSet2():Dim wks(1To 92),x:For x=1To 92:Set wks(x)=Sheets("Sht"&x):Next x:End Sub
(这是 92 个字符...不算换行符!)
说明:
在这两种缩短声明的方式之间,我们使用了六个快捷方式。以下是每一项的摘要,有关每一项的完整文档,请参见“更多信息”下的链接。
免责声明:我们不应该在编程中使用快捷方式的原因有很多。显而易见的一点是,您压缩的代码越多,阅读和理解就越困难(尤其是其他人),因此可能更难排除故障或扩展。
如果你不知道什么是“标准方法”,就不要先学捷径!在学习捷径之前先学习如何以“正确的方式”做事,无论它看起来多么吸引人。曾几何时,我认为缩进和注释等整洁,以及 full,适当的技术,并不重要。我错了;必须以艰难的方式学习。如果您正在阅读本文,那么您可能也必须通过艰苦的方式学习,但至少:
在您的 Stack Overflow 问题中发布示例代码时不要使用快捷方式。 (这不是 [MCVE]的方法!)你可能会被骂! ...并且可能有你的问题被否决或被忽略... 你被警告了!
✓ DefObj (默认数据类型)
[Deftype statements][1] are a forgotten method of declaring default data types. Normally, the default data type is [`Variant`][2], so this:
Dim myVariable as Variant
...等同于:
Dim myVariable
...但是DefObj W 语句(在模块级别使用)说:
在此模块中声明的所有变量,以字母“W”开头的变量默认类型为Object(除非另有说明)。请注意,Deftypes 语句必须在模块级别使用(在您的第一个 Sub 之前)。
整个列表:(More Info)
DefBool DefByte DefCur DefDate DefDbl DefDec DefInt DefLng DefSng DefStr DefObj DefVar
✓ , (“Dim”语句中的逗号)
使用Dim 声明变量时,可以在同一行列出多个变量,用逗号分隔。因此:
Sub mySub()
Dim myVariable1 as Currency
Dim myVariable2 as Currency
…
...与此相同:(结合示例与 Deftypes)
DefCur m
Sub mySub()
Dim myVariable1, myVariable1
…
✓ Sheets ('Sheets' 集合)
所以,如果一个工作簿有 3 个工作表和 2 个图表表,在 VBA 中:
Sheets.Count 将返回 5
Worksheets.Count 将返回 3
警告:如果您有同名的图表和工作表,使用Sheets 可能会导致冲突(在引用其他文件中的工作表时也应避免使用)。但是对于一个简单的单文件、仅工作表的工作簿,为自己节省一些 Work 并坚持使用 Sheets。
✓ [ ] (方括号参考快捷方式)
[方括号]可用作引用工作表、单元格范围 和个人的快捷方式细胞。您可以使用A1 参考样式 或括号内的命名范围 作为 Range 属性的快捷方式。您不必键入“范围”一词或使用引号。
Worksheets("Sheet1").[A1:B5].ClearContents
[MyRange].Value = 30
这几乎不是documented,而且记录较少的事实是,如果按逻辑顺序使用,方括号可以用来指代工作表。
结合示例,所有这些语句都会有相同的结果:
Worksheets("Sheet1").Range("A1") = Now()
Sheets("Sheet1").Range("A1") = Now()
Worksheets("Sheet1").[A1] = Now()
Sheets("Sheet1").[A1] = Now()
[Sheet1].[A1] = Now()
✓ wks() (变量数组)
如果您要声明大量相似的对象,将它们组合成一个数组通常更容易(也更有条理)。数组可以声明为任何类型,例如,Object、Worksheet。 (...甚至是很少使用和奇怪的类型,如LongLong 和IConverterApplicationPreferences。(显然,谁想到了那个人并不关心捷径。)
✓ For..Set..Next (循环设置变量数组)
当使用对象数组(任何任何变量集)时,下一个合乎逻辑的步骤是减少需要对整个对象组执行的任何任务的代码。
其他说明:
示例 #1 可以压缩为一行,但我希望它在答案中易于阅读。如果我们的工作表名称是 S1..S5 而不是 oh-so-longy Sht1..Sht5,and 我们使用 :,我们可以用 105 个字符完成同样的事情:
示例 #1b:
DefObj W
Sub wSet():Dim w1,w2,w3,w4,w5:Set w1=[S1]:Set w2=[S2]:Set w3=[S3]:Set w4=[S4]:Set w5=[S5]:End Sub
数据类型快捷方式符号
另一组很少使用的可追溯到 1974 年:Gary Kildall 为 CP/M 操作系统选择的数据类型快捷方式
Symbol Data Type Constant
% Integer vbInteger = 2
$ String vbString = 8
& Long vbLong = 3
@ Decimal vbDecimal = 6
! Single vbSingle = 4
# Double vbDouble = 5
许多编码语言至今仍受支持,例如,您可以互换使用这些语言:
Dim myVariable as String
Dim myVariable$
更多信息: