UWSC 掲 示 板
投稿時に「証明書が不正です」と出る場合には、JavaScriptをオンにしてください
動作不具合での質問の場合には環境(OS,IEのバージョン等)の表記もしてください
タイトルは質問内容を表したものにしてください
ネットゲーム関係の質問はご遠慮ください

記録が出来ない / skyblue
本日uwscをデスクトップ上にダウンロードし、同じフォルダー内にRecUws.dllがあります。
右クリックで管理者権限で実行にしても記録のボタン(色が薄いまま)が押せません。

ウィンドウズ10です。

素人の質問で申し訳ありませんが、ご指導ください。

No.4119 2017/06/11(Sun) 14:59:07

Re: 記録が出来ない / satocha
「デスクトップ上にダウンロードし」たあと、きちんと解凍したのでしょうか。
zipファイルをダブルクリックしただけでは、一見通常のフォルダのように見えても、UWSC.exeが圧縮フォルダ内のRecUws.dllを認識できません。
http://www.uwsc.info/faq.html#N5

もし、きちんと解凍したうえで上記の問題が起きているなら、ダウンロードが不完全だった可能性がありますので、もう一度ダウンロードし直してみてください。

No.4124 2017/06/12(Mon) 17:01:14

Re: 記録が出来ない / skyblue
・GruGru.uwsを読み込んで、電卓がぐるぐる回り、電卓計算はできています。
 この状況では解凍できているとは保証できませんか?

・2回ほどダウンロードし解凍していますが結果は同じです。

・ウィンドウズ10で問題が起きる場合が有るのでしょうか?

No.4131 2017/06/13(Tue) 17:53:10

Re: 記録が出来ない / 確認
使用期限が過ぎているのでは? 以前一度インストールしているとか。
No.4132 2017/06/14(Wed) 08:05:19
ソフトのボタンがグレイアウトの場合は分岐する / jasmine
弥生販売の集計をUWSCソフトで行っています。

集計の元値がないと、CKLITEMで押す予定のボタンがグレイアウトしていて押下できず、
プログラムがそこで止まってしまいます。

グレイアウトしていて押せない場合は処理をとばして(分岐して)数行先の処理に進む、という素敵な方法はないでしょうか?

よろしくお願い致します。

No.4123 2017/06/12(Mon) 15:10:38

Re: ソフトのボタンがグレイアウトの場合は分岐する / satocha
getitemの第5引数の真偽で、全部品を取得するかイネーブルのものだけを取るか指定できます。
No.4125 2017/06/12(Mon) 17:18:23

Re: ソフトのボタンがグレイアウトの場合は分岐する / stuncloud
ret = clkitem(id, "ボタン名", CLK_BTN, FALSE)
if ret then
 print "クリックできます"
else
 print "クリックできません"
endif

ボタンがディセーブルで押せない場合はclkitemがFALSEを返します
clkitemの第四引数をFALSEにすることでクリック可能な場合でもクリック処理を行わないので、クリックできるかどうかだけを調べるたい場合はこの方法が便利です
クリックしつつ処理を続行する場合は第四引数をTRUEにするか、省略してください

No.4126 2017/06/12(Mon) 18:11:15

Re: ソフトのボタンがグレイアウトの場合は分岐する / jasmine
ご回答ありがとうございます♪
これからTryしてみます!!
ありがとうございました。

少し時間がかかるかもしれませんが、
うまくいきましたら、またこちらでご報告致します!

No.4129 2017/06/13(Tue) 09:51:25

Re: ソフトのボタンがグレイアウトの場合は分岐する / jasmine
できました!!
stuncloudさんが示していただいた方法で問題クリア!!できました♪
素晴しいです!!感謝です!

satochaさんもありがとうございましたm(__)m

とりあえずご報告まで☆

No.4130 2017/06/13(Tue) 11:53:10
TXT読み込みおよび計算について / null
TXTファイルの内容
200

TXTファイルの内容をKBDを使って出力
またTXTファイル"200"に*2をしてKBDを使って出力

このコードを作成したいのですがうまくいきません
ご回答よろしくお願いします(o*。_。)oペコッ

No.4120 2017/06/12(Mon) 02:29:15

Re: TXT読み込みおよび計算について / 森
スクリプトは以下の通りです。
基本的なコマンドの基本的な使い方ばかりなので、各コマンドについてはヘルプを参照してください。

f = fopen("TXTファイル.txt")
s = fget(f, F_ALLTEXT)
fclose(f)

id = getid("出力したいウインドウ")
ctrlwin(id , ACTIVATE)

// 200を出力
for i in s
 kbd(eval("VK_" + i))
next

// 200 * 2を出力
s = val(s) * 2
for i in s
 kbd(eval("VK_" + i))
next

No.4121 2017/06/12(Mon) 08:33:50

Re: TXT読み込みおよび計算について / null
森様ありがとうございます
kbd(eval("VK_" + i))が定義されてませんとエラーが出ます
どこの部分が悪いのでしょうか?

No.4122 2017/06/12(Mon) 11:33:20

Re: TXT読み込みおよび計算について / 森
UWSCのエラーはコマンドが大文字で表示されるので、提示されたエラー文は実際のものとは違っていて、実際はこのように表示されていたのでは?
-----------------
変数:VK_が定義されていません
〇行目:KBD(EVAL("VK_" + I))
-----------------

