2017-03-23 117 views
0

我想要测试从Excel数据连接运行的查询的三种变体。Excel ODBC数据连接查询刷新每个查询所花费的时间

我有三个单独的数据连接和三个单独的选项卡,分别从每个连接获取数据。

连接字符串对于每个查询都是相同的,只有命令文本(Oracle SQL)不同。

Excel中有没有方法查看每个查询的执行时间?

我特别使用版本Excel 2016 MSO 16.0.4456.1003 64bit

回答

1

像这样的东西也许(假设所有的连接把它们的结果在工作表的表,而不是在数据透视表):

Sub TimeQueries() 
    Dim oSh As Worksheet 
    Dim oCn As WorkbookConnection 
    Dim dTime As Double 
    For Each oCn In ThisWorkbook.Connections 
     dTime = Timer 
     oCn.Ranges(1).ListObject.QueryTable.Refresh False 
     Debug.Print Timer - dTime, oCn.Name, oCn.Ranges(1).Address(external:=True) 
    Next 
End Sub 

要运行此:

  1. Alt + F11转到VBA编辑器。
  2. 从菜单:插入模块。
  3. 在窗口中粘贴代码。
  4. 关闭VBA编辑器。
  5. Alt + F8显示宏的列表。选择新的,然后点击运行。
  6. Alt + F11再次给VBA编辑器。
  7. Ctr l + G用结果打开直接窗格。

如果你想要的代码写入到一个单元格,使用这个版本:

Sub TimeQueries() 
    Dim oSh As Worksheet 
    Dim oCn As WorkbookConnection 
    Dim dTime As Double 
    Dim lRow As Long 
    Set oSh = Worksheets("Sheet4") 'Change to your sheet name! 
    oSh.Cells(1,1).Value = "Name of Connection" 
    oSh.Cells(1,2).Value = "Location" 
    oSh.Cells(1,1).Value = "Refresh time (s)" 
    For Each oCn In ThisWorkbook.Connections 
     lRow = lRow + 1 
     dTime = Timer 
     oCn.Ranges(1).ListObject.QueryTable.Refresh False 
     oSh.Cells(lRow,3).Value = Timer - dTime 
     oSh.Cells(lRow,1).Value = oCn.Name 
     oSh.Cells(lRow,2).Value = oCn.Ranges(1).Address(external:=True) 
    Next 
End Sub 
+0

他们做了一切发生在一个工作表中,将我添加为一个按钮,我怎么能得到这个输出结果? – Matt

+0

1. Alt + F11转到VBA编辑器。 2.从菜单:插入模块。 3.将代码粘贴到窗口中。 4.关闭VBA编辑器。 5. Alt + F8显示宏的列表。选择新的,然后点击运行。 6.再次向VBE Alt + F11。 7. Control + G用结果打开直接窗格。 8.想要保持宏观?将文件另存为xlsm文件。 – jkpieterse

+0

优秀!完美的作品! – Matt