[ 掲示板に戻る ]

過去ログ閲覧モード

IELINK? / さむ
IELINKでは、
URLが直接書かれたものはリンクできませんが、
何か方法はあるのでしょうか?

No.948 2015/02/27(Fri) 13:03:35

Re: IELINK? / ある
直接書かれたものというのは、クリックで飛べない状態のものということでしょうか?
スクレイピングでURLを抜き取って、
IE.navigate(URL)
で移動出来ると思います。

抜き出しはIEを生成してからの
div=IE.document.getelememtsbytagname("div")
for n=0 to div.length-1
print n+":"+div.item(n).innertext
next
これにbetweenstrやcopyを組み込むことででいけると思います。

No.950 2015/02/27(Fri) 14:03:36

Re: IELINK? / さむ
POSを併用することで、IELINKでやりたかったことができました
ありがとうございました

No.951 2015/02/27(Fri) 22:48:52
何故多重定義? / ある
「ファイルaからファイルbを呼び出し、またファイルaを呼び出す」という処理を自作関数を使って行いたいです。でも何故か「多重定義です」とエラーになります。

//--[aaa.uws]-------------------------
print "aaa"
call_b()

procedure call_b()
 call bbb.uws
fend

//--[bbb.uws]-------------------------
print "bbb"
call_a()

procedure call_a()
 call aaa.uws
fend
//------------------------------------------
過去ログを見たところ、
http://www3.bigcosmic.com/board/s/board.cgi?id=umiumi&start=110&log=ON&cnt=34
こちらのhoolさんの相談に近いのかと思いましたが、どう解決したらいいのかはちょっとわかりませんでした。
procedureを使わなければ相互呼び出しするのは確認しているけれど、createformで作成したフォームのボタンに貼り付けたいので、関数の形にまとめたいです。
(フォームaの呼び出しボタンを押すとフォームbが呼び出される、という形にしたい)

アドバイスを頂けると助かります。

No.945 2015/02/27(Fri) 01:39:21

Re: 何故多重定義? / ある
ちなみに希望の動作自体は、Pro版のEXE化をしておいてからの

procedure call_b()
 exec("bbb.exe")
ctrlwin(getid("フォームタイトル"),close)
fend

で問題なく動く事を確認しました。callでの呼び出しと大差なかったです。
あとは、「callだとどうして多重定義になるのかということ」と、できればその回避方法もわかると最高です。

No.946 2015/02/27(Fri) 01:59:13

Re: 何故多重定義? / しろまさ
call とは呼ばれた場所にそのファイルの内容をベタっと貼り付けて1ファイルを作るようなイメージです。
ですから同じファイルを複数回call(貼り付け)すると関数多重定義になる・・と私は理解しています。

回避方法は簡単です。
callされるファイルは関数だけを記述したものにし、callを冒頭1回のみにすればよいのです。

call = script実行 という考えではなく call = 関数取り込み という考えです。
1回callした後は好きなところで関数を実行すればよいわけです。

call 関数群.uws

call_a()
call_b()

No.947 2015/02/27(Fri) 08:53:11

Re: 何故多重定義? / ある
しろまささん、アドバイスありがとうございます。
たまにHPを参考にさせて頂いていたのでお返事もらえてとても嬉しいです。
(wscriptでのdesktop取得はそのまま暗記しました)

多重定義になる理屈も何となくわかったし、回避法も問題なく動作しました。
callに対する根本的な考え方がちょっとずれていたのだと思います。
ありがとうございました。

No.949 2015/02/27(Fri) 13:57:18
CSVファイルExcelに張り付ける際のチェック処理 / 酒屋さん
UWSCプロを使っております。
だれかアドバイスにて私を助けてくれませんか?

15分ごとに現在CSVをダウンロードしてきて受注情報を半アナログ的にEXCELに張り付けております。

流れとしては以下のものです。
1.15分ごとにダウンロードしてきたCSVをEXCELに開く
2.指定箇所をコピーして、メインのファイル指定した場所の最終行へ張り付ける

CSVの中身は
"ID","Site","title","site url",・・・・・
"OSAKE-CHUUMON22884","お酒屋さん","焼酎","ttp://",・・・・・


ここで質問なのですが最終行に張り付けする際に最終行から連番なのかをチェックを行い
OSAKE-CHUUMON22884で終わっていて、次がOSAKE-CHUUMON22889の場合手
以下の風に自動的に補正してSAKE-CHUUMON22888という行を入れてからペースト処理を行いたいのです。

OSAKE-CHUUMON22887 お酒屋さん 焼酎 ttp://
OSAKE-CHUUMON22888 お酒屋さん 焼酎 ttp://
OSAKE-CHUUMON22889 お酒屋さん 焼酎 ttp://

もしくはもっとスマートな方法はありますか?

No.924 2015/02/23(Mon) 13:36:27

Re: CSVファイルExcelに張り付ける際のチェック処理 / しろまさ
csvならExcelで開かずにfopenで扱った方が楽なのでは?
最終行取得して文字列判断や最終行書込も簡単ですよ。

No.927 2015/02/23(Mon) 14:50:59

Re: CSVファイルExcelに張り付ける際のチェック処理 / 酒屋さん
>しろまささん
クレジットカード会社の与信結果や、銀行の振込み有無なども巡回しUWSCで取り込むようにし、
決済があったら支払い済みステータスに変更するようにしている点と
その他WEBサイトとの連携処理を続いて行っているため、
Excelは常時起動状態が必須となり張り付けが必要となるためその方法は厳しそうです。。
また数万件の受注情報が蓄積されているため、一旦閉じると起動に時間がかかるという点も御座います。

No.929 2015/02/23(Mon) 18:54:06

Re: CSVファイルExcelに張り付ける際のチェック処理 / しろまさ
件数的にそろそろExcelを卒業してDBに移行する段階では?
No.933 2015/02/24(Tue) 09:38:10

Re: CSVファイルExcelに張り付ける際のチェック処理 / ざろん
ペースト作業等はExcelのVBAに書き込み、
UWSCは呼び出す風にしてみてはいかがでしょうか?

IEを開いて15分おきに保存するのも、VBAから。
ExcelのVBAを資本?にしたほうが簡単なような気がします。

