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

一定時間ごとに実施して一定時間後に終了 / ayu
初心者ですが、タイトルのように、5分ごとに実施して、30分後に終了するスクリプトを探しています。よろしくお願いします。
No.2676 2016/07/28(Thu) 07:56:17

Re: 一定時間ごとに実施して一定時間後に終了 / stuncloud
sethotkey(VK_PAUSE, 0, "stop")

span = 5 * 60 // 開始間隔は5分
work = 30 * 60 // 作業時間は30分

start = gettime() + span

while TRUE
 if gettime() >= start then
  thread 30分で終わる(start + work)
  start = start + span
 else
  sleep(0.1)
 endif
wend

procedure 30分で終わる(end)
 balloon("作業中", n * 70, 10)
 if n > 9 then n = 0 else n = n + 1
 repeat
  sleep(0.1)
 until gettime() >= end
fend

public n

procedure stop
 exitexit
fend

解説
30分経ったら停止する作業がなんだかはわかりませんが、繰り返し行う単純作業だったらこんな感じで良いです
30分で終わる()関数のループ内に処理を書いたらいいと思います
スレッドをガンガン使ってますがこのくらいなら使い潰すことはないので問題ない(はず)です
軽く試したいならspan=1, work=6くらいにしてみてください、どういう感じに動くかわかると思います
Pauseキーを押して強制終了できるようにsethotkeyを使っています

No.2677 2016/07/28(Thu) 10:15:00

Re: 一定時間ごとに実施して一定時間後に終了 / ayu
早速のご教示、ありがとうございます。使わせていただきます。
ツイキャスを録画しているんですが、開始時間がいつもずれ込みますので、
パソコンの前に待機するのが面倒なのです。

No.2678 2016/07/28(Thu) 10:32:02
エクセルのマクロが2回実行される / 佐々木
エクセルのマクロ実行に関して下記現象に困惑しています。

現象:エクセルからマクロを呼び出すと正常に1度だけ実行されるが、
UWSCから.Runメソッドでマクロを呼び出すと2度実行されてしまう。
(1回呼ぶ毎にセルの値が1増えるのが正しいのですが,何故か2増えてしまいます)

 ■エクセルVBA側
  Sub test()
  '呼ばれる毎にセルの値をインクリメントする
   Worksheets("シート1").Range("A1").Value = Worksheets("シート1").Range("A1").Value + 1
  End Sub

 ■UWSC側
  Excel_S.Run("Excel.xlsm!TEST()")

  以下の様に第3引数で「実行終了を待つ」にしても2度実行されてしまいました。
  Excel_S.Run("Excel.xlsm!TEST()",,TRUE)

  セルのインクリメント以外のVBA(PRINT等)に置き換えても2度実行はされます。

ちなみに上記問題が発生したプログラムはVBA側でUWSCからのセルへの書き込みを
見張って処理する様にすれば2度実行される現象を避けることはできますが、
根本原因が不明のままではスッキリしないのでお知恵を拝借願えないでしょうか。

PS. エクセルの設定でプロセッサ数を4から1に減らしても実行回数に変化なしでした。

No.2666 2016/07/24(Sun) 12:10:38

Re: エクセルのマクロが2回実行される / しゅん
解決しなくてすみません。
ただ、UWSCの問題ではありません。

PowerShellから同様に呼び出してみましたが、2回実行されます。
ExcelのRunメソッドに何か秘密がある気がします。
なお、ExcelのRunメソッドの第三引数をTrueにしても、「実行終了を待つ」動作に変わりはないと思います。

No.2669 2016/07/25(Mon) 12:55:19

Re: エクセルのマクロが2回実行される / Nagatani
理由はわかりませんが下記のExcel.Run("Sample1.xlsm!Sample()") にすると
マクロが2回走るようで、「StrPattern = 1」 にすれば解消されるようです。

FOR LonI1 = 1 TO 5
  Excel = CreateOLEObj("Excel.Application")
  Excel.Visible = True

  StrPattern = 2

  If StrPattern = 1 THEN
   Excel.WorkBooks.Open("C:\Users\xxxxxx\Documents\Sample1.xlsm")
   Sleep(1)
   Excel.Run("Sample")

  ElseIf StrPattern = 2 THEN
   Excel.Run("Sample1.xlsm!Sample()")
  ENDIF

  EXCEL.Save
  EXCEL.QUIT
NEXT

No.2671 2016/07/25(Mon) 22:21:47

Re: エクセルのマクロが2回実行される / 佐々木
PowerShellでもご確認いただき(お手数をお掛けしてしまいましたが)、
エクセル側のバグという事でしたら解決には時間も掛かりそうなので
対処療法で逃げるのも仕方無い事と諦められます。
お蔭さまでモヤモヤが解消できました、ありがとうございました。

No.2672 2016/07/25(Mon) 22:21:51

Re: エクセルのマクロが2回実行される / しゅん
なるほど、Nagataniさんの指摘の通り、Excel.Run("Sample1.xlsm!TEST") と、カッコを外すと、1回になりますし妙なリターン(エラー)もなくなりますね。
カッコをつけると、何か問題があるようです。

引数のあるマクロ関数を
Excel.Run("Sample1.xlsm!TEST2(23)")
とか呼べてしまいますが、これは2回呼び出しを免れる方法はなさそうですね。
ただ、
Excel.Run("Sample1.xlsm!TEST2", 23)
と書くべきですが。

Runメソッドの仕様上、カッコをつける方がおかしい、といったところのようですね。

No.2673 2016/07/26(Tue) 12:36:51

Re: エクセルのマクロが2回実行される / 佐々木
Nagataniさん、しゅんさんありがとうございました。
的確なアドバイスを頂いたおかげでスマートなUWSCスクリプトを記述する事ができました。
「Runメソッドの仕様上、カッコをつける方がおかしい」という事に自分ではまったく気が付けなかったのが残念です、VBA側と同じ形でカッコ内に引数を並べて呼び出すという勝手な思い込みでコーディングしてしまってました。。。

No.2674 2016/07/26(Tue) 23:04:47
powershell、エクセルからの参照設定は可能でしょうか? / kei
お世話になります。
個人的には大変便利に使わせて頂いているのですが。
会社で使用する場合、セキュリティが厳しく、フリー版EXEファイルを実行するのも禁止されています。
powershellからアセンブリ参照したり、エクセルから参照設定してUWSCを使うことはできないでしょうか?

No.2667 2016/07/24(Sun) 14:40:16

Re: powershell、エクセルからの参照設定は可能でしょうか? / しゅん
どちらもできません。
EXE実行禁止を解除してもらえるよう、交渉するのが良いかと思います。

技術力があれば、EXEをロードして機能を使うことが可能ではありますが、そこまでして使う意味はないでしょう。
PowerShellが使えるのであれば、UIAutomationを使えばCHKIMG以外は面倒ですが、なんとかなります。
CHKIMGもがんばればなんとかなりますが、、、技術力が必要です。

No.2668 2016/07/25(Mon) 12:40:24

Re: powershell、エクセルからの参照設定は可能でしょうか? / kei
ご回答ありがとうございます。
アンマネージのdllも使えるんだから、exeも行けそうですが、橋渡し役が居なくて、ゴリゴリしないといけないかも。止めておきます。
今回、改めてお手軽さを実感しました。
ありがとうございます。

No.2670 2016/07/25(Mon) 21:23:10
指定の2つのキー入力で、エクセルの空白行のa列、b列入力方法について / シスイ
指定の2つのキー、例えばaキーの場合はエクセルの空白行のa列に入力、bキーの場合はエクセルの空白行のb列に入力の方法を考えているのですが、思いつきません。if文を使えばできそうな感じもするのですが分かりません。ご指導頂けませんでしょうか?
下記のコードでa列の空白行にコピーすることで追加入力までは分かっています。

Excel = XLOPEN("C:\Users\aruke\Desktop\aaaaaaaaBook1.xlsx")
XLACTIVATE(Excel, "Sheet1")
y = 1
x = 1
SENDSTR(0, "")
while True
sleep(0.2)
ss = GETSTR(0)
ifb ss <> "" // クリップボードにある
Excel.ActiveSheet.Cells[y,1 ].Value = ss
SENDSTR(0, "") // クリップボードをクリア
y = y + 1

endif
wen

No.2659 2016/07/20(Wed) 15:01:02

Re: 指定の2つのキー入力で、エクセルの空白行のa列、b列入力方法について / しき
Excel = XLOPEN()
XLACTIVATE(Excel, "Sheet1")

yA = 1  //A列の現在行
yB = 1  //B列の現在行