だとすると、原因はテキスト中に"200"以外に、スペース、改行、タブなどが含まれていることが可能性の一つとして推測できます。
このことは以下のスクリプトを動かしてみると理解できると思います。
---------------------------------------
// 改行が含まれたテキスト
textblock txt
123

endtextblock

// 123出力の後、改行でエラー発生
exec("notepad")
for i in txt
 kbd(eval("VK_" + i))
next

No.4127 2017/06/12(Mon) 18:25:53

Re: TXT読み込みおよび計算について / null
無事することができました
原因は読み込みファイル名の間違いでした
ありがとうございました!次からちゃんと確認します

No.4128 2017/06/12(Mon) 21:03:24
exe化のコマンドライン書式を教えてください。 / もも
すいません、数年前に一度、教えて頂いたと思うのですが、
*.uwsのexe化のコマンドライン版の設定方法とかヘルプの場所とか
どなたか解説or誘導お願いします。

いつもはUws2ExeのGUI版で問題ない頻度なのですが、
最近、ちびっと修正してはexe化してデバッグ…が頻発してまして、
定番設定をショートカット化してドロップ変換とかしたいんです。

よろしくお願いします。

No.4116 2017/06/08(Thu) 18:22:58

Re: exe化のコマンドライン書式を教えてください。 / もも
うわすいません、
書いた直後に Uws2Exe.chm 見つけました。
失礼しました。

No.4117 2017/06/08(Thu) 18:27:19

Re: exe化のコマンドライン書式を教えてください。 / stuncloud
> 最近、ちびっと修正してはexe化してデバッグ…が頻発してまして、
> 定番設定をショートカット化してドロップ変換とかしたいんです。

僕もこういうのやることあるんですが、そういう場合はGET_UWSC_NAMEを見て.uwsで実行されたら自身をexe化、.exeで実行されたら本来の処理を行うようにしてます
楽ちんでいいです

No.4118 2017/06/09(Fri) 11:18:25
nextSibling がエラーを起こす / t-kawamura
以下のプログラムが

  COM_Error:例外が発生しました。 32行目: PRINT G_RESULT.nextSibling.outerhtml

となります。

動作環境 GET_UWSC_VER=5.21 GET_UWSC_PRO=0
Windows 7 professional 32bit   Internet Explorer 11 です。

何が問題なのでしょうか?


////////////////////エラーを起こすプログラム////////////////////////////////////

public g_ie,g_result
print " "

///手動で http://pr.nikkei.com/pc/n/index.html をInternet Explorerのカレントタブにする

g_ie=GETACTIVEOLEOBJ("InternetExplorer.Application","日経電子版")
IEwait()
IEshow()
print g_ie.document.title // 「日経電子版ご購読の申し込み」を確認する

MSGBOX("中断1")

for tag1 in g_ie.document.GetElementsByTagName("div")
ifb pos( "/common/images/logo", tag1.outerhtml )
n = 0
tag2s = tag1.GetElementsByTagName("div")
for i = 0 to tag2s.length-1
ifb pos( "/common/images/logo", tag2s.item(i).outerhtml )
n = 1
break
endif
next
ifb n = 0
g_result = tag1
break
endif
endif
next

print g_result.outerhtml
print g_result.parentnode.outerhtml
print g_result.nextSibling.outerhtml

MSGBOX("中断2")
exit



// 起動中のIEを見えるように
procedure IEshow()
g_ie.visible = True

// 位置調整
wid = hndtoid( g_ie.hwnd )
acw( wid )
//acw( wid, 0, 0 )

// 最大化
ctrlwin( wid, ACTIVATE )
//ctrlwin( wid, MAX )

// マウス相対座標をこのブラウザ基準に設定
MouseOrg( wid )
fend


// IEがビジー状態の間待ちます
procedure IEwait()
repeat
sleep( 0.1 )
until ( ! g_ie.busy ) and ( g_ie.readystate = 4 )
fend

No.4098 2017/06/03(Sat) 14:33:04

Re: nextSibling がエラーを起こす / satocha
htmlのソースはこんな感じに書かれています。
<tag1>
 tag1の中身
</tag1>
ここに何かテキスト
<tag2>
 tag2の中身
</tag2>

で、tag1の次要素はtag2ではなく、「ここに何かテキスト」というテキストノードとなることは納得できると思います。

今、「ここに何かテキスト」部分を削除し、改行だけを残すとどうなるでしょう。

あたかもtag1の次要素はtag2であるかのように人の目には見えますが、改行がある以上、機械的には次要素はテキストノード(ただし中身の文字列は空)のままです。テキストノードのinnerHTMLやouterHTMLは取れませんから、エラーになります。

ちなみに昔のIEはここらへん、融通を利かせていたのですが、モダンブラウザ化が進み、HTMLの原則に従うようになってきています。

対処法:あるノードのnextSiblingのノードタイプがテキスト(=3)なら、さらに次を探せばよい。下はループにしなくてもいいと思いますが念のため。

nextElement =g_result
repeat
 nextElement =nextElement.nextSibling
until nextElement.nodeType<>3

print nextElement.outerhtml

No.4101 2017/06/04(Sun) 11:28:36

