2017-10-01 2 views
0

これは共通の目的だと思われますが、私と同じ問題を抱えている人はいません。私は交換所から価格を記録しようとしていますが、価格は交換所からExcel文書に自動的に更新されます。VBAを使用してライブの価格データをコピーし、元の値をストリームで更新しないでコピーする

ソースデータをフィルタリングするルックアップ(単純にvlookups)からコピー&ペーストするためのコードを書きました。これが実行されると、ルックアップ内にある新しい値はコピーされません。最初のループで見た元の値を引き続き使用し、新しい行ごとに情報を複製します。元のデータにこだわらず、ループの各繰り返しで更新されないようです。

誰かが何か不足していることについて助言できますか?

Sub Copying() 

Dim lRow As Long 

For lRow = 2 To 13000 
    ActiveWorkbook.RefreshAll 
    Application.CutCopyMode = False 
    Sheets("Bet Angel").Calculate 
    Sheets("Data Pull").Calculate 
    Sheets("Data Pull").Select 
    Range("A2:Q2").Select 
    Selection.Copy 
    Sheets("Data").Select 
    Range("A" & lRow).Select 
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
:=False, Transpose:=False 
    Application.Wait (Now + TimeValue("0:00:01")) 
    Sheets("Data").Select 
    Range("A" & lRow).Select 
    Application.CutCopyMode = False 
Next lRow 

End Subのマクロレコーダーフラグメントなし。ここ

+0

'.Calculate'は何ですか? '' Data Pull''から範囲( "A2:Q2")をコピーし、 'Data'に貼り付けます。 '.Calculation'が範囲内のデータを変更しない場合は、常に同じデータをコピーします。' Don use'.Select '/' .Selection'、[how-to-avoid-using-select-in-excel -vba](https://stackoverflow.com/questions/10714251/how-to-avoid-using-select-in-excel-vba) – BitAccesser

+0

実行時間を予測しましたか? 1秒待機+他のコード実行による12999回の反復)> 12999秒、3.5時間以上! – BitAccesser

答えて

0

クリーンアップ機能:この機能はありません更新されたデータの問題を解決することはできません

Sub Copying() 

Dim lRow As Long 

With ThisWorkbook 'reference to workbook 
    For lRow = 2 To 13000 
     .RefreshAll 'Maybe useless, are there backgroundqueries to refresh on every iteration? 
     'Application.CutCopyMode = False 'useless fragment from marco recorder, like .Select/.Selected 
     .Sheets("Bet Angel").Calculate 
     .Sheets("Data Pull").Calculate 
     .Sheets("Data Pull").Range("A2:Q2").Copy .Sheets("Data").Range("A" & lRow) ' copy by code not by simulating useraction 
     'Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
    :=False, Transpose:=False 
     'Application.Wait (Now + TimeValue("0:00:01")) 'useless without .PasteSpecial unless you need wasteing time 
     ''Sheets(2).Select 'useless 
     'Range("A" & lRow).Select 'useless 
     'Application.CutCopyMode = False 'useless 
    Next lRow 
End With 

End Sub 

が、高速の照明コピー、あなたの古いコードと比較して;-)

この回答を参考にしてデータを更新してください。

なぜApplication.CutCopyModeが役に立たないのですか?

関連する問題