SENDSTR(0, "")
while True
  sleep(0.2)
  
  ifb getkeystate(vk_a) then
    x = 1
  elseif getkeystate(vk_b) then
    x = 2
  else
    continue  //a か b が押された場合のみ処理する
  endif
  
  ss = GETSTR(0)
  ifb (ss <> "")  //クリップボードにある場合のみ処理する
    ifb (1 = x) then
      y = yA
    elseif (2 = x) then
      y = yB
    endif
    
    Excel.ActiveSheet.Cells[y, x].Value = ss
    SENDSTR(0, "") // クリップボードをクリア
    
    //行送り
    y = y + 1
    ifb (1 = x) then
      yA = y
    elseif (2 = x) then
      yB = y
    endif
    
  endif
wend

No.2660 2016/07/20(Wed) 18:37:27

Re: 指定の2つのキー入力で、エクセルの空白行のa列、b列入力方法について / シスイ
しき様、素晴らしいです、私のやりたい事がこんなに早く回答頂けるなんて。教えて頂いたコードでできました、ありがとうございます。
No.2661 2016/07/20(Wed) 21:49:43

Re: 指定の2つのキー入力で、エクセルの空白行のa列、b列入力方法について / シスイ
上記のコードでできたのですが、1つ困った事がおきました。既存のエクセルを開いて上記スクリプトを開始して、コピー、Aキーでした所、既存のA列に以前入力した分が上書きになってしまいます。
空白行の一番後ろに入力するようにできないでしょうか?
色々考えてみたのですが、自分の実力では分かりません、ご指導頂けないでしょうか?

No.2662 2016/07/21(Thu) 08:33:33

Re: 指定の2つのキー入力で、エクセルの空白行のa列、b列入力方法について / しろまさ
Helpを読みましょう。

uwsc.chm
 スクリプト
  スクリプト関数
   ウィンドウ関連
    SENDSTR

に書いてあります。まずは自分で調べて試すこと。

No.2663 2016/07/21(Thu) 13:32:50

Re: 指定の2つのキー入力で、エクセルの空白行のa列、b列入力方法について / シスイ
しろまさ様、もう一度自分で調べてみます。
No.2664 2016/07/21(Thu) 13:34:55

Re: 指定の2つのキー入力で、エクセルの空白行のa列、b列入力方法について / しろまさ
読み違えていたのを今気がつきました(_ _)

ExcelをGetActiveOleObjでCOM接続後に下記操作ですね。
VBAとUWSCの表記は若干違うので適宜修正してください。
http://www.niji.or.jp/home/toru/notes/8.html

No.2665 2016/07/22(Fri) 09:26:40
エクセルのファイルが開きません。何が原因なんでしょうか? / シスイ
エクセルのファイルが開きません。何が原因なんでしょうか?
下記のコードです。

XLS1_NAME = "開きたいファイル1"
XLS2_NAME = "開きたいファイル2"
XLS3_NAME = "開きたいファイル3"


XLS1_PATH = "C:\Users\aruke\Dropbox\ファイル1.xlsx"
XLS2_PATH = "C:\Users\aruke\Dropbox\ファイル2.xlsx"
XLS3_PATH = "C:\Users\aruke\Dropbox\ファイル3.csv"



////////////////////////初期設定△△

SELECT SLCTBOX(SLCT_BTN, 0, "EXCEL_OPEN", XLS1_NAME, XLS2_NAME, XLS3_NAME)
CASE SLCT_1
PATH = XLS1_PATH
CASE SLCT_2
PATH = XLS2_PATH
CASE SLCT_3
PATH = XLS3_PATH

SELEND

Excel = XLOPEN(PATH)

No.2656 2016/07/20(Wed) 13:33:54

Re: エクセルのファイルが開きません。何が原因なんでしょうか? / sana
私の方では問題無く開けました。
XLOPENはPro版のみ使用できる関数ですが、その点は大丈夫でしょうか?

No.2657 2016/07/20(Wed) 13:48:41

Re: エクセルのファイルが開きません。何が原因なんでしょうか? / シスイ
sana様、XLOPENはPro版を使用しています。開ける場合もあるのですが、ファイルが開いていない状態でエクセルだけが立ち上がる場合が多いです。
No.2658 2016/07/20(Wed) 14:53:33
saveimg で連続保存する時の不具合 / すすむ
FOR NEXT 中に while wend を使って
saveimgで、素早く連続保存しようと

saveimg( sav1,Hnd,xPx,updY+7,15,16,TRUE,0,IMG_FORE )
xPxは17ずつ増加

なぜかFOR NEXT で 一番最後の部分しか 画像が保存されないという事が起こっています。
間に SLEEP(1) を入れれば、ちゃんと全部保存されているのです。

あとクライアント領域でなくて、スクリーン全体座標を指定すると
30秒後あたりにメモリが確保できないエラーで止まります
15x16ドットだし多くても 800x30 くらいの作業なんですが
メモリ確保できないエラーが出ます

ちょっと詳しく内容書かないと上手く伝わってないかもしれません。すいません
あとで詳しく書くかもしれません。
saveimgで思うように早く保存できなくて困ってます。

No.2641 2016/07/13(Wed) 22:48:24

Re: saveimg で連続保存する時の不具合 / 森
メモリの処理速度とハードディスクの処理速度に圧倒的な違いがあるのが原因です。
このような問題を回避するために、SLEEP()を入れます。

なので、「間に SLEEP(1) を入れれば、ちゃんと全部保存できる」というのが正解です。
スリープの時間はもっと短くても大丈夫だと思いますので調整してください。

No.2649 2016/07/17(Sun) 09:04:36

Re: saveimg で連続保存する時の不具合 / 黒猫
ちゃんと仕様を確認してから書いて下さい。
No.2655 2016/07/18(Mon) 11:55:41
csvをexcelに一括で貼り付けたい / sen
お世話になっております。
csvをexcelに一括で貼り付けたいのですが、うまくいきません。
ご教授願いませんでしょうか?


元 = fopen("zai.csv")
出力 = fopen("在庫.csv",F_READ or F_WRITE)
fput(出力,"更新日,機種,梱包,在庫,注残,機種,梱包,在庫,注残",1)
for i = 2 to fget(元, F_LINECOUNT)
  IFB fget(元,i,2) = "17A4" THEN
   一行 = fget(元,i,35)+","+"177A"+","+fget(元,i,2)+","+fget(元,i,5)+","+fget(元,i,12)
  ENDIF
  IFB fget(元,i,2) = "19A4" THEN
   一行 = 一行+","+"199A"+","+fget(元,i,2)+","+fget(元,i,5)+","+fget(元,i,12)
  ENDIF
next
ifb fget(出力,2,1) <> copy(一行,1,6) then
 fput(出力,一行,2,F_INSERT)
endif
fclose(元)
fclose(出力)

出力 = fopen("在庫.csv")
SENDSTR(0,fget(出力, F_ALLTEXT ))

Excel = XLOPEN("C:在庫.xlsx")
XLACTIVATE(Excel, "Sheet1")
KBD(VK_CTRL, DOWN)
KBD(VK_V, CLICK)
KBD(VK_CTRL, UP)

XLCLOSE(Excel)

No.2646 2016/07/17(Sun) 00:34:37

Re: csvをexcelに一括で貼り付けたい / ある
エクセルで読み込めば一発だと思いますが、UWSCでやりたいのだと解釈して進めます。
XLOPEN等は触ったことがないので、慣れている方で書かせてもらいました。

//-------------
Excel=createoleobj("Excel.Application")
Excel.visible=true
Excel.workbooks.add()

fid=fopen("在庫.csv",f_read)
元=fget(fid,f_alltext)
fclose(fid)

data=split(元,"<#cr>") //行を分割
for n=0 to resize(data)
data[n]=split(data[n],",") //行の中のデータを分割
for i=0 to resize(data[n])
Excel.cells(n+1,i+1).value=data[n][i]
next
next

No.2647 2016/07/17(Sun) 02:39:42

Re: csvをexcelに一括で貼り付けたい / 森
提示スクリプトに XLOPENが含まれているので、Pro版をお持ちのようですね。
貼り付け(セルへの入力)は、 XLSETDATAを使うと便利ですよ。

Excel = XLOPEN("在庫.xlsx")
f = fopen("在庫.csv")
for i = 1 to fget(f, F_LINECOUNT)
 for j = 1 to 9
  data = fget(f, i, j)
  XLSETDATA(Excel, data, i, j, "Sheet1") // セル位置とシート名を指定して貼り付け
 next
next
fclose(f)
XLCLOSE(Excel)

【余談1】
データを配列に格納してから、A1セル指定で一括入力する方が処理が早いかも知れません。

