Board logo

標題: EXCEL+DDE [打印本頁]

作者: hmc667888    時間: 2011-7-24 23:04     標題: EXCEL+DDE

大家好,

我想每天改變投資組合成份股,再把自動把股要代號結合成券商的DDE公式,這樣就不用逐一去修改,
請各位幫忙看能不能達成。謝謝。

股票名稱        收盤價        成交量        市價
1516川飛        2.21        161        =DDEEXCEL|CSTOCK1516!市價
6192巨路        85.6        3,591        =DDEEXCEL|CSTOCK6192!市價
2910統領        31.7        233        =DDEEXCEL|CSTOCK2910!市價
2358美格        12        659        =DDEEXCEL|CSTOCK2358!市價

例如︰
1516川飛 D2=DDEEXCEL|CSTOCK1516!市價
A橺1516川飛包含股票代號和名稱,有些代號是6位數,名稱是2~3位中文字
作者: GBKEE    時間: 2011-7-25 08:37

本帖最後由 GBKEE 於 2011-7-26 06:27 編輯

回復 1# hmc667888

自訂函數
請將程式碼 貼於 一般模組 (Module1.)
  1. Function 收盤價(股票 As Range)
  2.     Dim i As Integer
  3.     For i = 1 To Len(股票)
  4.         If Mid(股票, i, 1) Like "[!0-9]" Then
  5.             收盤價 = Application.Evaluate("DDEEXCEL|CSTOCK" & Mid(股票, 1, i - 1) & "!收盤價")
  6.             Exit Function
  7.         End If
  8.     Next
  9.     收盤價 = 股票 & " 沒有代號!!"
  10. End Function
  11. Function 成交量(股票 As Range)
  12.     Dim i As Integer
  13.     For i = 1 To Len(股票)
  14.         If Mid(股票, i, 1) Like "[!0-9]" Then
  15.             成交量 = Application.Evaluate("DDEEXCEL|CSTOCK" & Mid(股票, 1, i - 1) & "!成交量")
  16.             Exit Function
  17.         End If
  18.     Next
  19.     成交量 = 股票 & " 沒有代號!!"
  20. End Function
  21. Function 市價(股票 As Range)
  22.     Dim i As Integer
  23.     For i = 1 To Len(股票)
  24.         If Mid(股票, i, 1) Like "[!0-9]" Then
  25.             市價 = Application.Evaluate("DDEEXCEL|CSTOCK" & Mid(股票, 1, i - 1) & "!市價")
  26.             Exit Function
  27.         End If
  28.     Next
  29.     市價 = 股票 & " 沒有代號!!"
  30. End Function
複製代碼
如圖可於工作表插入所寫的自訂函數.
[attach]7132[/attach]
作者: hmc667888    時間: 2011-7-25 21:04

版主謝謝你。
結果都呈現#VALUE!,
另外"股票"的範圍要另外定義名稱或可以寫入程式。
作者: GBKEE    時間: 2011-7-26 06:34

回復 3# hmc667888
傳上你的檔案看看
作者: hmc667888    時間: 2011-7-26 09:14

回復 4# GBKEE

我先將"股票"定義名稱,並加入linkchange,
已經可以出來,但有點慢,也不太順,有没有可以改進的空間,還請大大幫忙。
"股票"定義名稱可以寫入VBA中嗎?
作者: GBKEE    時間: 2011-7-26 10:07

回復 5# hmc667888
但有點慢,也不太順    可能是檔案使用的函數計算量太大
可用巨集錄製是看看
  1. Sub Macro1()
  2. '
  3. ' Macro1 Macro
  4. '
  5.     Range("A2:A16").Select
  6.     ActiveWorkbook.Names.Add Name:="股票", RefersToR1C1:="=sheet1!R2C1:R16C1"
  7.    
  8. End Sub
複製代碼





歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)