Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MS Access VBA:使用变量生成Dim语句_Vba_Ms Access - Fatal编程技术网

MS Access VBA:使用变量生成Dim语句

MS Access VBA:使用变量生成Dim语句,vba,ms-access,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 这会引发编译错误:应为子、函数或属性

我需要构建多个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
这会引发编译错误:应为子、函数或属性


循环正确地生成了我的命令,但我无法从存储该命令的变量中运行该命令。

代码不是一堆可执行字符串。不能“执行”或“调用”字符串文字

purch
不是有效的可执行指令,无论该变量的值是否包含完全有效的VBA代码-就VBA而言,这不是代码,这是局部变量,仅此而已。。。编译器告诉您,它不知道如何处理一条不执行任何操作的指令

我试图将该行拆分为每个预算代码的购买对象

您将很快了解到
类型
不是对象,并且不能很好地处理
集合
。此外,数据透视记录集中有370列,这让你的生活变得比需要的困难得多。如果要迭代预算代码,请让查询返回预算代码并进行迭代

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

'class PurchaseItem
Public ID As Long
Public Name As String
Public PurchaseDate As Date
Public BudgetCode As String
Public TransactionCode As String
'...
现在,当您迭代记录集时,每次都创建一个
新的PurchaseItem
,然后
将它添加到
集合中:

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
集合中。

代码不是一堆可执行字符串。不能“执行”或“调用”字符串文字

purch
不是有效的可执行指令,无论该变量的值是否包含完全有效的VBA代码-就VBA而言,这不是代码,这是局部变量,仅此而已。。。编译器告诉您,它不知道如何处理一条不执行任何操作的指令

我试图将该行拆分为每个预算代码的购买对象

您将很快了解到
类型
不是对象,并且不能很好地处理
集合
。此外,数据透视记录集中有370列,这让你的生活变得比需要的困难得多。如果要迭代预算代码,请让查询返回预算代码并进行迭代

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

'class PurchaseItem
Public ID As Long
Public Name As String
Public PurchaseDate As Date
Public BudgetCode As String
Public TransactionCode As String
'...
现在,当您迭代记录集时,每次都创建一个
新的PurchaseItem
,然后
将它添加到
集合中:

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

现在您的所有项目都在
项目
集合中。

嗯。。。你认为这会有什么实际作用?以后是否移动该变量?什么是“购买”
?因为“购买”指的是用户定义的类型。输入采购持卡人ID作为字符串持卡人姓名作为字符串部门作为字符串语句日期作为日期预算代码作为字符串交易日期作为日期供应商作为字符串采购金额作为货币请求人作为字符串描述作为字符串结束类型
Dim
语句不是可执行的。你到底想实现什么?回顾几个步骤,并解释一下你想做什么。如果有必要,您可以重新确定变量的尺寸,但我怀疑这里也不是这样。看起来您需要了解数组和/或集合。考虑到迭代次数事先不知道,我会选择
集合。。。你认为这会有什么实际作用?以后是否移动该变量?什么是“购买”
?因为“购买”指的是用户定义的类型。输入采购持卡人ID作为字符串持卡人姓名作为字符串部门作为字符串语句日期作为日期预算代码作为字符串交易日期作为日期供应商作为字符串采购金额作为货币请求人作为字符串描述作为字符串结束类型
Dim
语句不是可执行的。你到底想实现什么?回顾几个步骤,并解释一下你想做什么。如果有必要,您可以重新确定变量的尺寸,但我怀疑这里也不是这样。看起来您需要了解数组和/或集合。考虑到迭代次数事先不知道,我会选择
集合
。谢谢。我是个VBA新手。我不知道收藏,谢谢。我是个VBA新手。我不知道收藏。