【余談2】
ちなみに、CSVデータのカンマをタブに変換しておくと、[CTRL]+[V]で貼り付け可能です。
※貼付範囲の大きさが違うというエラーが出るかも知れません。
※エクセルはタブ区切りということではありません。

【余談3】
提示スクリプトを見て気になったのですが、CSVはエクセルにデータを一括貼付する元データを作るためだけに使っているのですか?
もしそうだとしたら、XLSETDATAを使って最初からエクセルに入力していくように作った方がベストだと思います。

No.2648 2016/07/17(Sun) 08:53:56

Re: csvをexcelに一括で貼り付けたい / sen
ありがとうございます。

>【余談3】
>提示スクリプトを見て気になったのですが、
>CSVはエクセルにデータを一括貼付する元データを作るためだけに
>使っているのですか?


新しいデータを2行目にうまく挿入できなくて、そうなりました。
意味がないなとは、感じてました。

No.2650 2016/07/17(Sun) 11:21:07

Re: csvをexcelに一括で貼り付けたい / 森
やっぱりそうでしたね^^
では、以下のスクリプトで大丈夫だと思います。
元データが無いからテストしていませんので、不具合があれば適当に調整して下さい。
※19A4よりも手前の行に17A4が必ずあるという前提で書いてます。

csv = fopen("zai.csv")
Excel = XLOPEN("在庫.xlsx")
XLACTIVATE(Excel, "Sheet1")

dim midashi[] = "更新日,機種,梱包,在庫,注残,機種,梱包,在庫,注残"
XLSETDATA(Excel, midashi, 1, 1)

for i = 2 to fget(csv, F_LINECOUNT)
 select fget(csv,i,2)
  case "17A4"
   XLSETDATA(Excel, "177A", i, 2)
   XLSETDATA(Excel, fget(csv,i,35), i, 1)
   XLSETDATA(Excel, fget(csv,i, 2), i, 3)
   XLSETDATA(Excel, fget(csv,i, 5), i, 4)
   XLSETDATA(Excel, fget(csv,i,12), i, 5)
   range = "A" + i + ":E" + i
   data = XLGETDATA(Excel, range) // 記入したデータを配列に
  case "19A4"
   XLSETDATA(Excel, range , i, 1)
   XLSETDATA(Excel, "199A", i, 6)
   XLSETDATA(Excel, fget(csv,i, 2), i, 7)
   XLSETDATA(Excel, fget(csv,i, 5), i, 8)
   XLSETDATA(Excel, fget(csv,i,12), i, 9)
 selend
next

fclose(csv)
XLCLOSE(Excel)

No.2651 2016/07/17(Sun) 11:47:54

Re: csvをexcelに一括で貼り付けたい / sen
下記の部分を教えていただけると助かります。

range = "A" + i + ":E" + i ←
data = XLGETDATA(Excel, range) // 記入したデータを配列に←
XLSETDATA(Excel, range , i, 1)

No.2652 2016/07/17(Sun) 15:37:34

Re: csvをexcelに一括で貼り付けたい / 森
簡単なスクリプトだと思ってなめてると、やっぱり失敗しますね^^;
以下の通り、修正が2箇所あります。

dim midashi[] = "更新日,機種,梱包,在庫,注残,機種,梱包,在庫,注残"
 ↓
dim midashi[] = "更新日","機種","梱包","在庫","注残","機種","梱包","在庫","注残"

XLSETDATA(Excel, range , i, 1)
 ↓
XLSETDATA(Excel, data , i, 1)


2回続けて間違えると恥ずかしいので、以下のサンプルデータでテストしました。
zai.csv-----------------
,梱包,,,在庫,,,,,,,注残,,,,,,,,,,,,,,,,,,,,,,,更新日
,17A4,,,1,,,,,,,13,,,,,,,,,,,,,,,,,,,,,,,20160701
,19A4,,,2,,,,,,,14,,,,,,,,,,,,,,,,,,,,,,,20160702
,17A4,,,3,,,,,,,15,,,,,,,,,,,,,,,,,,,,,,,20160703
,19A4,,,4,,,,,,,16,,,,,,,,,,,,,,,,,,,,,,,20160704
,17A4,,,5,,,,,,,17,,,,,,,,,,,,,,,,,,,,,,,20160705
,19A4,,,6,,,,,,,18,,,,,,,,,,,,,,,,,,,,,,,20160706
,17A4,,,7,,,,,,,19,,,,,,,,,,,,,,,,,,,,,,,20160707
,19A4,,,8,,,,,,,20,,,,,,,,,,,,,,,,,,,,,,,20160708
,17A4,,,9,,,,,,,21,,,,,,,,,,,,,,,,,,,,,,,20160709
,19A4,,,10,,,,,,,22,,,,,,,,,,,,,,,,,,,,,,,20160710
,17A4,,,11,,,,,,,23,,,,,,,,,,,,,,,,,,,,,,,20160711
,19A4,,,12,,,,,,,24,,,,,,,,,,,,,,,,,,,,,,,20160712

No.2653 2016/07/17(Sun) 16:42:19

Re: csvをexcelに一括で貼り付けたい / sen
あるさん、森さん、ありがとうございました。
うまくいきました。

No.2654 2016/07/17(Sun) 21:19:27
ファイル操作と繰り返しの処理について / rin
テキストファイルからurlを読み出してスクリプトを実行したいのですが、うまくいきません。

また、IEを終了してから再度、繰り返す場合はProcedureかfunctionのどちらの
関数を使えばいいのかよくわかりません。

ご指導を宜しくお願い致します。

fileID = FOPEN("c:xxx\xxx\.txt", F_READ)
n = FGET(fileID, F_LINECOUNT)
FOR i = 1 TO n
url = FGET( fileID, i, 1 )
NEXT
FCLOSE(fileID)

IE.Navigate(url)
BusyWait(IE)

No.2624 2016/07/11(Mon) 14:12:11

Re: ファイル操作と繰り返しの処理について / 森

計算結果などの戻り値を必要としないので Procedure を使います。
-----------------------------------------------------------
// メインルーチン
fileID = FOPEN("c:xxx\xxx\.txt", F_READ)
n = FGET(fileID, F_LINECOUNT)
FOR i = 1 TO n
 url = FGET( fileID, i, 1 )
 browsing(url)
 sleep(2)  // IEが完全に終了する前に新しいIEを起動するとエラーが発生する
NEXT
FCLOSE(fileID)

// IEを新規で起動して指定URLを表示して終了
Procedure browsing(url)
 IE = CreateOLEObj("InternetExplorer.Application")
 IE.Visible = True
 IE.Navigate(url)
 BusyWait(IE)
 IE.Quit()
Fend

// IE表示待ち
Procedure BusyWait(ie)
 repeat
  Sleep(0.2)
 until (! ie.busy) and (ie.readyState=4)
Fend
-----------------------------------------------------------

ただ、この場合は新しくIEを起動し直さなくても良いのでは?
IE = CreateOLEObj("InternetExplorer.Application")
IE.Visible = True
fileID = FOPEN("c:xxx\xxx\.txt", F_READ)
n = FGET(fileID, F_LINECOUNT)
FOR i = 1 TO n
 url = FGET( fileID, i, 1 )
 IE.Navigate(url)
 BusyWait(IE)
 sleep(2)
NEXT
FCLOSE(fileID)
IE.Quit()

// IE表示待ち
Procedure BusyWait(ie)
 repeat
  Sleep(0.2)
 until (! ie.busy) and (ie.readyState=4)
Fend

No.2639 2016/07/13(Wed) 16:33:16

Re: ファイル操作と繰り返しの処理について / rin
返信が遅くなりまして、申し訳ありません。

頂いたスクリプトにサイトのクリックを追加しましたら、

「play_click_site:関数が入れ子しているか、閉じていません。
procedure busywait(ie)」とエラーがででしまいました。

procedureの定義がよくわからないので教えて頂けませんでしょうか。

宜しくお願い致します。

// メインルーチン
fileID = FOPEN("c:xxx\xxx\.txt", F_READ)
n = FGET(fileID, F_LINECOUNT)
FOR i = 1 TO n
 url = FGET( fileID, i, 1 )
 browsing(url)
 sleep(2)  // IEが完全に終了する前に新しいIEを起動するとエラーが発生する
 // サイトのクリック
   PLAY_CLICK_SITE(IE,url,num)
NEXT
FCLOSE(fileID)


// サイトのクリック
PROCEDURE PLAY_CLICK_SITE(IE,url,num)

IE.document.forms[0].elements[0].click()
   ・ 
   ・
   ・

No.2644 2016/07/16(Sat) 18:58:15

Re: ファイル操作と繰り返しの処理について / 森
全スクリプトの提示が無いので、具体的な指摘はできませんが、不具合箇所はエラーメッセージの通りです。
すなわち、play_click_site:関数が入れ子しているか、閉じていないことが原因です。

