2016-10-07 26 views
0

私は、大量のマクロを構築して、Excelに書き込むライブデータフィードを解析しました。マクロ自体はWorksheet_Changeイベントからアクティブ化されます。計画は、変化するデータをオフィスの壁のテレビに表示することで、リアルタイムで発生していることを認識しています。自動スクロールExcelデータ

私が苦労している問題は、このマクロが毎秒数回、数分に1回という速さで実行できることです。誰かがExcelシートをスクロールしなくても見えるようにこのデータを表示するにはどうすればいいですか?すべてのT(x)を落とす。もしそれがもっとT(15m)だったらそれはそれほど問題にはならないだろうが、それがT(1)である可能性があり、それはあまり実行可能ではない。私はGoogleだけでなくスタックのコミュニティを検索し、これに似た問題は見つけられません。何かご意見は?

**データは行単位でフィードされるので、Excelはスクロールダウンする必要があります。シートに

ワークシートの変更イベント

Option Explicit 

Private Sub Worksheet_Change(ByVal target As Range) 

    If target.Rows(1).Cells.Count = 18 Then 

     On Error GoTo bm_Safe_Exit 

     'Turn off event handling so if anything is changed, sub procedure will not be triggered 
     Application.EnableEvents = False 

     Dim initialTradeStructure As String, finalTradeStructure As String, rawStructure As String 
     Dim nonLiveBlock As Boolean 

     Select Case LCase(target.Cells(1, 3).Value2) 

      'RFQs 
      Case "requestforquote" 

       'Do Nothing....no analysis of RFQs is necessary....will be filtered later 

      'Screen Trades 
      Case "globextrades" 

       rawStructure = target.Item(1, 2) 

       initialTradeStructure = Right(rawStructure, Len(rawStructure) - 4) 

       'Bulk of analaysis conducted in analsyis engine to keep worksheet code clean/short 
       finalTradeStructure = OptionStructureAnalysisEngine(initialTradeStructure, target) 

      'Block screen represented as Multileg in datafeed structure 
      Case "block" 

       If UCase(target.Item(1, 17).Text) = "TRUE" Then 

        nonLiveBlock = True 

        rawStructure = target.Item(1, 2) 

        initialTradeStructure = Right(rawStructure, Len(rawStructure) - 4) 

        'Bulk of analysis conducted in analysis engine to keep worksheet code clean/short 
        finalTradeStructure = OptionStructureAnalysisEngine(initialTradeStructure, target) 

       ElseIf UCase(target.Item(1, 17).Text) = "FALSE" And UCase(target.Item(1, 16).Text) = "FALSE" Then 

        'Live block trade 
        rawStructure = target.Item(1, 2) 

        initialTradeStructure = Right(rawStructure, Len(rawStructure) - 4) 

        finalTradeStructure = OptionStructureAnalysisEngine(initialTradeStructure, target) 

       Else 

        'Do Nothing....No analysis of single block legs is necessary 

       End If 

      End Select 

     If Not finalTradeStructure = "Nothing" And Not finalTradeStructure = "" Then 

      finalTradeStructure = finalTradeStructure & " | Trades " & target.Item(1, 9).Value2 & " " & "| " & target.Item(1, 10).Value2 & "x" 

      WTIAmericanOptionData.Cells(target.Row, 1) = finalTradeStructure 

     End If 
    End If 

bm_Safe_Exit: 
    Application.EnableEvents = True 

End Sub 


Private Sub ToggleEventHandler() 

    Application.EnableEvents = True 

End Sub 
+1

さて、新しいデータ行を一番上に挿入して、スクロールするのを避けることができます。 – CyberClaw

答えて

3
ActiveWindow.ScrollRow = target.Row 

私はあなたが最後に到達するときに何が起こるか、しかし好奇心?

+1

申し訳ありませんが、私はこのデータをどのように表示して誰かがExcelシートをスクロールしなくても見えるようにするにはどうすればいいのかと考えました。私の答えは単純に 'ActiveWindow.ScrollRow = target.Row'で、終了時に何が起こるかを尋ねていますか?しかし、明らかに私たちの一人がこの疑問を誤解していました。ご意見をいただきありがとうございます。 –

+0

'Target.Activate'も機能します。 – Comintern

+0

はい、選択しますが、選択します。もし彼が1秒以下の速さで動いているなら、あなたは何かを選んで移動したくない。 –