-------------------------
Sub UWSC実行()
Dim rChange As Range
Dim sCommand As String
Dim sScriptFile As String
Dim EXE_PATHNAME As String
Dim DQ As String
DQ = """"
EXE_PATHNAME = ThisWorkbook.Path & "\uwsc\uwsc.exe" ' // 実行する UWSC スクリプト
sScriptFile = ThisWorkbook.Path & "\uwsc\TEST.UWS" ' // UWSC の起動オプションは UWSC のヘルプを参照
sCommand = DQ & EXE_PATHNAME & DQ & " " & _
DQ & sScriptFile & DQ

CreateObject("WScript.Shell").Run sCommand, vbNormalFocus, True
End Sub
-----------------Thisworkbook内--------------------
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.OnTime TimeValue(指定時刻), _
"Module1.全部開始", , Schedule:=False
End Sub

Private Sub Workbook_Open()
Call Module1.現在より一定時間後にマクロを実行する
End Sub
-----------------Module1内--------------------
Sub 現在より一定時間後にマクロを実行する()
Dim WSH As Object, re As Long
Set WSH = CreateObject("Wscript.Shell")
Set WSH = CreateObject("WScript.Shell")

指定時刻 = Now + TimeValue("00:05:00") '現在時刻より何分後 ※2
待ち時間 = TimeValue("00:00:01") '指定時刻に他プロシージャが実行中の場合の待ち時間 ※2

Application.OnTime TimeValue(指定時刻), _
"Module1.全部開始"
End Sub

Sub 全部開始()
Dim WSH As Object, re As Long
Set WSH = CreateObject("Wscript.Shell")
Set WSH = CreateObject("WScript.Shell")
re = WSH.Popup("3分程度かかります", 10, "10秒後に閉じます", vbYesNo + vbQuestion)
If re = vbYes Or re = "-1" Then
      Call UWSC実行
      Call 最終行へ貼り付け
re = WSH.Popup("完了しました。", 2, "2秒後に閉じます", vbQuestion)
End If
Set WSH = Nothing
現在より一定時間後にマクロを実行する
End Sub

Sub 最終行へ貼り付け()
'何処に貼り付けたいのか分かりませんでした。
End sub

-----------------
バグ等あるかもしれませんが…参考になれば幸いです。

No.934 2015/02/24(Tue) 11:35:45

Re: CSVファイルExcelに張り付ける際のチェック処理 / 酒屋さん
>しろまささん
データベースも考えております。
素人コード数万行に渡るため移行に躊躇っていました。
今後処理を増やしていくとUWSCでは限界をむかえそうですので
再設計を検討してみます!


>ざろんさん
VBAソースコードありがとうございます。
現時点でも一部処理pdf作成やメール送信をVBAで処理しております。
どの言語で処理をするのかを再度検討し再構築が必要そうですね。数十の
UWSファイルとなっているためVBA移行も検討します。


とりあえず移行には相当時間かかりそうなのでUWSCで処理すできる方法を先に
自身で考えてみます。。

No.940 2015/02/25(Wed) 22:35:39

Re: CSVファイルExcelに張り付ける際のチェック処理 / ざろん
>とりあえず移行には相当時間かかりそうなのでUWSCで処理すできる方法を先に
>自身で考えてみます。。


…そんなに時間かかりますか?
使っているUWSCファイルをVBA上で実行する とやれば
UWSCファイルそのまま使えると思うのですが…

※ Excel2003で組んでるので、環境により上手く動かない
  可能性があります。その際は修正してください。

Sub UWSC実行()
Dim rChange As Range
Dim sCommand As String
Dim sScriptFile As String
Dim EXE_PATHNAME As String
Dim DQ As String
DQ = """"
EXE_PATHNAME = ThisWorkbook.Path & "\uwsc\uwsc.exe" ' // 実行する UWSC スクリプト
sScriptFile = ThisWorkbook.Path & "\uwsc\TEST.UWS" ' // UWSC の起動オプションは UWSC のヘルプを参照
sCommand = DQ & EXE_PATHNAME & DQ & " " & _
DQ & sScriptFile & DQ

CreateObject("WScript.Shell").Run sCommand, vbNormalFocus, True
End Sub

No.942 2015/02/26(Thu) 10:10:29

Re: CSVファイルExcelに張り付ける際のチェック処理 / しろまさ
> 今後処理を増やしていくとUWSCでは限界をむかえそうですので

DBをUWSCから(ADOで)操作する提案をしたつもりですが^^
私はまだUWSCに限界を感じてませんね。まあいろいろ試して下さい。

No.943 2015/02/26(Thu) 13:20:14

Re: CSVファイルExcelに張り付ける際のチェック処理 / 酒屋さん
>ざろんさん
知識的に移行に時間がかかりそうです。
なるほど意外と楽にできそうですね!
私の環境で試してみます!!

>しろまささん
誤解与えて申し訳御座いません。
私のUWSC知識力では限界ということです。。

>DBをUWSCから(ADOで)操作する提案をしたつもりですが^^
勉強しておきます、アドバイスありがとうございます!


皆様の知識力に恐れ入ります。素人すぎて話が噛み合わなく申し訳御座いません。
ここからは頂いたアドバイスをもとに残りの課題は自分で解決にチャレンジしようかと
思います。ありがとうございました!!

No.944 2015/02/26(Thu) 16:52:19
IEのJava画像(ボタン)認識 / ざろん
IE上の画像を認識し、クリックするというものを組んでます。

画像を見つけたらクリックするところまで進めましたが
IEを指定するところが出来ません。

ボタンクリック等なら、
idなどを指定すればできますが
BTN(LEFT,CLICK, G_IMG_X, G_IMG_Y)
この場合、何処でIEブラウザの指定を行えば良いのでしょうか?

MOUSEORG( ID, [基準指定 ] )
このやり方なら、バックグラウンドで実行できると見たのですが
上手く行きません。(エラーが出るわけではありません)

gid = GETID("テスト_IE")
MOUSEORG( gid , MORG_DIRECT, MORG_BACK )
BTN(LEFT,CLICK, G_IMG_X, G_IMG_Y)

IEをアクティブ(前面)にしている場合は
ボタンがクリックされ、思ったとおりの動作をします。

参考サイトやアドバイスをお願い致します。

No.935 2015/02/24(Tue) 14:27:04

Re: IEのJava画像(ボタン)認識 / routa
"Internet Explorer_Server" を指定する必要があったと思います。
gid = GETID("テスト_IE")
MOUSEORG(GETCTLHND(gid,"Internet Explorer_Server"), MORG_DIRECT, MORG_BACK)

No.937 2015/02/25(Wed) 19:32:42

Re: IEのJava画像(ボタン)認識 / koi
自分で試してはいないけどよく聞く話はこれ
http://www.uwsc.info/faq.html#n45

No.939 2015/02/25(Wed) 22:17:53

