2013-09-23 3 views
0

이미 Application.OnTime, 을 사용하여 구현하기 전에 셀 내에서 진행 상황을 확인하는 방법에 대한 몇 가지 예를 살펴 보았습니다. 왜 그것이 작동하지 않을지 모르겠다. 통합 문서 내의 하위를 보는 것보다 더 혼란 스럽기 때문에 모든 것을 여기에 붙여 넣으 려하지 않습니다.많은 양의 BDH 셀 참조를 사용하여 블룸버그 시간 지연 구현

이런 종류의 경험이있는 사람이 내 코드를보고 싶어하는지 궁금합니다. 내가 할 수있는 파일은 내가 일하고있는 파일이다.

다음은 셸 시트에 데이터를로드하는 방법입니다. 이상적으로 데이터는 pattern_recogADR 하위가 실행되기 전에 모두로드됩니다. 그렇지 않으면 오류가 있습니다.

Sub build_singleEquity() 

'x As Long 

Dim x As Long 
x = 6 


'Dim x As Long 
'x = 4 

Application.ScreenUpdating = False 
Call DefineTixCollection 'creates table of inputs 
'check 
'Debug.Print TixCollection(4).ORD 

'set up data points - from "Input" sheet 
'Dim x As Long 
'Dim path As String 
'path = Sheets("Input").Range("V1").value 

'For x = 1 To TixCollection.Count 

    Sheets("SingleEquityHistoryHedge").Activate 

    'clear inputs 
    Range("B2:B8").Clear 

    Dim Inputs() As Variant 
    Dim name As String 

    name = "SingleEquityHistoryHedge" 

    'insert new inputs 

     Inputs = Array(TixCollection(x).ADR, TixCollection(x).ORD, TixCollection(x).ratio, _ 
     TixCollection(x).crrncy, TixCollection(x).hedge_index, TixCollection(x).hedge_ord, _ 
     TixCollection(x).hedge_ratio) 
     Call PrintArray(2, 2, Inputs, name, "yes") ' prints inputs 

    Dim last_row As Long 
    last_row = Range("A" & Rows.count).End(xlUp).Row 

    Range("AN11") = "USD" & TixCollection(x).crrncy 
    Range("AA11") = "USD" & TixCollection(x).crrncy 

' Dim sht_name As String 

'Application.Run "RefreshAllStaticData" 

BloombergUI.ThisWorkbook.RefreshAll 

' sht_name = TixCollection(x).ADR 

    ' Call Sheet_SaveAs(path, sht_name, "SingleEquityHistoryHedge") 'save collection of sheets 

'Next x 

'Call TriggerCalc 



'check this out 
Call pattern_recogADR(x + 4, 5, 13) 


End Sub 

다음은 내가 주석 처리되어 다른 일의 톤을 시도 볼 수 .... pattern_recogADR 하위입니다.

Sub pattern_recogADR(pos As Long, pat_days As Long, sht_start As Long) 

' 

'Application.Wait Now + "00:00:20" 

'Dim pat As pattern 

'Dim tix As clsTix 

Dim newTime As Date 
newTime = Now + TimeValue("00:00:30") 

Do While Not Now >= newTime 
'add back in as parameters 
'Dim pos As Long 
Dim x As Long 
'Dim pat_days As Long 
'Dim sht_start As Long 
'************************ 
'pos = 5 
'pat_days = 5 
'sht_start = 13 

Sheets("SingleEquityHistoryHedge").Activate 
'Sleep 20000 'sleeps 


Dim st As Long 
Dim st_num As Long 
Dim st_end As Long 
Dim count As Long 
Dim patrn As Long 


count = sht_start 

Dim i As Long 
Dim j As Long 
Dim patPLUSret() As Variant 
Dim k As Long 
Dim z As Long 


k = 2 
z = 3 

For j = 8 To 12 