Re: nextSibling がエラーを起こす / t-kawamura
satocha様
ご指摘のように、tag1 と tag2 の間のノードのことを無視していました。
「next」 は 単純に「次のタグ」と思い込んでいました。


https://syncer.jp/javascript-reference/element/nextelementsibling

もしも2つ目と3つ目のli要素の間に何も文字がなければ、
nextSiblingとnextElementSiblingプロパティの内容は同じになります。
要素だけが必要となる場合、nextElementSiblingプロパティは有用です。


にあるように、最近のブラウザの作り方の変更により、
DOM呼び出しの結果に違いが出ているのだとわかりました。

今回は、nextElementSibling で解決するみたいです。

本当にお世話になりました。ありがとうございました。

No.4109 2017/06/05(Mon) 15:54:05
動作を一つに / れい
初心者の質問で申し訳ありません。

uwscの仕様について質問なのですが、マクロをこまめに作っていき、複数のマクロファイルを一つの動作としてつなげるといったことは可能なのでしょうか?

フリーのuwscを使っており、有料のも
のだとテキストの関数を繋げればよいだけなので可能かと思いますが、フリーのuwscでは複数の保存した動作をまとめることは不可能でしょうか?

No.4107 2017/06/05(Mon) 13:50:22

Re: 動作を一つに / しろまさ
> 有料のものだとテキストの関数を繋げればよいだけなので可能かと思いますが

フリーでもその考えでOKですよ?

別ファイルをCallで繋げることは可能ですが、
Callは関数群の読み込みとしメインで関数の順番を組み立てるのが
管理しやすい使い方だと思います(個人的に)

まあ、使用方法はお好みで。

No.4108 2017/06/05(Mon) 15:11:28
配列データを使用して表作成 / よっさん
配列データを使用して表を作成したいのですが、もっと簡単にできる方法ないでしょうか?
textblockを使って、a1+配列データ1+a2+配列データ2+a3でやるしかないのでしょうか?
a1、a2、a3それぞれファイル作成してfgetで読み取ってやってもいいですが、いまいち非効率のような気がします。
procedureを使ったらできるような気しますがいまいち使い方が分かりません。
何か良い方法ないでしょうか?

textblock a1
<table class="table">
【】
<thead>
<tr>
endtextblock

配列データ1
// <th>ーーーー</th>
// <th></th>
// <th></th>
// <th></th>


textblock a2
</tr>
</thead>
<tbody>
<tr>
endtextblock

配列データ2
// <td></td>
// <td></td>
// <td></td>
// <td</td>


textblock a3
</tr>
</tbody>
</table>
endtextblock

No.4099 2017/06/04(Sun) 07:21:58

Re: 配列データを使用して表作成 / satocha
確かにHTMLのタグを切り張りしていくのは非効率ですね。それに間違いも多そうです。
そういうときは、htmlのことはhtmlに任せるのがラクです。

具体的にはhtmlオブジェクトを生成して、タグ(というか要素)をDomで生成して次々ぶち込んでいって、最後に出来上がったHTMLを取ってくるというやり方です。



//ダミーのHTMLオブジェクトを生成
document =createOleObj("htmlfile")
//空っぽなのでbodyだけ作っておく
body =document.createElement("Body")
document.appendChild(body)
//tableタグを生成
table =document.createElement("table")
//タグ(要素)に属性がある場合は、setAttribute( 要素名, 値 )
table.setAttribute( "class", "table" )
//タグでなくテキストを入れるときはcreateElementではなくcreateTextNodeを使う
text =document.createTextNode("ここにテキストを入れる")
//内側から順に登録
table.appendChild(text)
body.appendChild(table)
//htmlオブジェクトが作ってくれたHTMLを頂く
HTML=document.body.innerHTML
msgbox(HTML)

No.4100 2017/06/04(Sun) 10:20:44

Re: 配列データを使用して表作成 / よっさん
satocha様、返信ありがとうございます。
さっそく参考に作成したみたのですが、配列のデータをうまく反映させる事ができません。th.appendChild(text11[y])がエラーになります。何か良い方法ないでしょうか?

//ダミーのHTMLオブジェクトを生成
dim a[]="bb","cc","dd"
document =createOleObj("htmlfile")
//空っぽなのでbodyだけ作っておく
body =document.createElement("Body")
document.appendChild(body)

//tableタグを生成
table =document.createElement("table")
thead =document.createElement("thead")
tr =document.createElement("tr")
tr1 =document.createElement("tr")
th =document.createElement("th")
tbody =document.createElement("tbody")
td =document.createElement("td")


//タグ(要素)に属性がある場合は、setAttribute( 要素名, 値 )
table.setAttribute( "class", "table" )

//タグでなくテキストを入れるときはcreateElementではなくcreateTextNodeを使う

for i = 0 to 2
dim text11[i] =document.createTextNode(a[i])
next

//内側から順に登録
table.appendChild(text)
body.appendChild(table)
table.appendChild(thead)
thead.appendChild(tr)
tbody.appendChild(tr1)
table.appendChild(tbody)
tr.appendChild(th)
tr1.appendChild(td)

for y = 0 to 2
th.appendChild(text11[y])
next

//htmlオブジェクトが作ってくれたHTMLを頂く
HTML=document.body.innerHTML

No.4102 2017/06/04(Sun) 15:03:49