Re: IEのJava画像(ボタン)認識 / ざろん
routa様、回答ありがとうございます。
IEのバージョンを書き忘れておりましたが、IEのバージョンは9です。
教えていただいたものを試しましたが、相変わらず動作しませんでした。
(エラーも出ませんでした)

koi様、回答ありがとうございます。
試してみましたが、IE9だからかCOMエラーが出てとまってしまいました。

何だか難しそうな気がするため、このまま最前面に出して操作していこうと思います。
回答頂きありがとうございました^^

No.941 2015/02/26(Thu) 09:46:52
既に開いているEXCELファイルを操作する方法? / horowasan
こんばんは,よろしくお願いします。
インターネットの情報をEXCELファイルに書き込んだり,EXCELファイルの情報によって,サイトのフォームに値を入力したりするといった業務をしたいと考えています。
このような時に,メインのプログラムを,main.UWSというファイルに記述し,ここでEXCELファイルを開きます。別のsubIE.UWSというファイルに,IEからデータを切り出すプログラムを,さらに別のsubXL.UWSというファイルに,EXCELにデータを書き込むプログラムを記述したとして,main.UWSからこれらのサブファイルを呼び出して,一連の作業を行いたいと考えています。
callで,ファイルを呼び出すことになると思うのですが,EXCELオブジェクトを引き継ぐ事が出来ずに困っています。どのようにすればよろしいのでしょうか?教えていただきたくお願いいたします。

No.824 2015/02/10(Tue) 01:29:06

Re: 既に開いているEXCELファイルを操作する方法? / horowasan
お騒がせしてすみませんでした。
GETACTIVEOLEOBJ でうまくいくことが分かりました。
てっきり,オブジェクトを引数として引き継ぐとばっかり思い込んでいたものですから,パニクってしまいました。申し訳ありませんでした。
今後ともよろしくお願いいたします。

No.828 2015/02/10(Tue) 11:53:18

Re: 既に開いているEXCELファイルを操作する方法? / stuncloud
callするスクリプトで関数を定義しておくようにすれば、EXCELオブジェクトの変数を引数で渡すことも可能ですよ

// main.uws
call subIE.UWS
call subXL.UWS

ie = createoleobj("InternetExplorer.Application")
excel = createoleobj("Excel.Application")
data = IEで作業(ie) // callしているのでsubIE.UWSの関数がmainで呼べる
Excelで作業(excel, data) // 同様にsubXL.UWSの関数が呼べる

// subIE.UWS
// IE作業用の関数を定義しておく
function IEで作業(ie)
 // 処理
 result = データ
fend

// subXL.UWS
procedure Excelで作業(excel, data)
 // 処理
fend

個人的にはcallで呼び出すスクリプトには定数や関数の定義だけしておくのがいいかな、と思っています

No.830 2015/02/10(Tue) 16:03:54

Re: 既に開いているEXCELファイルを操作する方法? / horowasan
stuncloud さん返信ありがとうございました。
質問を閉じたつもりでおりましたので,失礼いたしました。

再びこの質問を参照したのは,理由がありまして・・・。実は,GETAVTIVEOLEOBJが突然,訳の分からないCOM_ERRORを出すようになりました。コンピュータを再起動したりしてみたのですが改善しません。いったい何が起こったのか分かりません。GETAVTIVEOLEOBJを使うのは,適切でないと思うようになりました。いったいなぜうまく動いていたものが,急に動かなくなるのでしょうか?不思議です?どのようなところに原因があるのでしょうか?教えていただきたいです。よろしくお願いします。

No.868 2015/02/18(Wed) 17:40:54

Re: 既に開いているEXCELファイルを操作する方法? / ざろん
私は以前教えてもらった方法でやっていますが、エラーなんて出ませんよ?

Excel = GETACTIVEOLEOBJ("EXCEL.Application")
sckey(getid("","XLMAIN"), vk_esc) // 編集モード解除

こういったものですが…
エラーの出るソースを載せないことにはどうにも対応できないのではないかと思います。

No.869 2015/02/18(Wed) 18:42:49

Re: 既に開いているEXCELファイルを操作する方法? / horowasan
ざろん さん返信ありがとうございます。
すみませんでした。質問というより,stuncloud さんへの御礼が遅れたお詫びのつもりで書き始めたものですから・・・,中途半端なものになってしましました。お礼のつもりで,その後の状況と,stuncloud さんがおっしゃっていたように,COMオブジェクトを引数で渡す方法を試してみるべきと考えている旨をお伝えし,stuncloud さんのやり方に注目しているという事をお話したかったのです。私の意図はその辺りにありました。わかりにくくてすみませんでした。

ソースは,

//これ以前のソースは,IEからデータを取得しています。
//既に開いているUWSC.xlsmというファイルのCOMオブジェクトを取得しようとして,次のようにしています。
EXCEL = GETACTIVEOLEOBJ("EXCEL.Application", "UWSC.xlsm")

一昨日までは,これで問題無く動いておりました。ざろんさんのおっしゃるように,正常に動いて当然だと思います。
しかし,突然,COM_ERRORが出るようになってしまったのです。
ネットを検索すると,GETACTIVEOLEOBJ の原因不明のエラーについていくつか見つける事が出来ました。このような状況で上記のように考え始めてところでした。
stuncloud さんのやり方も試してみたいと思います。また,今後のために,なぜGETACTIVEOLEOBJが急に使えなくなってしまったのか,知識を得たいとも思います。以上です。お心当たりのある方,同様の経験をお持ちの方などいらっしゃいましたら,ご返信をいただければ幸いです。よろしくお願い申し上げます。

No.875 2015/02/18(Wed) 21:54:02

Re: 既に開いているEXCELファイルを操作する方法? / umiumi
ゾンビ状態のExcelが無いか確認してください。
タスクマネージャの「プロセス」タブより ゾンビプロセスを見つけ終了

No.878 2015/02/19(Thu) 00:16:45

Re: 既に開いているEXCELファイルを操作する方法? / horowasan
umiumi さんありがとうございます。
再起動などもしながら,何度もタスクマネージャーの「プロセス」を確認してみましたが,それらしいものは見つけられませんでした。
いったい何が原因なのでしょうか????

No.893 2015/02/20(Fri) 04:54:50

Re: 既に開いているEXCELファイルを操作する方法? / ざろん
当方、Excel2003だから分からないです。
Excel2003ですが、ファイルを作ることもせず、試してみました。

1回目 ファイルを開くダイアログが出てきました。 開くものがないのでとりあえず閉じました。
2回目 COMエラーが出ました。

それ以降ずっと、COMエラー。

原因不明でしたが

