Sql 在excel中的vba中迭代数据库查询结果

Sql 在excel中的vba中迭代数据库查询结果,sql,excel,vba,cell,Sql,Excel,Vba,Cell,我想打开到SQL数据库的连接,然后访问各个单元格。我有一个使用PivotTableWizard的示例,如下所示。我想知道一种与透视表无关的方法——我想逐个单元格进行迭代。或者此数据透视表向导也适用于此目的 这个例子提到: ConnectionString = "Driver={SQL Server};Server=Serversql11;Persist Security Info=False;Integrated Security=SSPI;Database=DB_IC;" PivotName

我想打开到SQL数据库的连接,然后访问各个单元格。我有一个使用PivotTableWizard的示例,如下所示。我想知道一种与透视表无关的方法——我想逐个单元格进行迭代。或者此数据透视表向导也适用于此目的

这个例子提到:

ConnectionString = "Driver={SQL Server};Server=Serversql11;Persist Security Info=False;Integrated Security=SSPI;Database=DB_IC;"

PivotName = "Talks"

QArray = Array(ConnectionString, _
"exec dbo.talksReport '" & CStr(param_date) & "'")

Worksheets("Talks").PivotTableWizard xlExternal, QArray, Worksheets("Talks").Range("A1"), PivotName
短暂性脑缺血发作
/Karol

如果要逐个单元格进行迭代,可以执行以下操作:

Sub PrintCellContentsToDebugWindow()
  Dim ws As Worksheet
  Dim rng As Range
  Dim intCounterRow As Integer
  Dim intCounterCol As Integer
  Dim intMaxRow As Integer
  Dim intMaxCol As Integer

  Set ws = ActiveSheet   'OR   '
  'Set ws = ActiveWorkbook.Sheets("Sheet1")   '

  intCounterRow = 1
  intCounterCol = 1
  intMaxRow = 100
  intMaxCol = 25

  Do While intCounterCol <= intMaxCol
    intCounterRow = 1
    Do While intCounterRow <= intMaxRow
      Set rng = ws.Cells(intCounterRow, intCounterCol)
      Debug.Print rng.Address & "    " & rng.Value

      intCounterRow = intCounterRow + 1
    Loop
    intCounterCol = intCounterCol + 1
  Loop

End Sub

上面的代码遍历前100行和前25列,并在Visual Basic编辑器的调试窗口中打印出单元格地址及其值。

根据您执行此操作的原因,使用记录集可能更明智。每次删除时,请尝试使用ADO。非常感谢。但其实质是如何将数据从数据库中获取到单元格中。@Karol在这种情况下,您可以简单地使用Excel中的获取外部数据功能。在旧版本的Excel中,它位于Data>Get External Data>New Database Query.Thx下。我可以用自动方式使用它吗?此解决方案的最终用户应尽可能少地执行手动步骤。我可能会在执行您建议的操作时录制一个宏,并查看录制了哪些代码,然后在目标工作表文件中嵌入类似的代码。@Karol关于录制宏,这正是我要做的。我过去常常记不清要运行什么代码,但我通过深入研究宏代码,学会了如何准确地执行所需的操作。如果我没记错的话,这不是最干净的代码,但要想弄清楚并看到需要在哪里输入SQL代码并不难。