我对 VBA 还比较陌生,对定义数组有疑问。
我正在 Microsoft Access 中编写一个函数,根据最近一个月的数值预测今年剩余时间的五项收入指标。
我使用两个嵌套的 For...Next 循环,一个用于收入指标的外循环和一个用于当前月份到月末月份的内循环。在内循环中,我有一个 SQL 查询,它利用计数器值将数据附加到输出表。
有没有更好/更简洁(更有效)的方法来定义下面的两个数组?
Public Sub qapp_Revenue_Run_Rate()
DoCmd.SetWarnings False
Dim strSQL As String
Dim lng, lng2, counter, lngRRStart, lngMonth As Long
Dim month(1 To 12) As String
month(1) = "Jan"
month(2) = "Feb"
month(3) = "Mar"
month(4) = "Apr"
month(5) = "May"
month(6) = "Jun"
month(7) = "Jul"
month(8) = "Aug"
month(9) = "Sep"
month(10) = "Oct"
month(11) = "Nov"
month(12) = "Dec"
Dim metric(1 To 5) As String
metric(1) = "Investment Advisory Base Fees (ex-Sec Lending)"
metric(2) = "AUM Related Expenses"
metric(3) = "Securities Lending Revenue"
metric(4) = "Distribution & Other Revenue"
metric(5) = "BlackRock Solutions and advisory"
答案1
你可以使用这个Array
函数。它返回一个Variant
:
Dim month As Variant
month = Array("Jan", "Feb", "Mar" ...)
或者你可以使用格式功能
Dim month(1 To 12) As String
Dim i As Long
For i = 1 To 12
month(i) = Format$(DateSerial(2017, i, 1), "mmm")
Next i
但是请注意,这将根据 Windows 中定义的文化返回月份名称。因此,在另一台 PC 上,这可能会返回另一种语言的名称。
附注:您声明
Dim lng, lng2, counter, lngRRStart, lngMonth As Long
在 VBA 和 VB 6.0 中,类型声明仅适用于一个变量。这意味着此行上的所有变量除了 之外lngMonth
都是类型Variant
!您可以编写lng = "hello"
,并且此操作不会出错。您必须编写
Dim lng As Long, lng2 As Long, counter As Long, lngRRStart As Long, lngMonth As Long
在 VB.NET 中,情况不再如此,因为没有默认类型(Variant
已被删除)。因此,在 VB.NET 中,您的Dim
陈述是正确的。