COM_ERR_IGN
Excel = GETACTIVEOLEOBJ("EXCEL.Application", "UWSC")
sckey(getid("","XLMAIN"), vk_esc) // 編集モード解除
COM_ERR_RET

こうしてみました。
上手く動作するようになりましたが…どうでしょう。

No.900 2015/02/20(Fri) 16:40:39

Re: 既に開いているEXCELファイルを操作する方法? / horowasan
ざろんさんありがとうございました。
試してみたいと思うところですが,現在新幹線の車中です。
UWSC Proのインストールは,自宅のパソコンにしておりますので,試行してみることができません。日曜日の深夜に帰宅します。日曜日の夕方以降のお返事になると思いますが,すみません。よろしくお願いします。

No.902 2015/02/20(Fri) 21:23:19

Re: 既に開いているEXCELファイルを操作する方法? / horowasan
ざろんさん,遅くなって申し訳ありませんでした。

COM_ERR_IGN
Excel = GETACTIVEOLEOBJ("EXCEL.Application", "UWSC")
sckey(getid("","XLMAIN"), vk_esc) // 編集モード解除
COM_ERR_RET

を試してみました。確かにエラーは出なくなりましたが,COMオブジェクトが取得できない?のか,次の行の
EXCEL.Workbooks("UWSC.xlsm").Worksheets("Sheet1").Range("F2:I300").ClearContents

COM_Error:Could not convert variant of type (Integer)into type(Dispatch)
というエラーが出ました。

この問題は,別の質問「THREAD について教えて下さい。」とも関わる問題でして,つまり,別々のスレッドにCOMオブジェクトを引き継ぐ事が出来ないということとも大きく関わってくる問題なのだと感じています。
THREADで並行処理する限り,GETACTIVEOLEOBJを使わざるを得ず,GETACTIVEOLEOBJを使う限り,このCOMエラーと向き合う事になると思うからです。GETACTIVEOLEOBJが普通に安定的に使えるように、原因を是非とも知りたいと思います。どうか,お願いします。GETACTIVEOLEOBJが正常に動くようにするにはどのようにすれば良いのか,どなたか教えてください。伏してお願い申し上げます。 <(_ _)>

No.919 2015/02/23(Mon) 00:11:43

Re: 既に開いているEXCELファイルを操作する方法? / しろまさ
その症状が再現できる最低限のセットをどこかにアップできませんか?
***.uws
***.xlsm

同条件でテストせねば可も不可も答えられません。

No.926 2015/02/23(Mon) 14:45:01

Re: 既に開いているEXCELファイルを操作する方法? / horowasan
しろまさ さんありがとうございます。
コードですが,単純化しました。エクセルファイルUWSC.xlsmを起動した状態で実行して,以前は動いておりました。
情報を得るために,インターネットを開いて情報を切り出します。
その後,既に開いているUWSC.xlsmにデータを書き込むという操作しようと考えています。


IE = CREATEOLEOBJ("InternetExplorer.Application")
IE.visible = True
IE.navigate("http://www.yahoo.co.jp/")
BusyWait(IE)
id = GETID(GET_ACTIVE_WIN)
BusyWait(IE)

//ここで,情報の切り出しを行います。

EXCEL = GETACTIVEOLEOBJ("EXCEL.Application", "UWSC.xlsm")   //ここで,COMエラーが出ます。

EXCEL.workbooks("UWSC.xlsm").worksheets("Sheet1").Range("F2:I303").ClearContents //情報を最新にするために,一度すべて削除する。(以前にこの行についても取り上げていますので,この行も載せました。)

//ここにエクセルへの情報の書き込みを行います。

//***************************************************
Procedure BusyWait(ie)
 repeat
  Sleep(0.2)
 until (! ie.busy) and (ie.readyState=4)
Fend


いかがでしょうか?おそらく初心者ゆえのつまらないことで引っ掛かっているものと思います。お手を煩わせて申し訳ありませんが,よろしくお願いします。

No.930 2015/02/23(Mon) 21:38:24

Re: 既に開いているEXCELファイルを操作する方法? / 山田
私も初心者で先輩方々の間に入り回答コメントをするのは気がひけるのですが
IE11をお使いならBusyWait関数を以下に置き換えると改善するかもしれません。

DEF_DLL SendMessageA(Hwnd, Long, Long, Dword): bool: user32
CONST WM_ACTIVATE = $06
Procedure BusyWait(ie)   // 更新待ち処理
 repeat
  Sleep(0.2)
 until (! ie.busy) and (ie.readyState=4)
 SendMessageA(ie.Hwnd, WM_ACTIVATE, 0, 0) // 更新直後に WM_ACTIVATEを送る事によりバックグランドでも操作可となる
Fend

IE11にて画面更新後に操作(COM)ができない  #n45
http://www.uwsc.info/faq.html#n45

XPからwin8環境に移行した際にIE操作で同じようにCOMエラーで悩んだことがあるのでコメントさせて頂きました。
まったく見当外れでしたら申し訳ありません。

No.931 2015/02/24(Tue) 01:57:57

Re: 既に開いているEXCELファイルを操作する方法? / しろまさ
ちょっと意味合いが違います。
  エラーが出るuwsの単純化したファイル
  エラーが出るxlsmの見せたくない部分を削除したファイル
これをまとめてどこかにアップロードした方が良いという意味です。

デバッグ作業でよくあることですが、単純化していくとエラーが出なくなることがあります。
どこで出なくなるのか突き詰めると修正ポイントが解るのです。
例えばIE操作が無くてもXLのCOMエラーが出るのか? とかご自身でパターンを変えてテストして下さい。

次に限りなく単純化してそれでもエラーが出るとします。
それを他人(他のPC等)に検証してもらい、症状が出るかどうか試します。
他人にも症状が出ればuwscやファイル自体の問題であることが解ります。

そこでもし出なければ、horowasanのPCのみの問題であることが解り、
ウィルス、Excelの壊れ、COM登録の異常、等を疑う流れになります。

だから実行しても結果が解らないコードのみ書かれても検証しようがないということです。

ちなみに空のuwsc.xlsmを作成して掲載されたコードを試しましたがエラーは出ませんでした。
今の段階で私が出来るのはここまでです。

No.932 2015/02/24(Tue) 09:16:45

Re: 既に開いているEXCELファイルを操作する方法? / ざろん
h ttp://blog.livedoor.jp/atrade1/archives/50653742.html
このサイトが参考になるかと…。

No.936 2015/02/24(Tue) 14:58:05

Re: 既に開いているEXCELファイルを操作する方法? / horowasan
山田さん,しろまささん,ざろんさん,ご返信ありがとうございます。
ちょっと確かめたい事があったもので遅くなってしまいました。まことに,すみませんでした。