Re: 配列データを使用して表作成 / よっさん
上の続き。
下記のような結果にしたいです。
何か良い方法ないでしょうか?
<table class="table">
<thead>
<tr>
<th>bb</th>
<th>cc</th>
<th>dd</th>
</tr>
</thead>


<tbody>
<tr>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>

No.4103 2017/06/04(Sun) 15:05:15

Re: 配列データを使用して表作成 / satocha
for y = 0 to 2
th.appendChild(text11[y])
next

この部分って、同じthにテキストノードを3つ作ってますね。

<th>bb</th>
<th>cc</th>
<th>dd</th>
にしたいなら、3つのth要素を生成する必要があります。tbodyの方はいじっていませんが、こんな感じ

//ダミーのHTMLオブジェクトを生成
document =createOleObj("htmlfile")
//空っぽなのでbodyだけ作っておく
body =document.createElement("Body")

//tableタグを生成
table =document.createElement("table")
thead =document.createElement("thead")
tr =document.createElement("tr")
tr1 =document.createElement("tr")
th =document.createElement("th")
tbody =document.createElement("tbody")
td =document.createElement("td")


//タグ(要素)に属性がある場合は、setAttribute( 要素名, 値 )
table.setAttribute( "class", "table" )

//th要素を生成・登録
dim thTexts[]="bb","cc","dd"
dim ths[length(thTexts)]
for i = 0 to length(thTexts)-1
ths[i]=document.createElement("th")
ths[i].appendChild(document.createTextNode(thTexts[i]))
tr.appendChild(ths[i])
next

//その他の要素を登録
body.appendChild(table)
table.appendChild(thead)
thead.appendChild(tr)
tbody.appendChild(tr1)
table.appendChild(tbody)
tr1.appendChild(td)


//htmlオブジェクトが作ってくれたHTMLを頂く
HTML=body.innerHTML
msgbox(HTML)

No.4104 2017/06/05(Mon) 04:30:39

Re: 配列データを使用して表作成 / よっさん
satocha様、貴重な回答ありがとうございます。1次元配列を使用しての処理はうまくできました。最終的にしたい処理というのが、2次元配列を使用しての処理の為、色々やってみたのですがなかなかうまくできません。下記が1次元配列・2次元配列を使用してのコードになります。

[1次元配列]
call C:\Users\a.uws
file="aパス"

file1="bパス"

Dim res = COMMON.test_hairetu1(file)//配列変数res:3つ

Dim res1 = COMMON.test_hairetu1(file1)//配列変数res1:3つ


//ダミーのHTMLオブジェクトを生成
document =createOleObj("htmlfile")
//空っぽなのでbodyだけ作っておく
body =document.createElement("Body")

//tableタグを生成
table =document.createElement("table")
thead =document.createElement("thead")
tr =document.createElement("tr")
tr1 =document.createElement("tr")
th =document.createElement("th")
tbody =document.createElement("tbody")
td =document.createElement("td")


//タグ(要素)に属性がある場合は、setAttribute( 要素名, 値 )
table.setAttribute( "class", "table" )

//th要素を生成・登録
// dim thTexts[]="bb","cc","dd"
dim ths[length(res)]
for i = 0 to length(res)-1
ths[i]=document.createElement("th")
ths[i].appendChild(document.createTextNode(res[i]))
tr.appendChild(ths[i])
next


//th要素を生成・登録
// dim thTexts1[]="bb1","cc1","dd1"
dim ths1[length(res1)]
for i = 0 to length(res1)-1
ths1[i]=document.createElement("td")
ths1[i].appendChild(document.createTextNode(res1[i]))
tr1.appendChild(ths1[i])
next


//その他の要素を登録
body.appendChild(table)
table.appendChild(thead)
thead.appendChild(tr)
tbody.appendChild(tr1)
table.appendChild(tbody)
// tr1.appendChild(td)

//htmlオブジェクトが作ってくれたHTMLを頂く
HTML=body.innerHTML


[2次元配列でためしているコード]

call C:\Users\Desktop\a.uws

hensu="C:\Users\Desktop\管理.xlsx"

EXCEL = CREATEOLEOBJ("Excel.Application")
EXCEL.visible = True
Excel.WorkBooks.Open(FileName :=hensu)
XLACTIVATE( Excel, "Sheet2")
res=XLGETDATA( Excel, "b1:d1")//3つ要素
res1=XLGETDATA( Excel, "b2:d2")//3つ要素

n1=RESIZE(res[3]) //下位次元
n2=RESIZE(res) //上位次元

//3
factor=n1 * n2

n1a=RESIZE(res1[3]) //下位次元
n2a=RESIZE(res1) //上位次元

//3
factor1=n1 * n2


//ダミーのHTMLオブジェクトを生成
document =createOleObj("htmlfile")
//空っぽなのでbodyだけ作っておく
body =document.createElement("Body")

//tableタグを生成
table =document.createElement("table")
thead =document.createElement("thead")
tr =document.createElement("tr")
tr1 =document.createElement("tr")
th =document.createElement("th")
tbody =document.createElement("tbody")
td =document.createElement("td")


//タグ(要素)に属性がある場合は、setAttribute( 要素名, 値 )
table.setAttribute( "class", "table" )


//th要素を生成・登録
dim ths[length(res)]
for i = 1 to length(res)
ths[i]=document.createElement("th")
ths[i].appendChild(document.createTextNode(res[1,i]))
tr.appendChild(ths[i])

