MS Access VBA:使用变量构建Dim语句

时间:2018-06-14 18:50:49

标签: vba ms-access

我需要构建多个Dim语句:

Dim p As String
Dim purch As String
Dim counter As Integer
counter = 0
Do While rst.EOF = False
counter = counter+1
p = "Purchase" & counter
purch = "Dim " & p & " As Purchase"
purch
rst.MoveNext
Loop

这会引发编译错误:预期的子,函数或属性

循环正在正确构建我的命令,但我无法从存储它的变量中获取命令。

1 个答案:

答案 0 :(得分:2)

代码不是一堆可执行字符串。你不能执行"或者"调用"字符串文字。

purch

Isn' ta有效的可执行指令,无论该变量的值是否包含完全有效的VBA代码 - 就VBA而言,不是代码,那是一个局部变量,什么都没有更多...编译器告诉你,它不知道如何处理什么都不做的指令。

  

我试图将行拆分为每个budgetCode的一个Purchase对象

您很快就会知道Type不是对象,并且不会与Collection一起玩得很好。此外,在一个旋转记录集中有370列,您的生活将比您需要的更加艰难。如果您要重复预算代码,让您的查询返回预算代码并迭代

您需要一个类模块 - 最简单的形式,它可能只是一堆公共字段:

'class PurchaseItem
Public ID As Long
Public Name As String
Public PurchaseDate As Date
Public BudgetCode As String
Public TransactionCode As String
'...

现在,当您迭代记录集时,每次都会创建New PurchaseItemAdd会创建Collection

Dim items As Collection
Set items = New Collection

Dim current As PurchaseItem
Do While Not rst.EOF
    Set current = New PurchaseItem
    current.ID = rst.Fields("ID").Value
    current.Name = rst.Fields("Name").Value
    current.PurchaseDate = rst.Fields("Date").Value
    current.BudgetCode = rst.Fields("BudgetCode").Value
    current.TransactionCode = rst.Fields("TransactionCode").Value
    '...
    items.Add current
    rst.MoveNext
Loop

现在,您拥有items集合中的所有商品。