2011-03-29 51 views
1

我有一個工作表,可以自動更新現場股票價格數據。目前我們有一個非常複雜的解決方案,定期複製到剪貼板並從那裏操作數據。有沒有辦法從Excel自動導出數據?

每當檢測到價格變化時,是否可以自動將數據導出爲CSV?我猜它會涉及VBA。

+0

是否通過DDE更新股票價格? – 2011-03-29 22:30:59

+1

我會小心一些依賴於「每個價格」的東西。讓自己忙碌的股票或多股股票,突然你的Excel應用程序不斷忙碌,對用戶輸入沒有反應。我不能100%確定Excel事件是否能夠抓住股票價格更新(我永遠不會記得彭博社/路透社是否與Excel平臺相當公平)。定期更新是最安全的。 – 2011-03-30 08:30:11

回答

1

您可以將excel文件視爲數據源,您可以查詢它。 查看谷歌搜索結果:http://www.google.ro/#sclient=psy&hl=ro&q=excel+data+source+sql+query&aq=0&aqi=g1&aql=&oq=&pbx=1&fp=b0efac6ab816e29b

我將盡力爲您找到具體的文章。

+0

例如,嘗試通過ODBC訪問Excel:http://www.oraxcel.com/projects/sqlxl/help/techniques/odbc_data_source_administrator/。設置完數據源後,您只需創建一個簡單的應用程序/服務即可使用便捷的SQL語言查詢xls數據源 – Adi 2011-03-29 21:21:33

0

我建議以下策略:

  • 火了你的工作表,並切換到「設計模式」
  • 右鍵單擊該更新的股票信息按鈕,並嘗試找出哪個宏按鈕勢必
  • 打開VBA編輯器(ALT + F11)
  • 選擇 「工作簿」 -section
  • 從那裏選擇 「打開」 事件/法
  • 寫與調用上述週期性和編程方式的excel表保存爲CSV

的代碼會是這樣的財產以後(不能檢查它作爲我沒有宏延遲一個簡單的循環現在訪問excel):

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) 

Public Sub Workbook_open() 
    Do While True 

    Call name_of_macro() 
    ActiveWorkbook.SaveAs Filename:= _ 
    "c:\path/to/file.csv", FileFormat:=xlCSV _ 
    , CreateBackup:=False 
    Sleep 10000 'Sleep 10 seconds 

    Loop 
End Sub 

本示例僅用於顯示粗略解決方案。正如Jean-Francois指出的,這段代碼在每次檢測到變化時都不會更新,即使數據仍然相同,它也會每10秒更新一次。

+0

請注意,這不會「每次檢測到價格變化時自動將數據導出到CSV」,而是無論價格如何變化,每(10秒鐘+ name_of_macro()'執行時間)。 – 2011-03-30 08:09:45

+0

@ Jean-Francois:的確,我需要更精確一些。我只是想給deltanovember一個指針。 – 2011-03-30 08:14:55

+0

夠公平的,我只想讓@deltanovember知道 – 2011-03-30 08:25:47

0

這將這樣的伎倆:

Sub LoadNewValuesAndCheckForChange() 

    Dim rngMyValues As Range 
    Dim varBefore As Variant 
    Dim varAfter As Variant 
    Dim iRow As Long 
    Dim iCol As Long 
    Dim booValuesHaveChanged As Boolean 

    Set rngMyValues = Range("B4:D9") ' Or wherever your data is 

    varBefore = rngMyValues ' Save old values in an array 

    ' Call the function that loads your new stock prices here... 

    varAfter = rngMyValues ' Get new values 

    ' Loop through all cells to see if anything has changed. 
    booValuesHaveChanged = False 
    For iRow = LBound(varBefore, 1) To UBound(varBefore, 1) 
     For iCol = LBound(varBefore, 21) To UBound(varBefore, 21) 
      If Not varAfter(iRow, iCol) = varBefore(iRow, iCol) Then 
       ' Change detected! 
       booValuesHaveChanged = True 
      End If 
     Next iCol 
    Next iRow 

    If booValuesHaveChanged Then 
     ' Save .csv file with timestamp in filename 
     ActiveWorksheet.SaveAs _ 
      Filename:="c:\myfile" & Format(Now, "yyyymmddhhnnss") & ".csv", _ 
      FileFormat:=xlCSV 
    End If 

End Sub 
0

您可以使用Application.OnTime建立一個函數被調用定期。

以下函數每30秒被Excel調用一次。要麼一次調用它來啓動計劃,要麼在工作表打開時將Application.OnTime設置爲一次,以使其運行。

Public Sub DoExport() 

    ' do your export to CSV logic here 
    Application.OnTime Now + TimeValue("00:00:30"), "DoExport" 

End Sub 
相關問題