山田さんのコードを試してみました。当方IE11を使用していますし,具体的なコードを添付していただきましたので大変期待しつつ試してみたのですが,残念ながら改善は見られませんでした。ありがとうございました。

しろまささんのご指摘は,「このようなコードではエラーが出るはずは無い。問題のコードをちゃんと示しなさい。」というものかと思います。私の提示が不誠実なものと受け取られたものと思います。言葉足らずですみませんでした。しかし,コードの中にコメント文を挿入しておきましたが,このコードでエラーが出ているのです。UWSC.xlsmもファイル名を付けただけの空のものでエラーが出ています。
単純化の作業を,エラーが出る事を確かめつつ行いました。エラーは出続けました。
多分,最後の行以外は限りなく単純化した状態だと思われます。実際にアクセスしているサイトは,もちろんyahooではありませんが,お示ししたようにyahooに変更しても同様にエラーが出続けました。私がアクセスしているサイトは,ログインが必要なサイトでしたので,多くの方々に,コードをお試しいただくには,一般的なサイトに変更した方が良いと思い,yahooにさせていただきました。決して,闇雲なコードをお示しした訳ではありません。どうかご理解いただき,言葉足らずをお許しください。すみませんでした。

しろまささんのご指摘を受けて,自分でも「これだけ単純化したのだから,もしかして,本当にエラーは出ないのでは・・・。」と心配になり,もう一度試してみました。エラーは出続けました。これはもう私のマシンやOSの問題かと思い始めていた時に,つい何気なく,UWSCの再生ボタンを押してエラーが表示された時,自分がUWSC.xlsmを開いていないことに気付きました。これではエラーは当たり前だと思いつつ,エクセルを開こうと思ったとき,「UWSC.xlsmを開いていない状態と同じエラーなんだ・・・」と思いました。もしかして,UWSC本体の方で,うまくExcel−UWSC.xlsmを特定できていないのではないかと思い,UWSC.xlsmのフォルダを変更して,再生するUWSファイルと同じフォルダに同名の空のファイルを作って試したところ,エラーが出なくなりました。

一度エラーが出なくなると,今度はエラーを再現することが出来なくなってしまいました。何度やっても,エクセルファイルをどこのフォルダに置いても正常に動作するのです。GETACTIVEOLEOBJの第2引数は,ウィンドウのタイトル,WORD,EXCELの場合は,ファイル名で指定とヘルプに書いてありますが,ファイル名の指定とはどのようにすれば良いのでしょうか?(絶対パスで指定するとエラーになりました。多分このような指定方法は許されていないのでしょうね。)
例えば,EXCEL = GETACTIVEOLEOBJ("EXCEL.Application", "UWSC.xlsm") と指定しておいて,実際にはUWSC.xlsxを開いていても(UWSC.csvでも,UWSC.txtでも同様),問題無く動きました。(もちろん,EXCEL.workbooks("UWSC.xlsm").worksheets("Sheet1").Range("F2:I303").ClearContents でひっかかりましたけど・・・。)
UWSC.xlsmをどこのフォルダに置いても,問題なく動き続けています。

UWSC.xlsmを置いたフォルダが悪かったのであれば,開いたEXCELファイルが存在するフォルダによって,エラーの出現の状況が決まるはずなのですがそうでは無いのです。
エラーは出なくなって良かったのですが,いつまたエラーが出現するのか不安です。
以上が顛末です。今回の件がどのようなことだったのかご解説いただければ幸いです。よろしくお願い申し上げます。

最後になりましたが,ざろんさん,ありがとうございます。私が行おうとしていることまさにそのものです。EXCEL VBAで株価を監視させ(このために,EXCELファイルは開きっぱなしでなければならないわけです。),UWSCでEXCELファイルの株価等を読みに行き,証券会社のサイトからも現在の状況(注文の状況,所有株式の状況など)を取得して,総合的に判断して,注文の発注を行わせようと考えています。これからも,何かとご相談させていただければうれしいです。どうかよろしくお願い申し上げます。どうもありがとうございました。

No.938 2015/02/25(Wed) 22:13:25
コードの中の:や:について,また,getElementByIdなどについて / horowasan
しろまささんのコードに質問させていただきたいのですが,よろしくお願いします。

質問「THREADについて教えてください」の中のコードです。

このコードの中に,コロン(DEF_DLL timeGetTime(): LONG: winmm.dll)やセミコロン(THREAD Execute(0) ; Sleep(0.5)など)が出てきますが,これは,どのような意味なのかご解説いただけませんでしょうか?

また, 私のコードでは,CLKITEM(id, "ヘルプ", CLK_ACC)としているところを,しろまささんは,
  links = IE.document.getElementById("uhdassist").getElementsByTagName("a")
  links.item(links.length() - 1).click()
とされていますが,これは,Javascriptかなんかの本で見た事があるコードですが,これも使えるのですね。
しかし,このような方法でアイテムを指定する時に困るのは,要素のIDなどを調べるのにとても苦労する事です。しろまささんは,どのようにされてるのでしょうか?教えていただけると大変ありがたいです。

No.920 2015/02/23(Mon) 00:18:13

Re: コードの中の:や:について,また,getElementByIdなどについて / koi
>どのような意味なのかご解説いただけませんでしょうか?
最初のは DLL使用定義   (DLLの関数コールするときに使います)
後半は  マルチステートメント  (一行で複数関数記載するときに使います)
いずれもヘルプを上記キーワードで参照してください

後半に関してはご本人にお任せ



ちょっと話が変わってGETACTIVEOLEOBJの件で苦労されているようですが
(同じ人の質問だと気が付いてなかった)
過去のログの中に 同じ状態で
管理者権限で実行しないとエラーになって(管理者権限でなら動く?)
結局はUACのレベルを引き下げたって人がいるようです
参考  以下の管理者権限  というタイトルでの質問
http://www3.bigcosmic.com/board/s/board.cgi?id=umiumi&start=60&log=ON&cnt=26
質問者さんが同じかはわかりませんけど情報として

No.923 2015/02/23(Mon) 01:53:43

Re: コードの中の:や:について,また,getElementByIdなどについて / しろまさ
休日は目を通さないもので遅くなりまして。
koiさん、お助けありがとうございます。

DEF_DLL においての : は
1つ目の後は戻り値の型定義
2つ目の後はその関数を含むdllの定義

他にもExcelで名前付き引数指定とか、uwscのEval等でも使用しますね。


; koiさんの説明通り。
冗長な記述を嫌って行数を減らしたいときに使います。


