2016年06月20日 (月) | Edit |

タイトルの通りのものを作ったので公開します。
週末に新調したMY発注システムの一部です。
これだけでは全く何の役にも立たないと思いますが、正規表現を使ってWebからデータを取る、という事をしているので、マクロでそういう事をしたいという場合のご参考になれば(^^)

こんな画面です(^^;
dow.png

ダウンロードはこちら

もしバグ等おかしなところがあれば教えてくださいm(_ _)m

※6/21追記
・セルの書式設定がおかしかったのを直しました。
・元のWebページのほうに日付でなく時刻が表示されている場合(向こうの場中)は、日付欄に変な値が表示されますが仕様です(^^;

ダウンロード数のカウントとかしてないんで、
代わりに↓良ければポチしてくださいませ(^^)


にほんブログ村 株ブログ 株日記へ

広告
2016年02月11日 (木) | Edit |

相場が大荒れのこんな時になんですが、、
以前全シ連に出てきた緊急手仕舞いボタンをExcelで作ってみました。
使いたいときに運よくPCの前に座っていられるのかという問題もありますが、、、VBAのサンプルにでもなれば。

ダウンロードはこちら

このツールによって不利益が生じたり何が起こっても一切責任は負いませんのでご了承のうえダウンロードしてください。

・ボタンを押すと、取消し可能な注文は全て取消し、返済可能な建玉は全て成行で返済注文をだします。
・証券会社はSMBC日興証券とライブスター証券
・信用取引のみ

バグ等みつけたら報告いただけると嬉しいです。
ちなみに全シ連のこちらの回に感化されて公開することにしましたので、なんか情報プリーズ(笑)

2016.3.6追記
リンク切れになっていたのをなおしました。


にほんブログ村 株ブログ 株日記へ

広告
2016年01月16日 (土) | Edit |

マクロでハマッたので、誰か同じ事象になってしまった方のお役に立てばというのと、もっとエレガントな方法があれば教えてほしいのと、備忘のために記録しておきます。

■環境
・windows7+ie11+Excel2010
・windows10+ie11+Excel2010
(どちらでも発生)
たぶん環境の問題だと思うのでほとんどの方は発生しないかも。

■現象
とある特定のURLへ遷移(navigate)後、ページ内のリンクから取得したURLへ遷移(navigate)しようとすると、待ち合わせ処理のobjIE.readyStateがずっと1(READYSTATE_LOADING)が返ってきて読み込み終了できない。


Dim href As String
Dim objIE As Object

'IE Create Object
Set objIE = CreateObject("InternetExplorer.application")

objIE.Navigate ("http://xxxxxx/") 'url1
Call fncWait(objIE)
href = objIE.document.Links(0).href

objIE.Navigate (href) 'url2
Call fncWait(objIE) ←ここで止まる

'ブラウザのページ読み込み待ち
Function fncWait(objIE As Object) As Boolean
fncWait = False

Dim timeOut
timeOut = Now + TimeSerial(0, 0, 1) '1秒待ち

Do While objIE.Busy = True Or objIE.readyState <> 4
Sleep 100 ↑ずっと1なので無限ループ
DoEvents
If Now > timeOut Then
Exit Function 'タイムアウト
End If
Loop
Do While objIE.document.readyState <> "complete"
Sleep 100
DoEvents
If Now > timeOut Then
Exit Function
End If
Loop

fncWait = True
End Function

ちなみに
・url1とurl2の間にブレークポイントを設定して、一度でも止めると上手くいく。
・url1とurl2の間にMsgBoxで何か表示してOKを押せば上手くいく。
・url2の読み込み待ち処理がタイムアウトした後に再度url2を読み込み(navigate)すると処理上は上手くいく(次のページへ遷移してページデータの取得も出来る)が、IE画面の見た目上は全く動かずポカーンとした画面が残ってしまう。Quitもできない。
これでは実用できない。。

■対処
特定のURLだけなので、いったんブラウザを閉じることにした。

Dim href As String
Dim objIE As Object
Dim objIEDummy As Object

'IE Create Object
Set objIE = CreateObject("InternetExplorer.application")
Set objIEDummy = CreateObject("InternetExplorer.application")

objIEDummy.Navigate ("http://xxxxxx/")
Call fncWait(objIEDummy)
href = objIEDummy.document.Links(0).href
objIEDummy.Quit '閉じる

objIE.Navigate (href)
Call fncWait(objIE) 


遷移の前後でVisibleをいじったら上手くいった。(1/17訂正・追記)

Dim href As String
Dim objIE As Object

'IE Create Object
Set objIE = CreateObject("InternetExplorer.application")
 objIE.Visible = True

objIE.Navigate ("http://xxxxxx/")
Call fncWait(objIE)
href = objIE.document.Links(0).href

objIE.Visible = False
objIE.Navigate (href)
objIE.Visible = True
Call fncWait(objIE) 

あまり良い対処ではないけど。。。ひとまずこれが一番マシな対処か。(良い知恵をお持ちの方いましたら教えてください)

■やったこと
windows7+ie11+Excel2010
・sleepを長く(効果なし)
・waitを入れる(効果なし)
・タイマーを入れる(効果なし)
・ieを10にダウングレード(上手くいった)

ie10でしばらく運用したもののマイクロソフトがie10のサポートをやめるというのでやっぱりie11にすることに。
ここでie11へのアップデートが上手くいかない(「9C59」エラー)問題が発生。
こちらのページを参考にwindows updateを1つずつ削除すれば出来そうな気がしたけど面倒くさすぎるので、思い切ってwindows10にアップグレードした(デフォルトでie11がインストールされている)。

windows10+ie11+Excel2010で、とりあえず上記の対処で動くようになった。

ワンクリック一括発注支援シート(マクロ非公開)では何の問題もなく動いているようなので、たぶん何か回避方法があるorそもそも私の書き方が悪いんだと思う。マクロについて聞いてみたいけどさすがにこれはサポートの範囲外だよな。。と自粛。


にほんブログ村 株ブログ 株日記へ

広告