Arrays 在VBA Access中获取通过二维数组的错误循环
当通过Companycode数组用于下一个循环时,我得到的下标超出范围错误。我之前尝试过两个一维数组。也有同样的问题 我正在将重复的公司代码分配给该数组,并希望基于公司代码的不同组合运行查询。我是错误地分配数组,还是以错误的方式循环数组? 非常感谢您的帮助。谢谢Arrays 在VBA Access中获取通过二维数组的错误循环,arrays,vba,ms-access,Arrays,Vba,Ms Access,当通过Companycode数组用于下一个循环时,我得到的下标超出范围错误。我之前尝试过两个一维数组。也有同样的问题 我正在将重复的公司代码分配给该数组,并希望基于公司代码的不同组合运行查询。我是错误地分配数组,还是以错误的方式循环数组? 非常感谢您的帮助。谢谢 Dim strSql As String Dim qdf As DAO.QueryDef Dim rec As DAO.Recordset Dim rec1, rec2, rec3 As DAO.Recordset Dim Compan
Dim strSql As String
Dim qdf As DAO.QueryDef
Dim rec As DAO.Recordset
Dim rec1, rec2, rec3 As DAO.Recordset
Dim CompanyCode() As Variant
Dim intRowCount As Integer
Dim i, j, lrow As Integer
Set rec3 = CurrentDb().OpenRecordset("select count(*) as Row_Count from tblgt_customer AS GC1 LEFT
JOIN tblGT_Customer AS GC2 ON GC1.ABN = GC2.ABN WHERE GC1.Customer<>[GC2].[Customer]")
lrow = rec3.Fields("Row_Count").Value
Set rec1 = CurrentDb().OpenRecordset("select gc1.company as company1,gc2.company as company2 from
tblgt_customer AS GC1 LEFT JOIN tblGT_Customer AS GC2 ON GC1.ABN = GC2.ABN WHERE GC1.Customer<>[GC2].
[Customer]")
CompanyCode = rec1.GetRows()
rec1.Close
For j = 0 To lrow
If CompanyCode(0, j) = "CICCO" And (CompanyCode(1, j) <> "CICCC" Or CompanyCode(1, j) <> "CAP") Then
Set qdf = CurrentDb.QueryDefs("qry_Customer_Dup_Check_7")
qdf.Execute
Set qdf = CurrentDb.QueryDefs("qry_Customer_Dup_Check_8")
qdf.Execute
ElseIf CompanyCode(0, j) = "CAP" And CompanyCode(1, j) <> "CICCC" Then
Set qdf = CurrentDb.QueryDefs("qry_Customer_Dup_Check_5")
qdf.Execute
Set qdf = CurrentDb.QueryDefs("qry_Customer_Dup_Check_6")
qdf.Execute
ElseIf CompanyCode(0, j) = "CICCC" Or CompanyCode(1, j) = "CICCC" Then
Set qdf = CurrentDb.QueryDefs("qry_Customer_Dup_Check_3")
qdf.Execute
Set qdf = CurrentDb.QueryDefs("qry_Customer_Dup_Check_4")
qdf.Execute
End If
Next j
Dim strSql作为字符串
将qdf设置为DAO.QueryDef
作为DAO.Recordset的Dim rec
Dim rec1、rec2、rec3作为DAO.Recordset
Dim CompanyCode()作为变量
Dim intRowCount为整数
尺寸i,j,lrow为整数
设置rec3=CurrentDb().OpenRecordset(“选择count(*)作为行计数,从tblgt_customer作为GC1左侧
将tblGT_客户作为GC2加入GC1.ABN=GC2.ABN,其中GC1.Customer[GC2].[Customer]”)
lrow=rec3.字段(“行计数”).值
Set rec1=CurrentDb().OpenRecordset(“从中选择gc1.company作为company1,选择gc2.company作为company2
tblgt_客户作为GC1左加入tblgt_客户作为GC2在GC1.ABN=GC2.ABN,其中GC1.customer[GC2]。
[客户]”)
CompanyCode=rec1.GetRows()
记录1.结束
对于j=0至lrow
如果公司代码(0,j)=“CICCO”和(公司代码(1,j)“CICCC”或公司代码(1,j)“CAP”),则
设置qdf=CurrentDb.QueryDefs(“客户重复检查7”)
执行
设置qdf=CurrentDb.QueryDefs(“客户重复检查8”)
执行
如果公司代码(0,j)=“CAP”和公司代码(1,j)“CICCC”,则
设置qdf=CurrentDb.QueryDefs(“qry\U客户\U重复检查\U 5”)
执行
设置qdf=CurrentDb.QueryDefs(“客户重复检查6”)
执行
如果公司代码(0,j)=“CICCC”或公司代码(1,j)=“CICCC”,则
设置qdf=CurrentDb.QueryDefs(“客户重复检查3”)
执行
设置qdf=CurrentDb.querydfs(“qry\u客户\u重复检查\u 4”)
执行
如果结束
下一个j
lrow
是基于1的(1=1record),但您的CompanyCode
数组是基于零的,因此您需要将j=0转换为lrow-1
。您可以跳过查询并使用UBound(CompanyCode,2)
作为循环上限
Dim rec1作为DAO.Recordset
Dim CompanyCode()作为变量
尺寸j等于长,v1,v2等于长
Set rec1=CurrentDb().OpenRecordset(“从中选择gc1.company作为company1,gc2.company作为company2”&_
“tblgt_客户作为GC1左加入tblgt_客户作为GC2”&_
“ON GC1.ABN=GC2.ABN其中GC1.Customer[GC2].[Customer]”
rec1.MoveLast'以获得准确的计数
numRecs=rec1.RecordCount
Debug.Print“Got”&numRes&“records”
建议1.1首先
CompanyCode=rec1.GetRows(numRecs)Dim rec1、rec2、rec3作为DAO。记录集
仅声明rec3
作为DAO.Recordset。rec1和rec2是变体,因为没有为它们分配数据类型。与尺寸i、j、lrow相同,为整数
。必须为每个变量单独分配一个数据类型。这将解决下标超出范围的错误。但是这个代码UBound(CompanyCode,2)的结果是数字0。因此for循环只进行一次迭代,并且只运行一组查询。对于我的数据集,该Ubound应该会产生10。您是否尝试在记录集上循环并使用debug.Print检查内容?这是你所期望的吗?或者看看这里: