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

エクセルブック間でXLSETDATAを使って列の貼り付けをしたい。 / sen
いつもお世話になっております。
XLSETDATAを使って転記していたのですが、うまくいきません。
思い切って、エクセルのマクロを実行する形でやったら、簡単にできました。
しかし、XLSETDATAのやり方で試行錯誤を繰り返していたので、残念な思いもあります。
もし宜しければ、ご教授願います。


//@XLSETDATAを使用した場合 うまく動かない・・・A:Hまでならうまく動く
Excel = XLOPEN("C:\Nrb0000.CSV")
元 = XLGETDATA(Excel,"A:AQ")
XLCLOSE(Excel,TRUE)

Excel2 = XLOPEN("C:\ピポット転記売上明細.xlsm")
XLACTIVATE(Excel2, "明細")
XLSETDATA(Excel2,元,"A:AQ")
XLCLOSE(Excel2)


//Aエクセルのマクロを使った場合・・・うまく動く
DIM Excel2 = XLOPEN("C:\Nrb0000.CSV")
DIM Excel = XLOPEN("C:\ピポット転記売上明細.xlsm")
XLACTIVATE(Excel, "明細")
excel.run("転記")
XLCLOSE(Excel)

//エクセルマクロ
//Sub 転記()
// Application.DisplayAlerts = False
// Windows("Nrb0000.CSV").Activate
// Columns("A:AQ").Select
// Selection.Copy
// Windows("ピポット転記売上明細.xlsm").Activate
// Columns("A:AQ").Select
// ActiveSheet.Paste
//End Sub

No.3820 2017/04/30(Sun) 23:03:52

Re: エクセルブック間でXLSETDATAを使って列の貼り付けをしたい。 / しき
どの行でエラーになりますか?
私の環境では、A:AQはエラー A:J はOKでした
Excel2007 win7x64 PC core i5 メモリ8GB
データ量が大きいとエラーになるのでは?メモリー量依存かも

Excel = XLOPEN("C:\Nrb0000.CSV")
//元 = XLGETDATA(Excel,"A:AQ")   //エラー
//元 = XLGETDATA(Excel,"A:J")   //OK
//元 = XLGETDATA(Excel,"A:B")   //OK
元 = XLGETDATA(Excel,"A1:AQ4")  //OK

msgbox(length(元) +", "+ length(元[1])) //4, 43

No.3824 2017/05/01(Mon) 16:02:11

Re: エクセルブック間でXLSETDATAを使って列の貼り付けをしたい。 / sen
ありがとうございます。

元 = XLGETDATA(Excel,"A:AQ")
でエラーまずなります。

列を少なくすると、
XLACTIVATE(Excel2, "明細")
でなる時もあります。
この行を削除してうまくいく時もあります。

最後に、
XLSETDATA(Excel2,元,"A:AQ")
でなります。

システムは、
WINDOWS10 HOME64
EXCEL2016
I5-6400 2.7GHZ
8GB
です。

No.3831 2017/05/01(Mon) 22:56:53

Re: エクセルブック間でXLSETDATAを使って列の貼り付けをしたい。 / routa
行番号を忘れずに付けましょう。
元 = XLGETDATA(Excel,"A1:AQ5")
XLSETDATA(Excel2,元,"A1")

No.3832 2017/05/02(Tue) 00:11:46

Re: エクセルブック間でXLSETDATAを使って列の貼り付けをしたい。 / しき
Excelでマクロ実行してもエラーが起きます。
この方法を使うなら、範囲を狭くするしかないでしょう

//エクセルマクロ
Sub Macro1()
Set o_range = Range("A:AQ")
v = o_range.Value

MsgBox UBound(v)
End Sub

//エラー内容
実行時エラー '7':

メモリが不足しています。

No.3838 2017/05/02(Tue) 17:05:03

Re: エクセルブック間でXLSETDATAを使って列の貼り付けをしたい。 / sen
そうですか。
残念です。

取り敢えず、パターンAで動いているみたいなので、これで頑張ります。

初めて使ったuwscのxlopenとexcel.runの組合せは、ワクワクします。
僅か4行で二つのブックの操作をできるのは偉大で、これならスケジュール設定も可能だし、
フルパスは、以前教えて頂いたsendstr(0,param_str[0])で楽々、収得。
エクセルマクロは、自動記録です。

今まで、データベースから抽出されたcsvに対して計算して付け加えていましたが、
これなら、エクセルの関数もピポットテーブルも、作り込んだのを使い回せます。

xlopenとexcel.runの組合せで可能性無限大です。

ありがとうございました。

No.3848 2017/05/02(Tue) 23:07:57
リンク先へ上手く行けない / RAM
IESETDATA(IE,TRUE,"TAG=IMG","○○○")

上記の式を使って、URLを貼っているのですが回してみるとそのページに飛ばず。

IE.document.links.item(○).click(○)

こちらの式を使ってみると、別のページへ飛び、これ以降の操作ができなくなってしまいます。


解決する方法はあるのでしょうか?

No.3795 2017/04/25(Tue) 12:33:51

Re: リンク先へ上手く行けない / stuncloud
> IESETDATA(IE,TRUE,"TAG=IMG","○○○")
"TAG=IMG" としてるからでは…?

> 別のページへ飛び、これ以降の操作ができなくなってしまいます。
変数IEと新しく開いたページが別物なんじゃないかなって気がします
IE2 = getactiveoleobj("InternetExplorer.Application", "新しく開いたページのタイトル")
として以降IE2で操作しましょう
(古い変数IE(とそこに表示してるページ)を使わないのであればそっちに上書きしちゃっても別に良いですよ)

No.3797 2017/04/25(Tue) 16:45:20

Re: リンク先へ上手く行けない / RAM
返信ありがとうございます。

その新しく開いたページがランダムの場合、ページのタイトルが確定しないのですが、どうすればよいでしょうか?
また、上書き方法がよくわからないので、そちらも合わせてお教えいただけるとありがたいです。

No.3800 2017/04/26(Wed) 00:53:16

Re: リンク先へ上手く行けない / しゅん
> その新しく開いたページがランダムの場合、ページのタイトルが確定しないのですが、どうすればよいでしょうか?
状況により最適な方法は異なります。
もうちょっと具体的に回答してもらえないと、回答はつかないと思いますよ。


> また、上書き方法がよくわからないので、そちらも合わせてお教えいただけるとありがたいです。

IE2 = getactiveoleobj("InternetExplorer.Application", "新しく開いたページのタイトル")
と書くのではなく
IE = getactiveoleobj("InternetExplorer.Application", "新しく開いたページのタイトル")
と書く、という意味です。
IEという変数の中身が、元のページから新しいページになります。

No.3801 2017/04/26(Wed) 09:15:40

Re: リンク先へ上手く行けない / RAM
返答ありがとうございます。

具体的ですか…一日置にそのリンク先のページが変わる、という感じだと伝わるでしょうか?

No.3814 2017/04/28(Fri) 19:09:21

Re: リンク先へ上手く行けない / しゅん
残念ながら私には伝わりません。

どこのページなのか具体的に言った方が良いと思いますが、、、それでも実際にあなたがやりたいことを具体的に表現しているとは限らなかったりもします。
難しいですね。

No.3821 2017/05/01(Mon) 08:53:08

Re: リンク先へ上手く行けない / RAM
説明不足で申し訳ありません。

IE2で新しく開いたタイトル(リンク先)がランダムの場合。
IE = getactiveoleobj("InternetExplorer.Application", "新しく開いたページのタイトル")

この式の「新しく開いたページのタイトル」が確定しない場合。

この場合はどうすればよいでしょうか?


このような文だと伝わるでしょうか?

No.3843 2017/05/02(Tue) 22:32:30
IEのボタンが押せない / テニスじいさん
IE = CreateOLEObj("InternetExplorer.Application")
IE.Visible = True
愛知(IE)

id="01068868"
paswd="Aich0075"

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

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

ログイン(IE)


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

// ボタン

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

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

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.navigate("javaScript:input type="submit" id="doLogin" name="layoutChildBody:childForm:doLogin" )
BusyWait(IE)
Fend


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

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

ここに出てくるログインのボタンがおせません。 ソースではうしろに    というのがついていますが、これをどうしたものかもわかりません。javascriptは素人です。なんとか助けてください。よろしくおねがいします。

No.3830 2017/05/01(Mon) 21:30:19

Re: IEのボタンが押せない / しろまさ
//IE.navigate("javaScript:input ・・・

IE.document.getElementById("doLogin").click()
に変更。

No.3837 2017/05/02(Tue) 14:19:04

Re: IEのボタンが押せない / テニスじいさん
ありがとうございました。とりあえず一段クリアしました。助かりました。
No.3839 2017/05/02(Tue) 17:48:18
(No Subject) / しんじ
id1=GETID("1",)
id = GetId("2")
CTRLWIN(id, SHOW)
CTRLWIN(id, ACTIVATE)
IFB ((STATUS(id1, ST_ACTIVE)="False") OR (STATUS(id1, ST_TITLE)<>"")) AND (STATUS(id, ST_ACTIVE)="True")

(1がアクティブかまたは1というタイトルがないか)と(2がアクティブかどうか)
上記のことをやりたいのですができません
よろしければ回答よろしくお願いします

No.3828 2017/05/01(Mon) 18:35:08

Re: / 俄プログラマー
一度に全てやろうとせず1つずつ解決してみてください。

例1)1がアクティブなら「アクティブです」 そうでないなら「アクティブではないです」と表示させる

例2)1というタイトルがあれば「ある」 なければ「ない」と表示させる

これらをクリアしてから組み合わせてください。
なぜそうするかと言うと複雑な条件をより単純化させる事により問題点が見えてくるからです。

No.3829 2017/05/01(Mon) 18:40:15
フォームに数値を入れたい / テニスじいさん
https://www4.pref.aichi.jp/yoyaku/view/user/c039HomeIndex.html?te-uniquekey=15bc2f8dc39

上記のページの「ログインする」 を押して出てきたフォームにidとパスワードを入れたいのですが下記のようにやってもうまくいきません。以前はうまくいっていたのですが、その時にはフォームはありませんでした。


IESetData(IE,id,"userid")         // Id
IESetData(IE,paswd,"passwd") // 暗証番号

No.3825 2017/05/01(Mon) 16:54:35

Re: フォームに数値を入れたい / テニスじいさん
すみません。解決しました。
No.3826 2017/05/01(Mon) 17:23:14
2つのIEcomに接続した際に、それぞれIDを取得する方法 / ジンギスカン
現状、スレッドと通常の接続でIE接続してからid1=getid("Internet Explorer")でIDを取得しています。
GET_ACTIVE_WINやGET_FROMPOINT_WINも考えてみましたが、2つIEに接続するのでうまくIDを取得できないです。何か良い方法はないでしょうか?

THREAD ExecuteC()

FOR i = 1 TO 8 STEP 2 //1357

path="http://keaaaaaaaaaaaaaaaa"
TRY
   IE = CREATEOLEOBJ("InternetExplorer.Application")
  EXCEPT
   EXEC("C:\Program Files\Internet Explorer\iexplore.exe")
   IE = GETACTIVEOLEOBJ("InternetExplorer.Application")
  ENDTRY
IE.visible = true
RESULT = IE
IE.navigate(url)

SLEEP(0.5)
ClkItem(GetID("Windows", "#32770", 1), "OK")
ClkItem(GetID("Windows", "#32770", 1), "このページから移動")
ClkItem(GetID("Windows", "#32770", 1), "プログラムを終了します")
ClkItem(GetID("Windows", "#32770", 1), "プログラムを再起動します")
ClkItem(GetID("ページからのメッセージ", "#32770", 1), "OK")
ClkItem(GetID("ページからのメッセージ", "#32770", 1), "このページから移動")
ClkItem(GetID("ページからのメッセージ", "#32770", 1), "プログラムを終了します")
ClkItem(GetID("ページからのメッセージ", "#32770", 1), "プログラムを再起動します")
CONST TIME_OUT = 60
tm = Gettime()
REPEAT
SLEEP(1)
ifb Gettime() - tm > TIME_OUT
break
endif
UNTIL (! IE.BUSY) AND (IE.READYSTATE=4)
SLEEP(0.5)
//  id=getid("転職・求人情報- DODA - Internet Explorer","IEFrame")
id=getid("Internet Explorer")//GET_ACTIVE_WIN
ctrlwin(id, TOPNOACTV)
ACW(id,960,359,344,365,0)
SLEEP(0.5)
id1=getid("Internet Explorer")//GET_ACTIVE_WIN
ACW(id1,0,0,w,G_SCREEN_H)

文字列全体=IE.document.body.innerhtml

IE.quit

next


procedure ExecuteC()


path="http://keaaaaaaaaaaaaaaaa"
FOR i = 2 TO 8 STEP 2 //2468
TRY
   IE1 = CREATEOLEOBJ("InternetExplorer.Application")
  EXCEPT
   EXEC("C:\Program Files\Internet Explorer\iexplore.exe")
   IE1 = GETACTIVEOLEOBJ("InternetExplorer.Application")
  ENDTRY
IE1.visible = true

IE1.navigate(path)

SLEEP(0.5)
ClkItem(GetID("Windows", "#32770", 1), "OK")
ClkItem(GetID("Windows", "#32770", 1), "このページから移動")
ClkItem(GetID("Windows", "#32770", 1), "プログラムを終了します")
ClkItem(GetID("Windows", "#32770", 1), "プログラムを再起動します")
ClkItem(GetID("ページからのメッセージ", "#32770", 1), "OK")
ClkItem(GetID("ページからのメッセージ", "#32770", 1), "このページから移動")
ClkItem(GetID("ページからのメッセージ", "#32770", 1), "プログラムを終了します")
ClkItem(GetID("ページからのメッセージ", "#32770", 1), "プログラムを再起動します")
CONST TIME_OUT = 60
tm = Gettime()
REPEAT
SLEEP(1)
ifb Gettime() - tm > TIME_OUT
break
endif
UNTIL (! IE1.BUSY) AND (IE1.READYSTATE=4)
SLEEP(0.5)
//  id=getid("転職・求人情報- DODA - Internet Explorer","IEFrame")
id=getid("Internet Explorer")//GET_ACTIVE_WIN
ACW(id,w,0,w,G_SCREEN_H)
// ctrlwin(id, TOPNOACTV)
// ACW(id,960,359,344,365,0)
SLEEP(0.5)
IE1.quit
next
fend

No.3790 2017/04/24(Mon) 13:22:34

Re: 2つのIEcomに接続した際に、それぞれIDを取得する方法 / stuncloud
hndtoidを使います

id1 = hndtoid(ie1.hwnd)
id2 = hndtoid(ie2.hwnd)

No.3793 2017/04/24(Mon) 18:38:09

Re: 2つのIEcomに接続した際に、それぞれIDを取得する方法 / ジンギスカン
stuncloud様、回答ありがとうございます。
hndtoid利用で無事、ID操作できました。

No.3823 2017/05/01(Mon) 12:07:08
procedure内で配列ファイルの内容を取得してfor文で回し、指定のファイルに書込 / ジンギスカン
配列ファイルに東京<#CR>名古屋<#CR>大阪とあります。
procedure内で配列ファイルの内容を取得してfor文で回し、指定のファイルに書込をしたいのですが、1つ目の東京がすべて書込になってしまいます。下記のようなコードでスレッドを利用しています。


THREAD ExecuteC()


FOR y = 1 TO 8 STEP 2