'************************************** 
    count = sht_start 
    st_num = sht_start 
    st_end = 13 


     If IsNumeric(Cells(count, j).value) Then 
       'sets default pattern to beginning cell value 

       ' Debug.Print st_num 


       If Cells(st_num, j).value < 0 Then 
        For i = count + 1 To count + 1 + pat_days 
         If IsNumeric(Cells(i, j).value) Then 
          If Cells(i, j).value < 0 Then 
          st_end = i 
          'Debug.Print st_end 
          End If 
         Else 
          Exit For 


         End If 
        Next i 

         patrn = st_end - st_num 

         ' Debug.Print count 
         ' Debug.Print patrn 

         ReDim Preserve patPLUSret(k * 2 + 1) 
         patPLUSret(0) = Range("B2").value 'ADR 
         patPLUSret(1) = Range("B3").value 'ORD 
         patPLUSret(k) = patrn 
         patPLUSret(z) = Application.WorksheetFunction.Average(Range(Cells(st_num, j), Cells(st_end, j))) 

        ' Debug.Print patPLUSret(j) 
        ' Debug.Print patPLUSret(j + 1) 

         st_num = sht_start 'resets starting point to initial 
         st_end = sht_start 



         ' For x = 4 To 6 
         '  If Range("L" & x).value = "x" Then 
         '  ReDim Preserve mac_array(x - 4) 
         '  mac_array(x - 4) = Range("N" & x).value 
         '  End If 
         ' Next x 


         ' check this out 
         'tix.arbPnl = patrn 
         'save to separate class for patterns 
         'TixCollection.Add tix, tix.ADR 
         '****************************** 


       ElseIf Cells(st_num, j).value > 0 Then 
        For i = count + 1 To count + 1 + pat_days 
         If IsNumeric(Cells(i, j).value) Then 
          If Cells(i, j).value > 0 Then 
           st_end = i 
          End If 
         Else 
          st_end = st_num 
          Exit For 
         End If 
        Next i 

         patrn = st_end - st_num 

         ReDim Preserve patPLUSret(k * 2 + 1) 
         patPLUSret(0) = Range("B2").value 'ADR 
         patPLUSret(1) = Range("B3").value 'ORD 
         patPLUSret(k) = patrn 
         patPLUSret(z) = Application.WorksheetFunction.Average(Range(Cells(st_num, j), Cells(st_end, j))) 

         ' Debug.Print patPLUSret(j) 
         ' Debug.Print patPLUSret(j + 1) 


         st_num = sht_start 'resets starting point to initial 
         st_end = sht_start 

         ' Debug.Print patrn 

         'pat.arbPnl = patrn 
         'save to separate class for patterns 
       End If 


       k = k + 2 
       z = z + 2 
     Else 
      count = count + 1 
      st_num = count 
     End If 

    ' 
    ' k = k + 1 

     'new_array = patPLUSret 


Next j 

    ' Debug.Print patPLUSret 

    Sheets("PatternADR_ORD").Activate 
    Range(Cells(pos, 1), Cells(pos, 10)) = patPLUSret 


Loop 


End Sub 
+0

가장 좋은 방법은 작동하지 않는 것을 보여주는 최소한의 작업 예제를 게시하는 것입니다. – enderland

+0

안녕하세요 enderland 메신저 내 코드를 여기에 게시 할 .... 거기에 두 가지 방법을 사용합니다 – googlekid

+0

현재 나는 타이머 동안 루프를 할했지만 ... 그것은 아무것도하지 않는 것 같습니다 – googlekid

답변

0

당신이 당신의 제 2 서브에서 대기를 시뮬레이션하기 위해 기다리거나 루프 경우, 다시 스프레드 시트 컨트롤을 제공하지 않습니다 및 수식이 업데이트되지 않습니다. 대신

Call pattern_recogADR(x + 4, 5, 13) 

는 왜 전화를하지 않습니다

Application.onTime "'pattern_recogADR ""x + 4"", ""5"", ""13""'"