この場合、あるサイトのページを最小化してもカーソル下のデーターを取得するにはどのようにすれば良いでしょうか。
あるいは、あるサイトをバックグランドで動かして、そのページからテキストデーターを取る方法があるでしょうか。
宜しくお願い致します。
取ったデータをどう表示したいのかが分かりませんが、
今回の内容だと UWSC を使わなくともEXCEL だけでできそうな気がします。
Web からのデータ取得はフォームやタグから位置を特定して値をとるのが定石です。
今回の場合スポットには id="spot" が付いていますから、getElementByID で取得
出来ます。
VBAでスポット値をとるサンプルです。
Sub Sample() MsgBox GetSpotValue() End Sub Function GetSpotValue() Dim ie As Object Set ie = CreateObject("InternetExplorer.Application") ie.navigate "https://www.binary.com/d/trade.cgi?l=JA" Do While ie.Busy Or ie.ReadyState < 4 DoEvents Loop GetSpotValue = ie.Document.getElementById("spot").innerText ie.Quit End Function
5分ごとにセルを更新するなら OnTime で記録する処理を呼び出せばこんな感じで
できるでしょうか。
http://officetanaka.net/excel/vba/tips/tips114.htm
Sub StartUpdate() Dim sp sp = GetSpotValue() Range("A1").Value = Now() Range("B1").Value = sp Range("C1").Value = sp Range("D1").Value = sp Range("E1").Value = sp Application.OnTime Application.Ceiling(Now, TimeValue("00:05:00")), "UpdateSpot" End Sub Sub StopUpdate() Application.OnTime Application.Ceiling(Now, TimeValue("00:05:00")), "UpdateSpot",,False End Sub Sub UpdateSpot() Dim sp sp = GetSpotValue() Range("A1").Value = Now() If sp > Range("C1").Value Then Range("C1").Value = sp If sp < Range("D1").Value Then Range("D1").Value = sp Range("E1").Value = sp Application.OnTime Application.Ceiling(Now + TimeValue("00:00:01"), TimeValue("00:05:00")), "UpdateSpot" End Sub Function GetSpotValue() Dim ie As Object Set ie = CreateObject("InternetExplorer.Application") ie.navigate "https://www.binary.com/d/trade.cgi?l=JA" Do While ie.Busy Or ie.ReadyState < 4 DoEvents Loop GetSpotValue = ie.Document.getElementById("spot").innerText ie.Quit End Function
IE の更新自体それほど高速ではないので、秒単位の処理はあまり意味がないと
思いますが、もともと EXCEL で何かしらの処理をしているようですから、
そこに組み込んだ方が効率がよさそうな気がします。
期待通り動くかどうかわかりませんが、毎秒のコード例です。
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) '//---------------------------- Sub UpdatingSpot() '//---------------------------- Dim ie As Object Set ie = CreateObject("InternetExplorer.Application") Dim sp As Double With Worksheets("Sheet1") MsgBox "終了するときは A2 を消去してください。" .Range("A2").Value = "更新中" .Activate .Range("A2").Activate .Range("A1").NumberFormat = "hh:mm:ss" sp = GetSpotValue(ie, "https://www.binary.com/d/trade.cgi?l=JA") .Range("A1").Value = Now() .Range("B1").Value = sp .Range("C1").Value = sp .Range("D1").Value = sp .Range("E1").Value = sp Do While .Range("A2").Value <> "" Sleep 1000 '// msec sp = GetSpotValue(ie, "") ' sp = GetSpotValue(ie, "REFRESH") '// 毎回再読み込みするときは "REFRESH" を指定 .Range("A1").Value = Now() If sp > .Range("C1").Value Then .Range("C1").Value = sp If sp < .Range("D1").Value Then .Range("D1").Value = sp .Range("E1").Value = sp DoEvents DoEvents DoEvents Loop End With ie.Quit End Sub '//---------------------------- Function GetSpotValue(ie, URL As String) '//---------------------------- Select Case UCase(URL) Case "REFRESH": ie.refresh Case "": Case Else ie.navigate URL End Select ie.visible = False Do While ie.Busy Or ie.ReadyState < 4 DoEvents Loop GetSpotValue = ie.Document.getElementById("spot").innerText End Function
http://www.uwsc.info/sample.html
ここにあるサンプルが役に立ちます。
// IE上に表示されている文字 「です」を 「だす」に書き換える、カラーも変更 #n62 IE = GETACTIVEOLEOBJ("InternetExplorer.Application") s = IEGETSRC(IE, "body") s = Replace(s, "です", "<font color='#FFFFFF' style='background-color:#996633'>だす</font>") IESETSRC(IE, s, "body")
s = IEGETSRC(IE, "body")
ここで ホームページの内容を 変数のsに取得します。
これが
>あるいは、あるサイトをバックグランドで動かして、そのページからテキストデーターを取る方法があるでしょうか。
ですね。
私は 1000ポイント欲しいので回答しますが、私が回答することにより
ポイントが減る可能性があるから コメントしている人も回答するかもしれないですね。
きゃづみい様
回答を頂きまして有り難うございました。
補足質問をさせて頂きましたが、他の方から回答を頂きましたので、今回はこれで終了とさせて頂きます。
悪しからずご了承下さい。
やり方としては idから取得するのと ホームページのソースから取得するという二通りのやり方が あると思います。
サンプルソースもいろいろ提示されていますので、いろいろ試してみたらいいと思いますよ。
私のつたないスクリプトを書きます。
------------------------------------------------------------------
IE = CREATEOLEOBJ("InternetExplorer.Application")
IE.visible = true
IE.navigate("https://www.binary.com/d/trade.cgi?l=JA")
//エクセルのファイルを開く
EXCEL = CREATEOLEOBJ("Excel.Application")
EXCEL.visible = true
Excel.WorkBooks.Open(FileName :="C:\Users\Hsuzuk\Desktop\UWSC\4本値.xlsm")
OO =0
HH =0
CC =0
LL =9000000000
while true
GETTIME
SS = G_TIME_SS
mm = G_TIME_nn
mmm = mm mod 5
//取得したデーターをエクセルのセルE1に入力する。
ifb mmm=0 and ss=0 then
EXCEL.RANGE("B1").value = OO
EXCEL.RANGE("C1").value = HH
EXCEL.RANGE("D1").value = LL
EXCEL.RANGE("E1").value = CC
OO=0
HH =0
LL =9000000000
endif
atai = PosACC(0, 304, 400) // マウスカーソル下の文字取得
sleep(0.1)
print "ss =" + ss
//print "atai =" +atai
if OO = 0 then OO = atai
if HH < atai then HH = atai
if LL > atai then LL = atai
CC= atai
sleep(0.1)
print "O = " + OO
print "H = " +HH
print "L = " + LL
print "C = " + CC
sleep(0.5)
wend
----------------------------------------
上記のatai(スポットの数値)をバックグランド又はIE画面を最小化させて稼動したいのですが、どのようにすれば良いでしょうか?
スクリプトを書いて頂けると助かります。
取ったデータをどう表示したいのかが分かりませんが、
今回の内容だと UWSC を使わなくともEXCEL だけでできそうな気がします。
Web からのデータ取得はフォームやタグから位置を特定して値をとるのが定石です。
今回の場合スポットには id="spot" が付いていますから、getElementByID で取得
出来ます。
VBAでスポット値をとるサンプルです。
Sub Sample() MsgBox GetSpotValue() End Sub Function GetSpotValue() Dim ie As Object Set ie = CreateObject("InternetExplorer.Application") ie.navigate "https://www.binary.com/d/trade.cgi?l=JA" Do While ie.Busy Or ie.ReadyState < 4 DoEvents Loop GetSpotValue = ie.Document.getElementById("spot").innerText ie.Quit End Function
5分ごとにセルを更新するなら OnTime で記録する処理を呼び出せばこんな感じで
できるでしょうか。
http://officetanaka.net/excel/vba/tips/tips114.htm
Sub StartUpdate() Dim sp sp = GetSpotValue() Range("A1").Value = Now() Range("B1").Value = sp Range("C1").Value = sp Range("D1").Value = sp Range("E1").Value = sp Application.OnTime Application.Ceiling(Now, TimeValue("00:05:00")), "UpdateSpot" End Sub Sub StopUpdate() Application.OnTime Application.Ceiling(Now, TimeValue("00:05:00")), "UpdateSpot",,False End Sub Sub UpdateSpot() Dim sp sp = GetSpotValue() Range("A1").Value = Now() If sp > Range("C1").Value Then Range("C1").Value = sp If sp < Range("D1").Value Then Range("D1").Value = sp Range("E1").Value = sp Application.OnTime Application.Ceiling(Now + TimeValue("00:00:01"), TimeValue("00:05:00")), "UpdateSpot" End Sub Function GetSpotValue() Dim ie As Object Set ie = CreateObject("InternetExplorer.Application") ie.navigate "https://www.binary.com/d/trade.cgi?l=JA" Do While ie.Busy Or ie.ReadyState < 4 DoEvents Loop GetSpotValue = ie.Document.getElementById("spot").innerText ie.Quit End Function
IE の更新自体それほど高速ではないので、秒単位の処理はあまり意味がないと
思いますが、もともと EXCEL で何かしらの処理をしているようですから、
そこに組み込んだ方が効率がよさそうな気がします。
期待通り動くかどうかわかりませんが、毎秒のコード例です。
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) '//---------------------------- Sub UpdatingSpot() '//---------------------------- Dim ie As Object Set ie = CreateObject("InternetExplorer.Application") Dim sp As Double With Worksheets("Sheet1") MsgBox "終了するときは A2 を消去してください。" .Range("A2").Value = "更新中" .Activate .Range("A2").Activate .Range("A1").NumberFormat = "hh:mm:ss" sp = GetSpotValue(ie, "https://www.binary.com/d/trade.cgi?l=JA") .Range("A1").Value = Now() .Range("B1").Value = sp .Range("C1").Value = sp .Range("D1").Value = sp .Range("E1").Value = sp Do While .Range("A2").Value <> "" Sleep 1000 '// msec sp = GetSpotValue(ie, "") ' sp = GetSpotValue(ie, "REFRESH") '// 毎回再読み込みするときは "REFRESH" を指定 .Range("A1").Value = Now() If sp > .Range("C1").Value Then .Range("C1").Value = sp If sp < .Range("D1").Value Then .Range("D1").Value = sp .Range("E1").Value = sp DoEvents DoEvents DoEvents Loop End With ie.Quit End Sub '//---------------------------- Function GetSpotValue(ie, URL As String) '//---------------------------- Select Case UCase(URL) Case "REFRESH": ie.refresh Case "": Case Else ie.navigate URL End Select ie.visible = False Do While ie.Busy Or ie.ReadyState < 4 DoEvents Loop GetSpotValue = ie.Document.getElementById("spot").innerText End Function
回答を頂きまして有り難うございます。
データーの更新は1~4秒程度で更新されますが、更新してからデーターを取得する方法が分かりませんので1秒前後毎に取得しています。
回答頂きましたコードでいろいろ試してみたいと思います。
有り難うございました。m(_ _)m
spotデーターが1行目のセルに表示されています。
いままで長い間無い知恵を絞ってuwscで取得していましたが、セクセル単体で取得する事が出来て感激しています。
今後も質問する事があると思いますが宜しくお願い致します。
回答を頂きまして有り難うございます。
2013/10/06 18:55:01データーの更新は1~4秒程度で更新されますが、更新してからデーターを取得する方法が分かりませんので1秒前後毎に取得しています。
回答頂きましたコードでいろいろ試してみたいと思います。
有り難うございました。m(_ _)m
spotデーターが1行目のセルに表示されています。
2013/10/06 19:13:28いままで長い間無い知恵を絞ってuwscで取得していましたが、セクセル単体で取得する事が出来て感激しています。
今後も質問する事があると思いますが宜しくお願い致します。