next


//th要素を生成・登録
dim ths1[length(res1)]
for i = 1 to length(res1)
ths1[i]=document.createElement("td")
ths1[i].appendChild(document.createTextNode(res1[1,i]))
tr1.appendChild(ths1[i])

next


//その他の要素を登録
body.appendChild(table)
table.appendChild(thead)
thead.appendChild(tr)
tbody.appendChild(tr1)
table.appendChild(tbody)


//htmlオブジェクトが作ってくれたHTMLを頂く
HTML=body.innerHTML
print HTML

No.4105 2017/06/05(Mon) 11:23:38

Re: 配列データを使用して表作成 / satocha
根本的な部分で配列を理解されていないように思います。
resもres1も3要素の1次元配列ですよね。ヘルプの配列の項を見てください。

ここらへんは何をしたいのでしょうか。

たとえば、resではなくres[3]はただの変数と同じですから"n1=RESIZE(res[3])"で添字を取ってきても無意味ですし、RESIZE(res)は最初から3だと分かっています。

n1=RESIZE(res[3]) //下位次元
n2=RESIZE(res) //上位次元

//3
factor=n1 * n2

n1a=RESIZE(res1[3]) //下位次元
n2a=RESIZE(res1) //上位次元

//3
factor1=n1 * n2

No.4106 2017/06/05(Mon) 12:47:37
SLCTBOXのボタンを押すと串刺しになる時がある / 流れ星
現在、Ver5.3.0.2を使用しているのですが、SLCTBOXの表示が手前にあり、後ろにウィンドウが重なっている状況でSLCTBOXのボタンを押すと、串刺しになって後ろのウィンドウもクリックされる時があるのですが、回避方法とかあるのでしょうか?
No.4031 2017/05/26(Fri) 13:48:38

Re: SLCTBOXのボタンを押すと串刺しになる時がある / koi
関数だけで回避できるようなものは無いと思います
  以前自分でも経験したことがありますが
  明確な発生条件特定ができなかった記憶が
  (同じ環境でも出たりでなかったりしたような)

対処案とすれば
ウインドウが重ならないように事前に最小化表示にする
とかいった事を行えば何とかなるような気はします

串刺し状況でクリックされたといってそれが困る
という状況も限られるような気もします
(ゲーム系ならあり得るかもですがその系統の書き込みは禁止)

No.4053 2017/05/29(Mon) 10:23:48

Re: SLCTBOXのボタンを押すと串刺しになる時がある / 流れ星
返信、有難う御座いました。

自分だけの問題ではないようで、一安心しました。

串刺しになる発生頻度は高いのですが、更に稀にですが串刺し後に下方向にスクロールします。

SLCTBOX表示が一覧表示と重なっている為、本来選択してビューア表示している物が違う物に変わってしまうので困ります。
ビューア表示を見ながら作業している為、最小化は好ましくありません。

業務処理の為に作成したスクリプトなので、回避方法を模索しています。

No.4055 2017/05/29(Mon) 21:35:40

Re: SLCTBOXのボタンを押すと串刺しになる時がある / stuncloud
ショートカットキーを設定しマウス使わずキーボードで入力できるようにする、のはどうでしょうか

slctbox(SLCT_BTN, 0, "キーボードで入力", "ボタン&A", "ボタン&B", "ボタン&C")

キーを示すアルファベット、数字、記号の前に「&」を付けることで下線が引かれショートカットキーとして機能するようになります

No.4073 2017/06/01(Thu) 12:08:07

Re: SLCTBOXのボタンを押すと串刺しになる時がある / satocha
下敷きを当てるのはどうでしょう。
DEBUGをtrueにすれば動作が見えます。別スクリプトで起動することを想定していますが、関数化してスレッドで動かしてもいいかもしれません。難点は一瞬、セレクトボックスが点滅することです。

public DEBUG =true
while !getKeyState(vk_q)
 selid =getid( ,"TUslctBox_uwsc", 0.01 )
 if !status( selid, st_isid)
  sleep(0.01)
  continue
 endif
 x=status( selid, st_X )
 y=status( selid, st_Y )
 width=status( selid, st_width )
 height=status( selid, st_height )
 ctrlwin( selid, hide )

 boardid =getid( genPencilBoard(),,-1 )
 acw( boardid, x, y, width, height )
 ctrlwin( boardid, topmost )
 ctrlwin( selid, show )
 ctrlwin( selid, topmost )
 ctrlwin( selid, activate )
 while status( selid, st_isid )
  sleep(0.01)
 wend
 ctrlwin( boardid,close )
wend
msgbox("終了しました")
exitexit
function genPencilBoard()
 gtime =gettime() + "." + g_time_zz2
 src  =replace( bd, "<gtime>", gtime )
 if DEBUG
  src  =replace( src, "$board.opacity", "#$board.opacity" )
  src  =replace( src, "$board.FormBorderStyle", "#$board.FormBorderStyle" )
  src  =replace( src, "#$board.Add_Click", "$board.Add_Click" )
 endif
 powershell( "$src=[Convert]::ToBase64String([System.Text.Encoding]::Unicode.GetBytes( '" + src + "' ));powershell -STA -EncodedCommand $src", true, false )
 result = "PencilBoard_" + gtime
 textblock bd
  Add-Type -AssemblyName System.Windows.Forms
  $board    =new-object System.Windows.Forms.Form
  $board.text   ="PencilBoard_<gtime>"
  $board.FormBorderStyle =[System.Windows.Forms.FormBorderStyle]::NONE
  $board.opacity  =0.01
  #$board.Add_Click({[System.Windows.Forms.messagebox]::show("下敷がクリックされた")})
  $board.showDialog()
 endtextblock
