Excel VBA在单元格中打印即时窗口的结果

Excel VBA在单元格中打印即时窗口的结果,vba,excel,Vba,Excel,我有一个宏,它计算每个查询运行所需的时间,并将时间输出到即时窗口 有没有办法将其设置为输出到单元格 宏: 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).ListObj

我有一个宏,它计算每个查询运行所需的时间,并将时间输出到即时窗口

有没有办法将其设置为输出到单元格

宏:

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
即时窗口输出:

 6.609375     Query1        [YEtest.xlsm]Query1!$A$1:$S$3006
 15.12109375  Query2        [YEtest.xlsm]Query2!$A$1:$S$3006
 21.0703125   Query3        [YEtest.xlsm]Query3!$A$1:$S$3006
 0.125        Query4        [YEtest.xlsm]Query4!$A$1:$B$2
我希望将其输出到的选项卡名称:
控件

这应该可以:

Sub TimeQueries()
    Dim oSh As Worksheet
    Dim oCn As WorkbookConnection
    Dim dTime As Double

    'define first output range
    Dim rng as Range
    Set rng = ThisWorkbook.Worksheets("Control").Range("A1:C1") 'change as necessary

    For Each oCn In ThisWorkbook.Connections
        dTime = Timer
        oCn.Ranges(1).ListObject.QueryTable.Refresh False

        'output to defined range and then redefine rng to the row below
        rng.Value = Array(Timer - dTime, oCn.Name, oCn.Ranges(1).Address (external:=True))
        Set rng = rng.Offset(1,0)
    Next
End Sub

只需将
oSh
设置为工作表引用,并使用
单元格
集合输出所需内容:

Sub TimeQueries()
    Dim oSh As Worksheet
    Dim oCn As WorkbookConnection
    Dim dTime As Double
    Dim lngCounter As Long

    'set a worksheet reference - e.g. Sheet1
    Set oSh = ThisWorkbook.Worksheets("Control")

    'initialise counter
    lngCounter = 1
    For Each oCn In ThisWorkbook.Connections
        dTime = Timer
        oCn.Ranges(1).ListObject.QueryTable.Refresh False

        'set output to cells on the worksheet
        oSh.Cells(lngCounter, 1).Value = Timer - dTime
        oSh.Cells(lngCounter, 2).Value = oCn.Name
        oSh.Cells(lngCounter, 3).Value = oCn.Ranges(1).Address(external:=True)
        lngCounter = lngCounter + 1

        'Debug.Print Timer - dTime, oCn.Name, oCn.Ranges(1).Address(external:=True)
    Next
End Sub
Sub TimeQueries()
    Dim oSh As Worksheet
    Dim oCn As WorkbookConnection
    Dim dTime As Double
    Dim rw As Long

    rw = 1
    For Each oCn In ThisWorkbook.Connections
        rw = rw + 1
        dTime = Timer
        oCn.Ranges(1).ListObject.QueryTable.Refresh False
        With Sheets("Control")
            .Cells(rw, 1) = Timer - dTime
            .Cells(rw, 2) = oCn.Name
            .Cells(rw, 3) = oCn.Ranges(1).Address(external:=True)
        End With
    Next
End Sub