2017-10-23 9 views
1

おはよう 基本的に私はウェブ(abcbourse.com)からインデックスデータをインポートしており、毎分更新しています。マクロを毎分自動的に実行

各インデックスの履歴値を記録するためにマクロを作成しました(スクリーンショットで見るようにCAC40から始まり、毎分(データが自動的に更新されるたびに新しい値が列Eに表示されます) ここに私の問題は、私は、このマクロは、データが更新されるたびに実行したい、ある

Sub Historical_Index() 
    Dim LastLRow As Integer, CurrentIndexValue As Single 

    LastRow = Range("E" & Rows.Count).End(xlUp).Row 
    CurrentIndexValue = Range("B1") 

    Do 
     If Not IsEmpty(CurrentIndexValue) = True Then 
      Cells(LastRow + 1, 5).Value = CurrentIndexValue 
      Exit Do 
     End If 
    Loop 
End Sub 

enter image description here

私が最初に

を使用:(スクリーンショットの列Eを参照)うまく機能し、私のマクロです。
Private Sub Worksheet_Change(ByVal Target As Range) 
    If Target.Address = "$B$2" Then 
     Application.EnableEvents = False 
     Call Historical_Index 
     Application.EnableEvents = True 
    End If 
End Sub 

これは実際に私のマクロを呼び出すのですが、手動でB2を変更した場合に限ります。データが自動的に更新されるのを待つと、マクロは呼び出されません(データが変更されても)。

私はこのプロセスを自動化するために何をすべきか知りたいのですが、私はあなたの助けが必要です。事前に

おかげ
シモンズ:私はそれが重要なのかどうか知りませんが、私のマクロはVBAProjectの(「本ドキュメント」)に保存されている>のSheet2(のSheet2)

+0

'QueryTable'は' AfterRefresh'イベントを持っています、[here](https://msdn.microsoft.com/en-us/vba/excel-vba/articles/querytable-afterrefresh-event-excel)そのイベントをキャプチャし、ハンドラを使用してマクロをトリガするクラスです。 –

答えて

0

はについては、以下を試してみてください範囲B1:B8:

Private Sub Worksheet_Change(ByVal Target As Range) 
    If Not Intersect(Target, Sheet1.Range("B1:B8")) Is Nothing Then 
     Application.EnableEvents = False 
     Call Historical_Index 
     Application.EnableEvents = True 
    End If 
End Sub 

またはあなただけB2をチェックしたい場合:

Private Sub Worksheet_Change(ByVal Target As Range) 
    If Not Intersect(Target, Sheet1.Range("B2")) Is Nothing Then 
     Application.EnableEvents = False 
     Call Historical_Index 
     Application.EnableEvents = True 
    End If 
End Sub 
+0

Nikolaos Polygenis>私はB1専用のコードを試しましたが、これはうまくいくようです。 – Sylvain

+0

ありがとうございます – Sylvain

+0

私の答えを受け入れるpls! –

関連する問題