fend

No.4096 2017/06/02(Fri) 13:49:02

Re: SLCTBOXのボタンを押すと串刺しになる時がある / 流れ星
返信、有難う御座いました。

stuncloud様
複数の担当者で作業している為、キーボードでの入力には好みの分かれるところではありますが、選択肢が増えることは良いことなので設定してみます。

satocha様
「下敷きを当てる」というアイディアは持っていたのですが、作り方が分かりませんでした。透明の吹き出しを表示させてSLCTBOXを前面に出そうとしたのですが駄目でした。教えて頂いた方法で試してみます。

No.4097 2017/06/02(Fri) 20:30:15
GetActiveOleeObjが変2 / しろまさ
条件が変わりましたのでお手数ですが、仕切り直しでみなさんの動作状況をお聞かせ下さい。

条件
 DDE(ダブルクリック実行)ではなく、CreateOleObjで開いたエクセルに対して
 名前指定でGetActiveOleObjをするとエラーが出ます。
 (タスクマネージャ コマンドラインで /automation -Embedding が付いた場合)
 
 下記@やAで開いたエクセルを別プロセスからBでObj取得を試みた場合です。

環境 
 win7 pro x86(32bit) Excel2013 UWSCv5302

// @_Create_Get()
// A_Open_Get()
  B_GetOnly("Book1.xls")

Procedure  @_Create_Get()
  xl = CreateOleObj("Excel.Application")
  xl.WorkBooks.Add
  xl.Visible = TRUE
  xl = GetActiveOleObj("Excel.Application", "Book1") // Com Error
  xl.range("A1").value = GetTime()
FEnd

Procedure  A_Open_Get()
  xl = CreateOleObj("Excel.Application")
  xl.WorkBooks.Open(GET_CUR_DIR + "\Book1.xls")
  xl.Visible = TRUE
  xl = GetActiveOleObj("Excel.Application", "Book1.xls") // Com Error
  xl.range("A2").value = GetTime()
FEnd

Procedure  B_GetOnly(fn = null)
  xl = GetActiveOleObj("Excel.Application", fn)
  xl.range("A3").value = GetTime()
FEnd

No.4078 2017/06/01(Thu) 17:07:55

Re: GetActiveOleeObjが変2 / stuncloud
Win 10 x64 1703
Excel 2010

> @_Create_Get()
のみ再現しますね、2と3は問題なく動作します (3は2でファイルを開いた状態で実行)
xlsとxlsxの両方で試してみました

No.4080 2017/06/01(Thu) 17:21:34

Re: GetActiveOleeObjが変2 / しろまさ
stuncloudさん、ありがとうございます。
@だけですか。私の環境では@AB全てCom Errorが出るんですよね。。

No.4081 2017/06/01(Thu) 17:31:32

Re: GetActiveOleeObjが変2 / しき
GetActiveOleObj("Excel.Application", fn) の第二引数は、
確か、Excelの場合はファイル名を指定して、UWSCは履歴を利用して
Excel COMオブジェクトを取得する仕様だったと記憶しています。
ですから、Excelの履歴にないファイルはエラーになるのだと思います。
この前提で考察すると、

@は必ずエラーになる
  Excelを起動して、Ctrl+N で新規のワークブックを開くと自動で
  Book1, Book2 の名前が付きます。
  これはファイルではないので、履歴になく取得できない


Aは一度目はエラーになる
  「Book1.xls」を一度もExcelで開いたことがない場合はエラーになりました。
  一度でも「Book1.xls」を手動で開いた後なら、Excelの履歴に残るので、取得できる。
  その後「Book1.xls」と .uws を別のフォルダに移動して実行すると、エラーになりました
  これは、「Book1.xls」のパスが変わって履歴にないからかな
 
  Excelの履歴は、Excel上で、Alt+F で現れるメニューの中で確認できます。(2003, 2007)
  Excelの履歴を削除(Excelのオプション設定やレジストリを変更)した後は、
  このAの方法でまたエラーになりました。


Bは履歴に残らない方法で起動したExcelならエラーになる。例えばA
 xl = CreateOleObj("Excel.Application")
 xl.WorkBooks.Open(GET_CUR_DIR + "\Book1.xls")
 では Excelの履歴に残らないようです。

No.4087 2017/06/01(Thu) 19:06:19

Re: GetActiveOleeObjが変2 / しゅん
win7 pro x86(32bit) Excel2013 UWSCv5302

しきさんの書かれている通りでした。
初回は、@AB全てエラー。(BはAで開いた状態)
ダブルクリックで開いた後だと、@だけエラー。

#Excel.Application.15だと、第二引数は無効なのか、、、。

No.4090 2017/06/01(Thu) 19:45:35

Re: GetActiveOleeObjが変2 / しろまさ
しきさん、超有力情報ありがとうございます!

