Ms access 记录集不迭代
我确信这完全是用户的错误,但就我个人而言,我无法发现如何迭代一个表,并将记录写入Excel。我有下面的代码,但它挂起在第一个Ms access 记录集不迭代,ms-access,vba,ms-access-2013,Ms Access,Vba,Ms Access 2013,我确信这完全是用户的错误,但就我个人而言,我无法发现如何迭代一个表,并将记录写入Excel。我有下面的代码,但它挂起在第一个管理器ID上,只是在循环中不断重复对该ID的写入。我想迭代表中的所有经理ID,并将它们写入同一工作簿 我应该如何调整这段代码才能做到这一点 Set xlR = xlWb.Worksheets(1).Range("$R$2") i=0 Set rs2 = Db.OpenRecordset("SELECT * FROM TestTable ORDER BY [Man
管理器ID
上,只是在循环中不断重复对该ID的写入。我想迭代表中的所有经理ID
,并将它们写入同一工作簿
我应该如何调整这段代码才能做到这一点
Set xlR = xlWb.Worksheets(1).Range("$R$2")
i=0
Set rs2 = Db.OpenRecordset("SELECT * FROM TestTable ORDER BY [Manager ID] ASC", dbOpenDynaset)
managerName = CLng(rs2.Fields(3).Value)
Debug.Print managerName
With rs2
.MoveLast
.MoveFirst
Do While Not .EOF
xlR.Value = .Fields(0).Value
xlR.Offset(ColumnOffset:=1 + (i * 2)).Value = .Fields(2).Value
xlR.Offset(ColumnOffset:=2 + (i * 2)).Value = "ENTATH01"
i = i + 1
.MoveNext
Loop
.Close
End With
xlWb.SaveAs FileName:=sPath & sFile, FileFormat:=xlOpenXMLWorkbook
xlWb.Close SaveChanges:=True
rs2.MoveNext
您没有更改偏移量,因此一直在指定同一单元格 请尝试以下操作:
xlR.Offset(ColumnOffset:=i * 3).Value
xlR.Offset(ColumnOffset:=1+(i*3)).Value = .Fields(2).Value
xlR.Offset(ColumnOffset:=2+(i*3)).Value = "ENTATH01"
我假设您正在将I初始化为0您没有更改偏移量,因此您正在连续分配相同的单元格 请尝试以下操作:
xlR.Offset(ColumnOffset:=i * 3).Value
xlR.Offset(ColumnOffset:=1+(i*3)).Value = .Fields(2).Value
xlR.Offset(ColumnOffset:=2+(i*3)).Value = "ENTATH01"
我假设您正在将I初始化为0
i = i + 1
.MoveNext
到
更改:(
i = i + 1
.MoveNext
到
debug.print是否输出所有ManagerName?在我看来,您没有更改目标单元格(您没有在任何地方使用递增的i)。是否可能在迭代TestTable记录集时覆盖了相同的单元格(R2)?@majjam-debug.print of.Fields(2).Value.Fields(1).Value和.Fields(3)。值显示记录集实际上正在移动。这是本周的第三个或第四个问题,其特点是
。MoveLast
,然后是。MoveFirst
。你们都在读同样糟糕的教程吗?如果在开始迭代之前不需要.Count
,则不需要.MoveLast
和.MoveFirst
。无论如何,记录集似乎正在迭代,但您正在一次又一次地覆盖相同的单元格。debug.print是否输出所有managernames?在我看来,您没有更改目标单元格(您没有在任何地方使用递增的i)。是否可能在迭代TestTable记录集时覆盖了相同的单元格(R2)?@majjam-debug.print of.Fields(2).Value.Fields(1).Value和.Fields(3)。值显示记录集实际上正在移动。这是本周的第三个或第四个问题,其特点是。MoveLast
,然后是。MoveFirst
。你们都在读同样糟糕的教程吗?如果在开始迭代之前不需要.Count
,则不需要.MoveLast
和.MoveFirst
。无论如何,记录集似乎正在迭代,但您正在一次又一次地覆盖相同的单元格。我将synatx更改为I=0 xlR。Value=.Fields(0)。Value xlR.Offset(columnpoffset:=1+(I*2))。Value=.Fields(2)。Value xlR.Offset(columnpoffset:=2+(I*2))。Value=“E00000000”i=i+1,每次都会覆盖相同的3个单元格-当管理器更改时,永远不会移动到下一列或下一行请移动i=0
到循环外部我将i=0移动到此行下方设置xlR=xlWb。工作表(1)。范围($R$2)但同样的结果是,调整后的回答将synatx修改为i=0 xlR。Value=.Fields(0)。Value-xlR.Offset(columnCoffset:=1+(i*2))。Value=.Fields(2)。Value-xlR.Offset(columnCoffset:=2+(i*2))。Value=“E00000000”i=i+1,每次都会覆盖相同的3个单元格-当管理器更改时,永远不会移动到下一列或下一行请移动i=0
到循环外部我将i=0移动到此行下方设置xlR=xlWb。工作表(1)。范围($R$2”),但相同的结果请查看调整后的答案