2016-04-18 11 views
1

私はリアルタイムデータ(= Tickers!Z12)にリンクされたセル(A1)を持っています。私は5分の期間ですべての価格帯をキャプチャしたい。私の問題は、私はWorksheet_Changeメソッドを使用しようとしているが、セル(A1)が公式化されている場合、値が変更されると更新されません。私は手動で値を変更する場合は正常に動作します。私は数式によって生成されている値をキャプチャする必要がありますし、&は値が変化するたびにB列に値を貼り付けます。ここに私がこれまで持っているものがあります。リアルタイムデータをキャプチャする方法

Private Sub Worksheet_Change(ByVal Target As Range) 

Application.ScreenUpdating = False 
Application.EnableEvents = False 

If Range("A1").value <> Range("B2").value Then 
    Range("A1").Select 
    Selection.Copy 
    With ActiveSheet 
     LastRow = .Cells(.rows.Count, "B").End(xlUp).row + 1 
     .Cells(LastRow, 2).Select 
     Selection.PasteSpecial Paste:=xlPasteValues 
    End With 

End If 

Application.CutCopyMode = False 
Application.EnableEvents = True 

End Sub 
+0

は、[このスレッド](http://windowssecrets.com/forums/showthread.php/151347-Sheet-Change-Event-doesn-t-fire)の助けには何もしていますか?または[this one](http://www.ozgrid.com/forum/showthread.php?t=57855)?あなたは何を試しましたか、何が働いたのですか? – BruceWayne

+0

A1の式を再計算する原因は何ですか? – vacip

+1

何がセルチケットのデータを引き起こしています!Z12を更新するのですか?自動リフレッシュオプションを使用していますか? – David912

答えて

0

Worksheet_Calculateイベントを使用してください。

また、A1とB2を比較したいとは思っていません。ロジックでは、列Bの最後のセルと比較する必要があります。

また、Activesheetを使用することはお勧めできません。他のシートにいるときに再計算が行われる可能性があります。ランダムなワークシートの値。

さらにもう1つ:マクロ内のコピー&ペーストを使用しないでください。 .Value = .Valueとするだけです。

Private Sub Worksheet_Calculate() 

Dim lngLastRow As Long 

On Error Goto SkipAllThis 

Application.ScreenUpdating = False 
Application.EnableEvents = False 

With Worksheets("Source") 'or whatever sheet has your code and stores your values 
    lngLastRow = .Cells(.Rows.Count, 2).End(xlUp).Row 
    If .Range("A1").Value <> .Cells(lngLastRow, 2).Value Then 
    .Cells(lngLastRow + 1, 2).Value = Range("a1").Value 
    End If 
End With 

SkipAllThis: 

Application.EnableEvents = True 
Application.ScreenUpdating = True 

End Sub 
+0

リアルタイムの変更に反応せず、B列の値をすべて取り込んでいないので、B列の値を上書きするだけです。変更された値が次の空の行に取り込まれる必要があります。それは理にかなっていますか?毎回列bの最後の行に入力された値が変更されます。 – drs

+0

に変更してください。私は望みのキャプチャオーダーを達成しましたが、変更があったときに値を自動的にキャプチャすることはできません。 lngLastRow = Range( "B"&rows.Count).End(xlUp).row – drs

+0

@drs奇妙なことに、私のために互いに下の値を収集します。0_o – vacip

0

DRS、

としてスリープ機能を実装します。あなたの値をキャプチャし、その後続いて

Declaring & Calling The Sleep API

。 APIはミリ秒単位であることに注意してください。

G.

関連する問題