path=url1+y+url2
Dim IE = COMMON.cre3(path)


文字列全体=IE.document.body.innerhtml

IE.quit
gettime()
現在の日付=G_TIME_YY+"/"+G_TIME_MM+"/"+G_TIME_DD

Public regvb=CREATEOLEOBJ("VBScript.RegExp")

//書込ファイル
fid1="C:\Users\aruke\Desktop\偶数.html"

file1 = FOPEN(fid1, F_READ or F_WRITE8)

Pattern="パターン名"

Matches=regvb_Execute(文字列全体, Pattern)

for i = 0 to Matches.count-1
FPUT(file1, res[count]+":"+Matches.Item(i).SubMatches(0))
next

FCLOSE(file1)
count=count+2
next

file1 = FOPEN(fid1, F_READ or F_WRITE8)
moji=fget(file1,-2)
moji = REPLACE(moji, "<#CR>", "")
fput(file1,moji,F_ALLTEXT)
fclose(file1)


procedure ExecuteC()

path="C:\Users\Desktop\配列ファイル"


fid = FOPEN(path,F_READ or F_WRITE)
list = FGET(fid,F_LINECOUNT) //---ファイル内の行数を返す
Dim アカウント[list] //---配列の宣言
count=1
for i = 0 to list-1
 アカウント[i] = FGET(fid,count) //---配列:アカウントに挿入
count=count+1
next
FCLOSE(fid)
res = slice(アカウント, 0, length(アカウント)-1)

FOR i = 3 TO 8 STEP 2 //357

path=url1+i

TRY
   IE1 = CREATEOLEOBJ("InternetExplorer.Application")
  EXCEPT
   EXEC("C:\Program Files\Internet Explorer\iexplore.exe")
   IE1 = GETACTIVEOLEOBJ("InternetExplorer.Application")
  ENDTRY
IE1.visible = true

IE1.navigate(path)

SLEEP(0.5)
ClkItem(GetID("Windows", "#32770", 1), "OK")
ClkItem(GetID("Windows", "#32770", 1), "このページから移動")
ClkItem(GetID("Windows", "#32770", 1), "プログラムを終了します")
ClkItem(GetID("Windows", "#32770", 1), "プログラムを再起動します")
ClkItem(GetID("ページからのメッセージ", "#32770", 1), "OK")
ClkItem(GetID("ページからのメッセージ", "#32770", 1), "このページから移動")
ClkItem(GetID("ページからのメッセージ", "#32770", 1), "プログラムを終了します")
ClkItem(GetID("ページからのメッセージ", "#32770", 1), "プログラムを再起動します")
CONST TIME_OUT = 60
tm = Gettime()
REPEAT
SLEEP(1)
ifb Gettime() - tm > TIME_OUT
break
endif
UNTIL (! IE1.BUSY) AND (IE1.READYSTATE=4)
SLEEP(0.5)


文字列全体=IE1.document.body.innerhtml


Public regvb=CREATEOLEOBJ("VBScript.RegExp")

//書込ファイル
fid11="C:\Users\aruke\Desktop\奇数.html"


file11 = FOPEN(fid11, F_READ or F_WRITE8)

Pattern="Pattern名"

Matches=regvb_Execute(文字列全体, Pattern)

count1=1

for i = 0 to Matches.count-1
FPUT(file11, res[count1]+":"+Matches.Item(i).SubMatches(0))
next

FCLOSE(file11)

count1=count1+2

NEXT     
fclose(file11)
fend

//正規表現
Function regvb_Execute(str, Pattern, IgnoreCase=TRUE, Global=TRUE)
regvb.IgnoreCase=IgnoreCase
regvb.Global=Global
regvb.Pattern=Pattern
Matches=regvb.Execute(str)
Result=Matches
Fend

