Arrays 在VBA Access中获取通过二维数组的错误循环

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

当通过Companycode数组用于下一个循环时,我得到的下标超出范围错误。我之前尝试过两个一维数组。也有同样的问题

我正在将重复的公司代码分配给该数组,并希望基于公司代码的不同组合运行查询。我是错误地分配数组,还是以错误的方式循环数组? 非常感谢您的帮助。谢谢

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检查内容?这是你所期望的吗?或者看看这里: