我不是 VBA 和 excel 宏的出色专家,但我需要执行数据库中存在的 SQL 宏。该宏在其 SQL 定义中执行一些“echo”操作(开头 4 个“echo”,结尾有 2 个“echo”),然后 SQL 宏检索 18 列。删除“回声”检索执行良好,但我需要在 SQL 代码中维护“回声”,因为此宏是由系统自动创建的。为了从我的外部源中检索数据,我使用了 ADO 记录集,如下所示:
'If the recordset is empty
If (rs.EOF And rs.BOF) Then
iReply = MsgBox(Prompt:="No data retrieved", _
Buttons:=vbOKOnly, Title:="Error")
Else 'If the recordset contains data
rs.MoveFirst
Row = 2
Do While (rs.EOF = False And rs.BOF = False)
p = rs.GetRows
Sheet2.Range("A" & Row).Value = p(0, 0)
Sheet2.Range("B" & Row).Value = p(1, 0)
Sheet2.Range("C" & Row).Value = p(2, 0)
Sheet2.Range("D" & Row).Value = p(3, 0)
Sheet2.Range("E" & Row).Value = p(4, 0)
Sheet2.Range("F" & Row).Value = p(5, 0)
Sheet2.Range("G" & Row).Value = p(6, 0)
Sheet2.Range("H" & Row).Value = p(7, 0)
Sheet2.Range("I" & Row).Value = p(8, 0)
Sheet2.Range("J" & Row).Value = p(9, 0)
Sheet2.Range("K" & Row).Value = p(10, 0)
Sheet2.Range("L" & Row).Value = p(11, 0)
Sheet2.Range("M" & Row).Value = p(12, 0)
Sheet2.Range("N" & Row).Value = p(13, 0)
Sheet2.Range("O" & Row).Value = p(14, 0)
Sheet2.Range("P" & Row).Value = p(15, 0)
Sheet2.Range("Q" & Row).Value = p(16, 0)
Sheet2.Range("R" & Row).Value = p(17, 0)
Row = Row + 1
Loop
End If
事实是,使用 SQL 宏中的“echo”,只有第一个“echo”被检索并打印在我的 excel 表的第一列中,然后它不会检索其他任何东西,其他的“echo”和我感兴趣的 18 列数据。我尝试使用记录集 MoveNext 和 Move 方法移动到第 5 个位置(因为我认为第 5 个位置对应于前 18 列数据,因为我在开头有 4 个“回声”)但它没有工作:(即使移动到第二个位置也不起作用,所以我得出结论,在我的记录集中我只有一个对应于第一个“回声”的条目,然后记录集到达其 EOF 并退出循环。有没有办法或改变我的代码可以避免检索 SQL 宏产生的“回声”吗?
先感谢您