Sql Excel ODBC数据连接查询刷新每个查询所用的时间

Sql Excel ODBC数据连接查询刷新每个查询所用的时间,sql,excel,oracle,odbc,excel-2016,Sql,Excel,Oracle,Odbc,Excel 2016,我试图测试从Excel数据连接运行的查询的三种变体 我有三个单独的数据连接和三个单独的选项卡,分别从每个连接获取数据 每个查询的连接字符串都相同,只是命令文本(Oracle SQL)不同 Excel中是否有方法查看每个查询的执行时间 我特别使用的是2016版Excel MSO 16.0.4456.1003 64位可能是这样的(假设所有连接都将其结果放在工作表中,而不是数据透视表中): 要运行此操作,请执行以下操作: Alt+F11以转到VBA编辑器 从菜单:插入模块 在窗口中粘贴代码 关闭VBA

我试图测试从Excel数据连接运行的查询的三种变体

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

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

Excel中是否有方法查看每个查询的执行时间


我特别使用的是2016版Excel MSO 16.0.4456.1003 64位

可能是这样的(假设所有连接都将其结果放在工作表中,而不是数据透视表中):

要运行此操作,请执行以下操作:

  • Alt+F11以转到VBA编辑器
  • 从菜单:插入模块
  • 在窗口中粘贴代码
  • 关闭VBA编辑器
  • Alt+F8将显示宏的列表。选择新的,然后单击运行
  • Alt+F11再次切换到VBA编辑器
  • Ctrl+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
    

    它们都放在一个工作表中,我会把它作为一个按钮添加进去,我怎样才能把它输出结果呢?1。Alt+F11以转到VBA编辑器。2.从菜单:插入模块。3.在窗口中粘贴代码。4.关闭VBA编辑器。5.Alt+F8将显示宏的列表。选择新的,然后单击运行。6.Alt+F11再次切换到VBE。7.Control+G打开包含结果的即时窗格。8.想保留宏吗?将文件另存为xlsm文件。实际上,不太有效,它给了我每次不到一秒钟的输出,我认为这是在计算开始查询的时间,而不是查询执行完毕的时间。更新后的有效。对不起,在这上面浪费了你的时间。我有没有办法把它写进一个单元格而不是直接的窗口?
    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