履歴に無いのが原因なら履歴につっこみゃいいじゃんと弄り倒して挫折 orz なんだよT01D2・・て。。
となるとCreate操作後に閉じて関連付け起動させ、別プロセス操作という流れか、
もしくは全て関連付け起動させ、GetActiveのみで操作を行う流れかどちらかですね。

でも対策が解ったので、明日作成してみます。
ありがとうございました(しゅんさんも検証ありがとうございました)

(なんだよ Olee て。。)

No.4091 2017/06/01(Thu) 19:58:06

Re: GetActiveOleeObjが変2 / しき
Excel VBA を学ぶなら moug モーグ | 即効テクニック | ブックを開く(Openメソッド)
https://www.moug.net/tech/exvba/0060049.html
>AddToMRU     Trueで最近使ったファイルリストに追加 [省略可能]

xl = CreateOleObj("Excel.Application")
xl.WorkBooks.Open(FileName:=GET_CUR_DIR + "\Book1.xls", AddToMru:=true)
xl.Visible = TRUE
xl = GetActiveOleObj("Excel.Application", "Book1.xls")
xl.range("A2").value = GetTime()

No.4093 2017/06/01(Thu) 21:29:38

Re: GetActiveOleeObjが変2 / しろまさ
しきさん、ありがとうございます。

動作確認しました。完璧です。
OpenとSaveusに, AddToMru:=true を追加するだけで望む動作になりました。

基本関数にそんな引数があったとは全然考えもしませんでした。
まだまだ調べ方が甘かったようです。大変勉強になりました。ありがとうございました。