ソースのID等の調べ方は色々ありますが、
IE11が入っていれば目的のボタンを右クリックして
要素の検査
を実行すれば別ウィンドウで表示されます。

No.925 2015/02/23(Mon) 14:14:59

Re: コードの中の:や:について,また,getElementByIdなどについて / horowasan
koi さん,しろまさ さん,いつもありがとうございます。
:や;についてよく分かりました。
>いずれもヘルプを上記キーワードで参照してください。
本当ですね。ヘルプを参照するクセを付けたいと思いました。UWSC関連のサイトを頼みにしていすぎていたなと反省させられました。

IEの「要素の検査」知りませんでした。すごく便利ですね。今まで,FirefoxにFirebugなどをインストールして目的の深さまで探してました。でもこれなら,一発ですね,ありがとうございます。いろいろと試してみます。

No.928 2015/02/23(Mon) 18:41:37
DosCmd関数中の<#DBL>の使い方について / ミリアム
%ProgramFiles%\Safari\Safari.exe
にあるSafariを起動したいです。そこで

MsgBox(DosCmd("<#DBL>%ProgramFiles%\Safari\Safari.exe<#DBL>"))

このようにしてみたのですが、なぜか最初の<#DBL>が無視され、エラーになりました。

MsgBox(DosCmd("<#DBL><#DBL>%ProgramFiles%\Safari\Safari.exe<#DBL>"))

このようにするとちゃんとSafariが起動します。
…なぜなんでしょうか?

Firefoxを起動する場合はちゃんと先頭の<#DBL>が認識されて普通に起動したのですが…。

No.922 2015/02/23(Mon) 01:50:52
THREAD について教えて下さい。 / horowasan
こんばんは,よろしくお願いします。
THREADを使って,プロシージャや関数を呼び出すと並行処理が出来るとのことだったので,THREADを使った処理を記述しようと思っています。

(先に質問しましたが,10秒おきに定時実行する処理を書きたいので10秒おきにTHEREADで処理を呼び出し,メインのプログラムで,計時を行おうと思っています。そうすれば,処理の長短にかかわらず,定時実行が出来るものと開発に取り組んでいます。)

THREADでプロシージャを呼び出すと「別のスレッドにマージャリングされたインターフェースを呼び出しました。」とエラーが出ます。
処理時間が,10秒を超えないように,IEのCOMオブジェクトは,メインで取得して,必要なページそれぞれのプロシージャでナビゲートしようと考えました。
そこで大枠次のように記述しました。確かに,並行処理なので,COMオブジェクトも,2つ別々になっているのだろうと思いますが,これを解決するには,どのようにすれば良いのか,教えていただきたいです。どのように,COMオブジェクト引き継げば良いのかを教えていただきたいです。よろしくお願いします。

以下のコードは,症状を再現するためにコードを単純化したものです。THREAD を使って呼び出したときと,プロシージャ名だけで呼び出した時の違いについてご解説ください。よろしくお願いします。

IE = CREATEOLEOBJ("InternetExplorer.Application")
IE.visible = True

ID = GETID(GET_ACTIVE_WIN)

THREAD Execute(IE, ID)  //別処理の実行THREADを取ると普通に動く。
//Execute(IE, ID) //(←こうすると普通に動く。ただ,もちろん並行処理とはならない。)

PRINT "続いています。"  //メインの処理が継続

//***************************************************

PROCEDURE Execute(ie, id)
ie.navigate("http://www.yahoo.co.jp/")
BusyWait(ie)
CLKITEM(id, "ヘルプ", CLK_ACC)
FEND

//***************************************************

Procedure BusyWait(ie)
 repeat
  Sleep(0.2)
 until (! ie.busy) and (ie.readyState=4)
Fend

No.879 2015/02/19(Thu) 00:59:59

Re: THREAD について教えて下さい。 / koi
相変わらず深くは考えてませんので場合によっては問題があるかもしれません

IEをパラメータ渡しではなくてスレッド内で取得するようにすれば動きます

但しメイン関数が終了するとスレッドの方も止まってしまうようで
正常に読み込みができません
そのためメイン処理にも読み込み待ちが必要になります

以下のような形に変更してでこちらでは動いてます

IE = CREATEOLEOBJ("InternetExplorer.Application")
IE.visible = True

ID = GETID(GET_ACTIVE_WIN)

THREAD Execute(ID)  //別処理の実行THREADを取ると普通に動く。
//Execute(IE, ID) //(←こうすると普通に動く。ただ,もちろん並行処理とはならない。)

PRINT "続いています。"  //メインの処理が継続
BusyWait(ie)

//***************************************************

PROCEDURE Execute(id)
ie = GetActiveOLEObj("InternetExplorer.Application")
ie.navigate("http://www.yahoo.co.jp/")
BusyWait(ie)
CLKITEM(id, "ヘルプ", CLK_ACC)
FEND

//***************************************************

Procedure BusyWait(ie)
 repeat
  Sleep(0.2)
 until (! ie.busy) and (ie.readyState=4)
Fend

No.881 2015/02/19(Thu) 10:52:02

Re: THREAD について教えて下さい。 / しろまさ
// グローバルにして引数は消す
Public IE = CREATEOLEOBJ("InternetExplorer.Application")

THREAD Execute()

// スレッド内でIDを生成
Dim ID = HNDtoID(IE.hwnd)

// 未検証。

No.886 2015/02/19(Thu) 13:23:15

Re: THREAD について教えて下さい。 / horowasan
koi さん,しろまさ さん ありがとうございます。

なるほど,グローバル変数を宣言するのですね。なるほど,まだ,勤務先にいましたので,試してみることはできませんが,うまくいきそうだと直感的に思います。結果は後で報告します。ありがとうございました。

No.891 2015/02/19(Thu) 17:33:40

Re: THREAD について教えて下さい。 / horowasan
koi さん,しろまさ さん,こんばんは,(もう朝が近いですけど…)
いつもお世話様です。お2人のお話をもとに,いろいろと試してみました。
先に現在のコードをお示しします。

Public IE = CREATEOLEOBJ("InternetExplorer.Application")
IE.visible = True

THREAD Execute()

PRINT "続いています。"  //メインの処理が継続

BusyWait() //これが無いとフリーズ?BusyWaitは動いてるのか?

//***************************************************

PROCEDURE Execute()

IE = GetActiveOLEObj("InternetExplorer.Application")
 //Public IE を宣言したはずなのに? 上記1行が必要?

IE.navigate("http://www.yahoo.co.jp/")
BusyWait()

