2017-03-24 13 views
3

各クエリの実行時間と即時ウィンドウへの出力時間を指定するマクロがあります。Excel VBAのセル内での直接ウィンドウの結果の出力

私はそこにセルに出力するように設定する方法はありますか?

マクロ:

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 

タブ名は、私が欲しい、それを出力する:Control

答えて

2

だけでSEをあなたが欲しいものを出力するCellsコレクションをワークシートの参照にT 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 
+0

これは私のために働きました。 – Matt

1

これは動作するはずです:

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 
2
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 
関連する問題