~みんな株ってる?~

~目指せ!あと5年でセミリタイヤ~   ※ブラウザのフォントを等幅にすると快適に参照ができます。

EXCELと楽天MarcketSpeedの連携

2007年11月14日 00時30分06秒 | シストレ-開発編
今まで(Windows2000+Office2000)の環境と時は、
EXCELと楽天MarcketSpeedの連携にマーケットスピードライブラリを使用していたのですが、
Vistaに変更したことにより、使えなくなりました。

使っていた機能としては↓ですが、
 rmsc.Market関数:銘柄コードを指定すると市況情報を表示する関数
 rmsc.Market関数:銘柄コードを指定すると個別チャートを表示する関数

単純に言うと、MSの見たいページに株式コードを自動で入力する関数。

代わりにVBAのsendkey関数を使用したところ、Office2000/2003のバグ(?)で
実行時エラー(70)が出るようです。
 ※詳しくはココ
色々調べましたが、Office2000での回避策は無いようです。

何とか別の機能で実現できないかを調べた結果、
VBAからWin32API(USER32.DLL)のkeybd_eventメソッドを使用することで
sendkeyの代用が出来そうだとわかりました。

こんな時間なので、枝葉の機能実装は後回しにするとして、
骨組み処理を作成してみました。

---
Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, _
  ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)

Private Const KEYEVENTF_EXTENDEDKEY As Long = &H1
Private Const KEYEVENTF_KEYUP As Long = &H2
Private Const fKEYDOWN = KEYEVENTF_EXTENDEDKEY
Private Const fKEYUP = KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP

Sub Sample()
  AppActivate "Market Speed Ver6.2"
  Call keybd_event(49, 0, 0, 0)      --数字の1を押す
  Call keybd_event(50, 0, 0, 0)      --数字の2を押す
  Call keybd_event(51, 0, 0, 0)      --数字の3を押す
  Call keybd_event(52, 0, 0, 0)      --数字の4を押す
  Call keybd_event(vbKeyReturn, 0, 0, 0)  --RETURNを押す
End Sub
---

株式コードを入力する部分は、本実装ではもう少しスマートに書くとして、
とりあえず機能的には、これでOKです。