Dim ID = HNDtoID(IE.hwnd)
CLKITEM(ID, "ヘルプ", CLK_ACC)
FEND

//***************************************************

Procedure BusyWait()

// IE = GetActiveOLEObj("InternetExplorer.Application")
//上記1行は,あってもなくても同じエラーが出ます。

 repeat
  Sleep(0.2)

 until (! IE.busy) and (IE.readyState=4)
//エラーは,「COM_ERROR:例外が発生しました。<改行>
//<次行に>上記の1行が表示されます。」

Fend

以上です。
目的の動作を得ることができましたが,BusyWaitを実行すると「COM_ERROR:例外が発生しました。」というエラーが出ます。
おそらく,「until (! IE.busy) and (IE.readyState=4)」の行で,IEをうまく取得できていないことによるものと思われますが,しかし,THREADが並行処理であることからか,メインの動作はフリーズしても,所期の動作はいたします。BusyWaitに引数を設定してBusyWait(IE)としても同じ結果でした。
うーん,一筋縄ではいかないものですね。あとは,何をどうすればよろしいのでしょうか?教えていただければ幸いです。よろしくお願いします。

No.892 2015/02/20(Fri) 04:36:42

Re: THREAD について教えて下さい。 / koi
Publkic定義ではだめなんですよ

私が書いたコートをそのまま実行っしてみてください
なおprintの後に書いた BusyWait は必ずしも必要なものではありません

Pritでメインが終わってしまっているためにスレッド側で BusyWait していても
関係なく終了してしまうようなので確認の意味で BusyWait を書いただけです
メイン側で何かしら処理が継続していれば問題ありません

No.895 2015/02/20(Fri) 07:07:17

Re: THREAD について教えて下さい。 / koi
追加
別のスレッドにマージャリングされたインターフェースを呼び出しました

内部でどういった管理をしているのかはわかりませんがつまりは
スレッドまたいでCOMインターフェイスを受け渡せないという事なので最初に

IEをパラメータ渡しではなくてスレッド内で取得するようにすれば動きます
と書いています
私のコードでは同じIEの名前ですが メインとスレッドそれぞれで値を取得して使っています
Public定義では同じ変数をスレッドまたいで使うことになるので最初と同じエラーが出ます

現状はPublicsで結局最初と同じことをやってるのですっ飛んでいるだけだと思われます
メインの print後のBusyWaitでのIEは Public宣言したせいで スレッド側で取得したIE
に書き換えられている(スレッド内で値取得しているためにそこで飛ばなくなっただけ)
  BusyWait内で値を取得するとなおさらたちが悪くスレッド動作関係なく
非同期に値が書き換えられる


あと動きを確認したのはメイン側とスレッド側で問題なく並列処理してる(読み込みできてる)
処までです    CLKITEM(id, "ヘルプ", CLK_ACC)
に関してはこちらとの環境の違いか(此方はメニュー出してない)初めから何も動きが無かったので
(ヘルプ表示しようとしてる?)
(そこはどうにでもできるだろうということで深く考えず)無視しています

No.896 2015/02/20(Fri) 07:11:47

Re: THREAD について教えて下さい。 / しろまさ
//  あ、Publicダメでしたね。申し訳ない。検証しました。
//  これ、そもそもIEをメインで宣言する必要があるのでしょうか?
//  取得データだけメインに引渡せれば用事は足りませんか?

Public flgEnd[2], data[2], AllEnd = FALSE
SetClear(flgEnd, 0) // 終了確認フラグ初期化

THREAD Execute(0) ; Sleep(0.5)
THREAD Execute(1) ; Sleep(0.5)
THREAD Execute(2) ; Sleep(0.5)
//PRINT "続いています。" //メインの処理が継続

Repeat  ; Sleep(0.5)  ; Until CALCARRAY(flgEnd, CALC_AVR) = 1
MsgBox("スレッド処理完了。作業時間は以下。<#CR>" + Join(data, " 秒<#CR>") + " 秒")

AllEnd = TRUE
Sleep(2) // 1秒でも十分だが臆病なので。

DEF_DLL timeGetTime(): LONG: winmm.dll
PROCEDURE Execute(a_ID)
  timeGT_Start = timeGetTime()
  IE = CREATEOLEOBJ("InternetExplorer.Application")
  IE.visible = True
  IE.navigate("http://www.yahoo.co.jp/")
  BusyWait(IE)
  
  links = IE.document.getElementById("uhdassist").getElementsByTagName("a")
  links.item(links.length() - 1).click()
  BusyWait(IE)
  
  data[a_ID] = (timeGetTime() - timeGT_Start) / 1000
  flgEnd[a_ID] = 1 // 仕事の終わりを告げる鐘。
  
  Repeat  ; Sleep(0.2)  ; Until AllEnd
  CtrlWin(HNDtoID(IE.hwnd), CLOSE) // 最後の掃除。(IE.Quitが効かない?)
FEND
Procedure BusyWait(IE)
  repeat
    Sleep(0.2)
  until (! IE.busy) and (IE.readyState=4)
Fend
//  もしIEの起動の遅さを懸念されているなら、
//  二つ目からはスムーズになるのでスレッド内生成でも遅くはなりませんよ。

No.899 2015/02/20(Fri) 10:25:57

Re: THREAD について教えて下さい。 / Liners
>10秒おきに定時実行する処理を書きたい〜処理の長短にかかわらず,定時実行が出来るもの
調整しながらSleepすればよい。

下記の方法は、時間調整しながら呼び出せます。
仮に10秒以上かかることがあっても、その区間だけパス出来ます。
単純な分、多くの場合で上手く動作します。検討してみてください。


ztime = gettime()

While True
  Execute(IE, ID)
  Sleep(10 - ((gettime() - ztime) mod 10))
Wend

No.903 2015/02/20(Fri) 22:55:41

Re: THREAD について教えて下さい。 / horowasan
Koiさん,しろまささん,Linersさんありがとうございます。
すみません。本日は,東京出張に来ております。帰宅いたしましたら,お返事を差し上げたいと思います。すみません。少しお時間を頂戴したいと思います。よろしくお願いします。

No.905 2015/02/21(Sat) 01:08:08

Re: THREAD について教えて下さい。 / horowasan
こんばんは,遅くなって申し訳ありませんでした。
koi さん,しろまさ さんありがとうございます。
お二人のお話によりますと,PublicがTHREADでは使えないという事なのですね。了解いたしました。
素人で,物事の本質を理解できず回り道をしてしまったようで申し訳ありませんでした。

