首先,谢谢您的评论。如果表名称类似Name1,Name2,Name3等,则Names数组,但是我们使用不同的名称。
但是,我是否需要以其他方式解释才能理解。
我想做的是将旧数据库与新数据库(两者均在MS Access中)进行比较。每个表都有很多表(> 20),每个表都有很多字段,例如“ Number”,“ Name”等,并将差异放在“ Output”表中。
然后为了使代码尽可能简短,我想使用Loop并使用Variable引用表名称。我将所有表名称放在下表中:
表名称
Old_DB_Tables_Names | New_DB_Tables_Names
Items_List | Items_List
Items_Price |商品价格 商品_规格| Items_Specs Items_Size | Items_Size Items_Warehouse |物品_仓库 Items_Spare | Items_Spare Items_Quantity | Items_数量 : :: :
Dim TablesNames As ADODB.Recordset
Dim Items_List As ADODB.Recordset
Dim Items_Price As ADODB.Recordset
Dim Items_Specs As ADODB.Recordset
Dim Items_Size As ADODB.Recordset
Dim Items_Wearhouse As ADODB.Recordset
Dim Items_Spare As ADODB.Recordset
Dim Items_Quantity As ADODB.Recordset
:
:
Dim I as Integer
I=0
Table1=TablesNames.item("Old_DB_Tables_Names").value
Table2=TablesNames.item("New_DB_Tables_Names").value
While TablesNames .EOF=False
if Table1.fields(I) <> Table2.fields(I) then
Output.Fields.Item("Number").Value Table2.Fields.Item("Number ").Value
Output.Fields.Item("Name").Value Table2.Fields.Item("Name ").Value
:
:
End If
I=I+1
Wend
问题VBA不接受语句[Table1.fields(I) <> Table2.fields(I)]
。
是吗?我们不能通过表的名称,表的任何字段引用表,也不能从该字段的记录中获取值? 如果您还有其他方法,请告诉我。
答案 0 :(得分:0)
好吧,让我们从第一部分开始:
Dim TablesNames As ADODB.Recordset
Dim Items_List As ADODB.Recordset
Dim Items_Price As ADODB.Recordset
Dim Items_Specs As ADODB.Recordset
Dim Items_Size As ADODB.Recordset
Dim Items_Wearhouse As ADODB.Recordset
Dim Items_Spare As ADODB.Recordset
Dim Items_Quantity As ADODB.Recordset
您在其余代码中尝试执行的操作:
将每个表中的所有信息都放入代码中。
您实际上在做什么:
创建空的记录集变量,以存储表数据,然后再从不存储任何表数据。即TableNames,Items_List等都是变量,它们目前与任何事物都没有关系,它们完全是空的,在当前状态下对其余代码没有任何意义。
接下来我们有:
Table1=TablesNames.item("Old_DB_Tables_Names").value
Table2=TablesNames.item("New_DB_Tables_Names").value
您在其余代码中尝试执行的操作:
使用表名存储表的实例。
您实际上在做什么:
访问记录集TableNames中的字段的值,并将该值存储在名为Table1的变量中。从名称来看,我假设您期望它是一个TableDef,但是您将它用作字符串或值类型,但我无法确定,因为我看不到声明它的位置。如果未声明,则需要在模块的每个模块的顶部键入“ Option Explicit”(不带引号),现在,认真地,请停止阅读并继续执行操作。
While TablesNames .EOF=False
如果您在代码中设置了TableNames的记录集,那么只要您在.EOF之前没有空格,这将起作用
if Table1.fields(I) <> Table2.fields(I) then
您在其余代码中尝试执行的操作:
从存储在变量Table1中的TableDef中访问一个字段。
您实际上在做什么:
什么都没有,因为从您的代码来看,表1是字符串或值类型,并且对于任何字符串或值类型都没有名为“ fields”的方法或属性,因此您什么也没做。
最后我们有
Output.Fields.Item("Number").Value Table2.Field`enter code here`s.Item("Number ").Value
Output.Fields.Item("Name").Value Table2.Fields.Item("Name ").Value
什么?
所有这些使我相信您还没有掌握VBA的语法结构。尽管我们中的许多人希望为您提供帮助,但在大多数情况下,我们将无法仅通过您的某种修改就完全为您提供答案。