
Excelから直接メールを送りたいと思ったのは、岡三RSSの動作状態を操作し忘れて売買できないことが何度かあったからです。
それを防ぐためには、場が始まる前の時間帯に岡三RSSの動作状態をメールでお知らせしてくれる機能があれば便利です。
今のところうまく機能しているので、それで何度か助かりました。
それでは見ていきましょう。
岡三RSSがちゃんと動作しているか遠隔で知りたい場合
自動売買をしていると、プログラムがちゃんと動作しているのか気になる。
実のところたまに、エラーが起こってExcelマクロの動作が止まっていることがある。
岡三RSS用のExcelシートの書き方に問題があるのかもしれないが、完全なバグ取りは手間暇時間が掛かって難しい。
そこで現状では、Excelから岡三RSSの状態を定期的にメールさせることで、動作が切れていないことを確認することでよしとしている。
そこで必要になるのが、Excelから自動でメールを送る方法と、岡三RSSの接続状態を取得する方法である。
実際にやってみる
Excelからメールを送信するには 「BASP21」を使用する。
その説明は以下のリンクを参照。
要するに、「BSMTP.DLL」をダウンロードしてC:\Windows\sysWOW64フォルダにコピーして、Excel VBAでコマンドを書けばよい。
その例を以下に示す。
Private Declare PtrSafe Function SendMail Lib "bsmtp" (szServer As String, szTo As String, szFrom As String, szSubject As String, szBody As String, szFile As String) As String
Sub excel_mail()
Dim mytime As Date
Dim ordon As String '注文可能か
Dim connect As String '接続中か
Dim sStatus As String
Dim szServer As String ' SMTPサーバー名
Dim szFrom As String ' 送信元
Dim szTo As String ' 宛先
Dim szSubject As String ' 件名
Dim szBody As String ' 本文
Dim szFile As String ' 添付ファイル
mytime = TimeValue(Now())
If mytime >= TimeValue("07:00:00") And mytime <= TimeValue("07:00:07") Then
ordon = Application.CommandBars("岡三RSS2").Controls(4).TooltipText
connect = Application.CommandBars("岡三RSS2").Controls(6).TooltipText
szServer = "メールサーバー名:ポート番号" ' ←メールサーバーによって異なります
szFrom = "送信元メールアドレス" & vbTab & "ユーザーID:パスワード"
szTo = "宛先メールアドレス"
szSubject = "件名"
szBody = ordon & vbTab & connect
szFile = ""
sStatus = SendMail(szServer, szTo, szFrom, szSubject, szBody, szFile)
End If
End Sub
上の例はExcelの64bit版の例で、32bit版のExcelの場合は、「Declare PtrSafe Function」を「Declare Function」とする。
上のソースの中で「Application.CommandBars("岡三RSS2").Controls(4).TooltipText」と「Application.CommandBars("岡三RSS2").Controls(6).TooltipText」が岡三RSSの状態を取得するコマンドで、正常であればそれぞれ「注文可能」「接続中」と表示される。
逆に言うと、接続中で注文可能状態でなければ岡三RSSから株や先物の注文は実行できない。
上の例では、朝7時から7時7秒の間にメールを送信するようになっている。
Excel VBAでの自動売買の監視をたとえば5秒ごとに行うとすれば、これで朝7時から7時7秒の間に少なくとも1回はメールが送信される。
まとめ
- Excelからメールを送るのに必要なのは「BSMTP.DLL」
- Excelからメールを送るのは「SendMail」コマンド
- 岡三RSSの状態を取得するのはApplication.CommandBars("岡三RSS2").Controls(4).TooltipText コマンド
- 取得した状態をメール本文に代入して実行
これで岡三RSSの状態をメールで自分自身宛に送ることができた。