私の質問は,THREADで並行処理を行っている時に,メインとスレッドの両方でひとつのオブジェクトを操作する方法でした。Publicが使えないとなると,やはり,GETACTIVEOLEOBJを使わなければならないことになってしまうのですね。これが私にはネックになっています。

この掲示板に立てている別の質問で「既に開いているEXCELファイルを操作する方法?」で問題にしているGETACTIVEOLEOBJをどうしても使わなければならないとなると,ちょっと絶望的な感じがしています。エラーの原因が分からないのですから・・・。現在ここに至っての私の課題は,このエラーの解決という事になりそうです。(初心者の私には到底出来そうもない無理な課題ですが・・・。)
そうでなければ,別々にCOMオブジェクトをCREATEすることのようですね。目的に応じて検討してみたいと思います。

GETACTIVEOLEOBJのときに出るCOMエラーのたちの悪さは,原因が分からないという事のほかに,1度エラーが出ると,後は,再起動しようが何しようが,どんな事をしていてもエラーが出続けるということです。つまり,これ以降,GETACTIVEOLEOBJを使ったコードは書けないという事なのだと理解しています。どうか,どなたか教えてください。このエラーの回避方法を・・・。エラー表示されないという事ではなく,エラーとならずに正常に動作するようになる方法を教えていただきたいです。よろしくお願いいたします。

しろまさ さん,ご提案いただいたコード実行してみました。Executeの実行時間で最高は5秒を超えるものも有りましたが,最短で0.8秒位のものもありました。実行時間が一定していないことは予想していましたが,これほどばらつきがある物とは思いませんでした。ところで話は変わりますが,このコードについて質問があります。別に質問を立てさせていただきますのでよろしくお願いします。

Liners さんありがとうございます。試してみました。
実行した結果は,以下の通りでした。
2015/02/22 21:53:55
2015/02/22 21:54:05
2015/02/22 21:54:15
2015/02/22 21:54:25
2015/02/22 21:54:35
2015/02/22 21:54:46
2015/02/22 21:54:56
2015/02/22 21:55:06
私の環境では,少しずつずれを生じるようですが,なるほど,これならば,THREADを使わずに目的の動作を実現する事が出来るのですね。検討してみます。ありがとうございました。

No.918 2015/02/23(Mon) 00:07:35

Re: THREAD について教えて下さい。 / koi
とりあえず一点だけ
>PublicがTHREADでは使えないという事なのですね。了解いたしました。
今回の件に関してはPublicではだめだといっているだけであって
スレッドだからPublicが使えないわけではありません

No.921 2015/02/23(Mon) 01:01:01
orとandの文字判定について / 山ちゃん
文字判定について

uwsc 2015年2月21日現在最新バージョン pro版使用

この様な簡単なもので、動作テストしました。

IFB 文字A <> "テスト" or 文字A <> "練習" THEN
EXITEXIT
ENDIF

動かすと、テストまたは練習を入力すると終了します。

こちらですと、

IFB 文字A <> "テスト" and 文字A <> "練習" THEN
EXITEXIT
ENDIF

テストまたは練習のどちらかを入力すると終了します。

イメージとしては反対の様な気がします。

携帯から入力していますので「"」が違うかもしれません。
ご教授下されば幸いです。

No.910 2015/02/22(Sun) 08:10:18

Re: orとandの文字判定について / Nagatani
結果がすべて「終わり」と「Exit(終わり)」になっているのでわかりづらいのでは?

文字A="テスト"
IFB 文字A <> "テスト" OR 文字A <> "練習" THEN
 MSGBOX( "条件を満たしました")
ELSE
 MSGBOX( "条件を満たしていません")
ENDIF

文字B="テスト"
IFB 文字B <> "テスト" and 文字B <> "練習" THEN
 MSGBOX( "条件を満たしました")
ELSE
 MSGBOX( "条件を満たしていません")
ENDIF

No.912 2015/02/22(Sun) 08:37:24

Re: orとandの文字判定について / koi
一旦回答しましたが他の方が先に同じ事書かれたようなので内容を変更

最初の処理に関してですが
文字Aが テストでないか練習ではないとき 条件にヒットします
これはつまりは何が入っても条件にヒットする判定となってしまっているため
if判定する意味自体がありません(テストって意味では別にかまいません)
  仮にテストを入れても 文字A <> "練習 の条件に引っかかり
    練習を入れると  文字A <> "テスト の条件にヒットすることになります

No.914 2015/02/22(Sun) 09:17:36

【解決済み】Re: orとandの文字判定について / 山ちゃん
Nagataniさんkoiさん有り難うございます。

何か作法を勘違いしていたようです。

本来は、"テスト"か"練習"の時に動作するようにするのがシンプルだと思いますが、
"テスト"でも"練習"でもないときは、動作しないようにしたい件がありました。

プログラムを、まだ理解できていませんが、取りあえずこちらで思った動作をさせることができました。

IFB 文字A <> "テスト" THEN
IFB 文字A <> "練習"   THEN
MSGBOX( "テストでも練習でも無い時だけ動作")
ENDIF
ENDIF

お忙しいところ、素早い回答有り難うございます。

No.915 2015/02/22(Sun) 15:46:54

Re: orとandの文字判定について / koi
解決されたようですが 最初の書き方でいえば

IFB 文字A <> "テスト" and 文字A <> "練習" THEN
MSGBOX( "テストでも練習でも無い時だけ動作")
ENDIF

になります

No.917 2015/02/22(Sun) 19:22:28
フォーカス位置を調べたい / ある
お世話になります。
createformで作成したフォームのフォーカス位置を調べる方法がわからず困っています。
javascirptだとdocument.activeElementを使えば取得できると見かけて試して見たけれどエラーになりました。
//-----------------
path="〜.html"
cform=createform(path,"title",true)
print cform.document.activeElement.name //←エラー:「COM_Error:例外が発生しました。」
while cform.visible
sleep(0.1)
wend
//-------------------------
ちなみにcformを抜いて「document.activeElement.name」だと「documentが定義されていません」となります。
たぶん、javascriptとの併用ならばクリア出来るとは思うのですが、出来ればUWSCのみで解決したいです。ご教授よろしくお願いします。

No.906 2015/02/21(Sat) 01:47:41

Re: フォーカス位置を調べたい / routa
単純に表示直後はフォーカスがないからです。
自分でフォーカスを当ててから実行してみましょう。

No.907 2015/02/21(Sat) 23:46:04

Re: フォーカス位置を調べたい / ある
routaさん、解決しました!
こんな単純なことだったんですね(汗
ありがとうございます!

No.908 2015/02/22(Sun) 02:13:23
全1170件 [ ページ : << 1 ... 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 ... 117 >> ]