また、procedureの定義がよくわからないとのことですが、
「ユーザー定義関数とは」とググってみて下さい、たくさん資料が出てくるはずです。
他の言語でも文法が違うだけで用途や使い方は同じです。

No.2645 2016/07/16(Sat) 23:30:48
開いているサイトのサイト名とURLをエクセルのA1、B1に入力する方法 / シスイ
開いているサイトのURLとサイト名を指定のエクセルのA1にサイト名、B1にURLを入力したいのですが、
A1にサイト名とURLが一緒に入ってしまいます。
A1にサイト名、B1にURLと入力する方法ないでしょうか?
下記のコードをでやっているのですが、A1に入ってしまいます。


IE = GETACTIVEOLEOBJ("InternetExplorer.Application")
IE.visible = True
tes1 = IE.document.title
tes2 = IE.document.URL
tes3 = tes1 + "<#TAB>" + tes2
SENDSTR(0,tes3)
SLEEP(1.0)
fid=fopen("C:\Users\aruke\Desktop\URL集.csv", f_read or f_write)  // ファイルオープン


tesu = GETSTR(0)
fput(fid,tesu,0,1) // 書き込み



fclose(fid)                  // ファイルクローズ(忘れずに)

No.2631 2016/07/12(Tue) 12:39:15

Re: 開いているサイトのサイト名とURLをエクセルのA1、B1に入力する方法 / sana
これでどうでしょう?

IE = GETACTIVEOLEOBJ("InternetExplorer.Application")
IE.visible = True
tes1 = IE.document.title
tes2 = IE.document.URL
SLEEP(1.0)
fid=fopen("C:\Users\aruke\Desktop\URL集.csv", f_read or f_write)  // ファイルオープン

fput(fid,tes1,1,1) // 書き込み
fput(fid,tes2,1,2)

fclose(fid)                  // ファイルクローズ(忘れずに)

No.2633 2016/07/12(Tue) 13:43:59

Re: 開いているサイトのサイト名とURLをエクセルのA1、B1に入力する方法 / 森
そもそもCSVファイルというのはエクセルで表示させたり編集したりもできますが、エクセルファイルではありません。
データをカンマで区切ったテキストファイルです。
※詳しくはググって調べて下さいね。

ですから、
tes3 = tes1 + "<#TAB>" + tes2
のように、データをタブで繋げた場合、カンマで区切られていないために、一つのデータとして扱われてしまいます。

カンマで区切れば良いので、
tes3 = tes1 + "," + tes2
と書くとOKです。

また、一旦クリップボードにコピーさせていますが不要ですし、
末尾に追記させる場合は、列行の指定も不要です。
fput(fid, tes3)

sanaさんが書かれているように、カンマで繋げず列位置指定で分けて追記することも一見できそうですが、残念ながら2行に分かれてしまいます。
fput(fid, tes1, 0, 1)
fput(fid, tes2, 0, 2)
※sanaさんの提示では常に1行目上書きになるので質問内容とは違った結果になります。
※fget(fid, F_LINECOUNT)で現在の行数を取得して書き込み行数を指定することも可能ですが、連続した2列だけなので、カンマで繋げたデータを追記させた方がシンプルでいいでしょう。

No.2637 2016/07/13(Wed) 16:00:17

Re: 開いているサイトのサイト名とURLをエクセルのA1、B1に入力する方法 / シスイ
sanaさん、できました。ありがとうございます。
No.2642 2016/07/13(Wed) 23:05:45

Re: 開いているサイトのサイト名とURLをエクセルのA1、B1に入力する方法 / シスイ
森さん、fput(fid, tes3)で、列行の指定で不要なんですね、知らなかったです。CSVのカンマ区きりで自分イメージ通りの処理ができました。
すごく勉強になりました、ありがとうございました。

No.2643 2016/07/13(Wed) 23:09:06
Java Access Bridge for Windows Operating Systemのインストールについて / たかすけ
Java Access Bridge for Windows Operating Systemのインストールについてヘルプの通りにやりたいのですが、ヘルプに記述のある「C:\Program Files (x86)\Java\jre7」フォルダーがありません。
windows10proです。
Javaアプリの操作に挑戦したいと思っています。
サポートお願いします。

No.2640 2016/07/13(Wed) 21:46:10


 過去ログ(〜2016/10/02)・検索ツール


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