No.4094 2017/06/02(Fri) 07:58:17
ボタンのおし方(サイ / テニスじいさん
お世話になります。
やはり動きません。下のようにしてみました。教えていただいた部分はよくわかりませんのでブラックボックスとして貼り付けてあります。何卒よろしくお願いします。





// テニスコートの抽選申込み点検


GetTime
nn=G_TIME_YY
mm=G_Time_MM


// 日付の読み込み
    year=nn
month=mm+3
if month> 12 then
month=month-12
year=year+1
endif






IE = CreateOLEObj("InternetExplorer.Application")
IE.Visible = True



愛知(IE)


///


id="01007390"
paswd="Aich0075"
  


施設予約システムに入る(IE)


IESetData(IE,id,"layoutChildBody:childForm:userid")         // Id
IESetData(IE,paswd,"layoutChildBody:childForm:passwd") // 暗証番号
ログイン(IE)
//

   施設名から探す(IE)
   
   上記の内容で検索(IE)

   小幡緑地(IE)

no=17
日付の選択(IE,no)

n=7
   次の5件(IE)

   アイコンクリック(ie,"庭球場7",18)

   カートに追加(IE)



 

 
 






//================アイコンクリック===================== 
procedure アイコンクリック(ie, 施設, 時) // 施設は部分一致で良いです
 tablebg2 = ie.document.querySelectorAll(".tablebg2")
 for i = 0 to tablebg2.length - 1
  inamem = tablebg2.item(i).querySelector("span[id=<#DBL>inamem<#DBL>]")
  if inamem <> NULL then
   if pos(施設, inamem.innerText) then
    hourlable = tablebg2.item(i).querySelectorAll("span[id=<#DBL>hourlable<#DBL>]")
    for j = 0 to hourlable.length - 1
     if hourlable.item(j).innerText = 時 then
      tablebg2.item(i).querySelectorAll("img").item(j).click()
      break
     endif
    next
    break
   endif
  endif
 next
fend


//=============================================================

// ボタン

//=============================================================

// ======愛知ネットにはいる========

Procedure 愛知(ie)
IE.Navigate("https://www4.pref.aichi.jp/yoyaku/index.jsp")
BusyWait(ie)
Fend

//========施設予約システムに入る=================
Procedure 施設予約システムに入る(IE)
IE.navigate("javaScript: doSubmit('childForm', 'doLogin');" )
BusyWait(IE)
Fend

//================ログイン======================
Procedure ログイン(IE)
IE.document.getElementById("doLogin").click()
BusyWait(IE)
sleep(0.2)
Fend

//================施設名から探す====================== goNameSearch
Procedure 施設名から探す(IE)
IE.document.getElementById("goNameSearch").click()
BusyWait(IE)
sleep(0.2)

Fend

//================上記の範囲で検索======================
Procedure 上記の内容で検索(IE)
IE.document.getElementById("doSearch").click()
BusyWait(IE)
sleep(0.2)

Fend
//================小幡緑地====================== 
Procedure 小幡緑地(IE)
IESetData(IE,TRUE,"layoutChildBody:childForm:resultItems:2:doSelect")
BusyWait(IE)
Fend



//================対象館一覧を表示======================
Procedure 対象館一覧(IE)
IE.document.getElementById("doSearch").click()
BusyWait(IE)
Fend

//================施設の決定======================
Procedure 施設の決定(IE)
IE.document.getElementById("doAreaSet").click()
BusyWait(IE)
Fend

//================日付の選択======================
Procedure 日付の選択(IE,no)

 ban=no+""
id = GETID("空き状況/ネットあいち施設予約システム - Internet Explorer", "IEFrame", -1)
SLEEP(0.2)
nmon="次月"
CLKITEM(id,nmon,CLK_LINK)
CLKITEM(id,nmon,CLK_LINK)
CLKITEM(id, ban, CLK_LINK)
BusyWait(ie)
Fend






//================カートに追加====================== 
Procedure カートに追加(IE)
IESetData(IE,TRUE,"layoutChildBody:childForm:rsvEmptyStateItems:1:doAddCart")
BusyWait(IE)
Fend


//========== 時間帯============

Procedure 時間帯(IE,moji)
nn=pos("a",moji)
if nn>0 then IESetData(IE,True,"layoutChildBody:childForm:lotEmptyStateListItemsItems:0:lotEmptyStateListItems--:0:chkKom-1")
nn=pos("b",moji)
if nn>0 then  IESetData(IE,True,"layoutChildBody:childForm:lotEmptyStateListItemsItems:0:lotEmptyStateListItems--:1:chkKom-1")
nn=pos("c",moji)
if nn>0 then IESetData(IE,True,"layoutChildBody:childForm:lotEmptyStateListItemsItems:0:lotEmptyStateListItems--:2:chkKom-1")
nn=pos("d",moji)
if nn>0 then IESetData(IE,True,"layoutChildBody:childForm:lotEmptyStateListItemsItems:0:lotEmptyStateListItems--:3:chkKom-1")
BusyWait(IE)
Fend

//================申し込み確定======================
Procedure 申し込み確定(IE)
IE.document.getElementById("doDateTimeSet").click()
BusyWait(IE)
sleep(0.2)
Fend

//================利用目的====================== ここ
Procedure 利用目的(IE)
 IESetData(IE,"硬式テニス","layoutChildBody:childForm:makeList")
 IESetData(IE,"19","layoutChildBody:childForm:applycnt")     //人数 
BusyWait(IE)
Fend

//================抽選内容の確認=========申し込みをする=============
Procedure 抽選内容の確認(IE)
 IE.document.getElementById("doConfirm").click()
 BusyWait(IE)
 sleep(0.2)
 //IE.document.getElementById("doOnceFix").click() //申し込み←原因はここです。
 //IEの操作(COM)にて、ダイアログが出ると動作が停止する  #N25
 //http://www.uwsc.info/faq.html#N25
 Thread PopupWin("Web ページからのメッセージ")
 IESETDATA(IE,True,"","抽選を申込む")
 BusyWait(IE)
 sleep(0.2)
Fend
//--------------
Procedure PopupWin(StrLine)
  id = GETID(StrLine, "#32770", -1)
  SLEEP(1)
  Check = CLKITEM(id, "OK", CLK_BTN)

Fend

//================別の日付======================
Procedure 別の日付(IE)
IE.document.getElementById("doDateSearch").click()
BusyWait(IE)
Fend

//================ログアウト======================
Procedure ログアウト(IE)
IE.document.getElementById("doLogout").click()
BusyWait(IE)
sleep(0.2)
Fend

//===================== 花火====================
procedure 花火(ie)
ie.navigate("http://phoenix911.sub.jp/flashanime/hanabi.swf")
BusyWait(ie)
Fend

//===============抽選申し込みの一覧へ======================
Procedure 抽選申し込みの一覧へ(IE)
IE.document.getElementById("goLotStatusList").click()
BusyWait(IE)
Fend

//================次の5件======================
Procedure 次の5件(IE)
IE.document.getElementById("goNextPager").click()
BusyWait(IE)
sleep(0.2)

Fend


//================1へ======================
Procedure マイページ(IE)
IE.navigate("javascript: doMenuBtn('MYPAGE');" )
BusyWait(IE)
Fend

//================予約状況の一覧へ======================
Procedure 予約状況の一覧へ(IE)
IE.document.getElementById("goRsvStatusList").click()
BusyWait(IE)
sleep(0.2)
Fend

//================確定作業====================== goLotSerach
Procedure 確定作業(IE)
IE.document.getElementById("goLotElectConfirm").click()
BusyWait(IE)
sleep(0.2)

Fend

//================同意する====================== goLotSerach
Procedure 同意する(IE)
IE.document.getElementById("yeslabel").click()
BusyWait(IE)
sleep(0.2)

Fend


//================当選結果の確定====================== goLotSerach
Procedure 当選結果の確定(IE)
IE.document.getElementById("doOnceLockFix").click()
BusyWait(IE)
sleep(0.2)

Fend
//================一覧へもどる====================== goLotSerach
Procedure 一覧へもどる(IE)
IE.document.getElementById("jumpLotStatusList").click()
BusyWait(IE)
sleep(0.2)

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

//=================================

No.4083 2017/06/01(Thu) 18:16:12

Re: ボタンのおし方(サイ / しろまさ
// [7]が[7]で指定されているから(全角と半角の違い)
アイコンクリック(ie,"庭球場7",18)

No.4089 2017/06/01(Thu) 19:13:31

Re: ボタンのおし方(サイ / テニスじいさん
ありがとうございました。とりあえずうまくいきました。またよろしくお願いします。
No.4092 2017/06/01(Thu) 20:24:55


 過去ログ(〜2017/03/22)・検索ツール


以下のフォームに記事No.と投稿時のパスワードを入力すれば
投稿後に記事の編集や削除が行えます。
200/200件 [ ページ : << 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ... 20 >> | 過去ログ ]