【问题标题】:Recordset Not Iterating记录集不迭代
【发布时间】:2017-11-18 01:41:10
【问题描述】:

我确信这完全是用户错误,但对于我的一生,我无法发现如何迭代表并将记录写入 Excel。我有下面的代码,但它挂在第一个 Manager ID 上,只是在循环中不断地重复写那个。我想迭代表中的所有Manager 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

【问题讨论】:

  • debug.print 是否输出所有经理名称?在我看来,您没有更改目标单元格(您没有在任何地方使用递增的 i )。是否有可能在迭代 TestTable 记录集时覆盖相同的单元格 (R2)?
  • @majjam - .Fields(2).Value .Fields(1).Value 和 .Fields(3).Value 的 debug.print 表明记录集实际上正在移动
  • 这是本周的第 3 或第 4 个问题,.MoveLast 后跟 .MoveFirst ...你们都在读同样的烂教程吗?如果您不需要.Count在开始迭代之前,那么您不需要.MoveLast.MoveFirst。无论如何,似乎记录集 正在 迭代,但是您一遍又一遍地覆盖相同的单元格。

标签: ms-access vba ms-access-2013


【解决方案1】:

你没有改变你的偏移量,所以你不断地分配同一个单元格。

尝试以下方法:

    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

【讨论】:

  • 我将 synatx 更改为 i = 0 xlR​​.Value = .Fields(0).Value xlR.Offset(ColumnOffset:=1 + (i * 2)).Value = .Fields(2)。 Value xlR.Offset(ColumnOffset:=2 + (i * 2)).Value = "E00000000" i = i + 1 并且每次通过时它只是覆盖相同的 3 个单元格 - 当经理变动
  • 请将i=0移出循环
  • 我将 i=0 移到这条线下方 Set xlR = xlWb.Worksheets(1).Range("$R$2") 但结果相同
  • 查看调整后的答案
【解决方案2】:

变化:¨

i = i + 1
.MoveNext

i = i + 2
.MoveNext

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-05
    • 1970-01-01
    • 1970-01-01
    • 2016-02-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多