No.3822 2017/05/01(Mon) 12:05:29
(No Subject) / しんじ
fileID = FOPEN("sample.txt", F_READ)
str = FGET(fileID, 1)
KBD(VK_ + str)
str2 = FGET(fileID, 2)
KBD(VK_ + str2)
str3 = FGET(fileID, 3)
KBD(VK_ + str3)
str4 = FGET(fileID, 4)
KBD(VK_ + str4)
str5 = FGET(fileID, 5)
KBD(VK_ + str5)
FCLOSE(fileID)

TXT内容
H
E
L
L
O

原理的にはこのようなことをしたいのですが
どうすればいいかわかりません
よろしければご回答よろしくお願いします
コピペではなくKBDのようなクリックでお願いします

No.3816 2017/04/28(Fri) 21:05:42

Re: / 俄プログラマー
SLEEP(3) //必要に応じて

fileID = FOPEN("sample.txt", F_READ)
for i = 1 to FGET(fileID, -1)
 KBD(ASC(FGET(fileID,i)))
next
FCLOSE(fileID)

No.3817 2017/04/29(Sat) 02:04:41

Re: / しんじ
俄プログラマー様
ありがとうございます
私の願った通りの動きでした

No.3819 2017/04/29(Sat) 17:36:31
ポップアップが閉じれません。 / まりも
使用環境はwin10
IE11.106614393
を使用してIEでUWSCマクロを作っているのですが、
よくあるconfirmのポップアップが閉じれなくて困っています。

PROを使用していてデバッガを使っているのですが、
ポップアップが出ると固まります。

ポップアップは「Web ページからのメッセージ」で#32770の
よくあるやつなのです。

登録ボタンのようなものを押すと、確認としてポップアップが出るのですが、
UWSCがボタンを押した後、固まり。

実際のポップアップを押すと再度動きはじめます。

ポップアップのjavascriptは以下の内容でした。
function fnConfirm() {
var msg = "この内容で登録しても宜しいでしょうか?\n";
if(window.confirm(msg)){
return true;
}
return false;
}

UWSC抜粋
PRINT "check"
IESETDATA( IE,1,"subm")
PRINT "check2"

IESETDATA( IE,1,"subm")
でUWSCが固まり、画面のポップアップのキャンセルを押すと
PRINT "check02"が確認できます。

どのように対応できるか、お教えいただけませんでしょうか。
よろしくお願いいたします。

No.3812 2017/04/28(Fri) 13:44:58

Re: ポップアップが閉じれません。 / routa
FAQを見ましょう。
IEの操作(COM)にて、ダイアログが出ると動作が停止する  #N25

No.3815 2017/04/28(Fri) 20:09:55

Re: ポップアップが閉じれません。 / まりも
見落としていました。

早速ためしたところ問題なく動きました。

ありがとうございました。

No.3818 2017/04/29(Sat) 10:42:52
処理の分岐 / じぇす
画像Lを認識、1分間その画像を認識できれば処理A、1分以内に消えたら処理Bに移るようにするにはどのように書けばいいのでしょうか?
No.3810 2017/04/28(Fri) 06:28:40

Re: 処理の分岐 / しゅん
e=GETTIME()+60;WHILE (GETTIME()<e)*CHKIMG("画像L.bmp");WEND;MSGBOX("処理"+CHR(65+!CHKIMG("画像L.bmp")))


// すみません、上記は冗談です。
// 通常は、下のように書きます。
// 基本、自分で書いたスクリプトのない回答には答えない主義ですが、ちょっといたずらしたくなったもので、、、

DIM et = GETTIME() + 60
DIM ok = TRUE

WHILE (GETTIME() < et) AND ok
  ok = CHKIMG("画像L.bmp")
  SLEEP(1)
WEND

IFB ok THEN
  MSGBOX("処理A")
ELSE
  MSGBOX("処理B")
ENDIF

No.3811 2017/04/28(Fri) 12:05:53

Re: 処理の分岐 / じぇす
なるほど、ありがとうございます!
参考にして使います!

No.3813 2017/04/28(Fri) 13:56:22


 過去ログ(〜2017/08/24)・検索ツール


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