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

裏で実行できますか / ss
例えばuwscから実行ファイルを作って,ショートカットキーでそれを実行させたとします。エクセルを使っていたとするとそのファイルが終了するまでエクセルはアクティブになりません。uwscまたはuwscから作った実行ファイルを裏で実行(非アクティブ)することはできますか?
No.3588 2017/03/02(Thu) 09:52:30

Re: 裏で実行できますか / stuncloud
何をするかによります
・UWSCで操作するウィンドウがアクティブになるような処理が入ってなければできる
 (clkitemのCLK_BACKだったりmouseorgのMORG_BACKだったりを使っていても操作時にアクティブになってしまうとか操作できないとかいうものもあるようなので、そういったものであれば無理)
・ウィンドウ操作をしないスクリプトならできる

No.3589 2017/03/02(Thu) 10:55:05
A列に偶数の配列、B列に奇数の配列に順番に入れる方法 / ジンギスカン
下記のスクリプトで試しているのですが、ここからどう組み立てたらいいのが分かりません。forのstep+2をうまく組み合わしたらできそうな気もするのですがいまいち分かりません。聞いてばかりで申し訳ないですが、何か良い方法ないでしょうか?


file="C:\Users\aruke\Desktop\URL.txt"

//配列にfileを挿入
Dim res1 = COMMON.test_hairetu(file)

o_XL=xlopen(0)

row=2

for i = 0 to length(res1)-1
 xlsetdata(o_XL, res1[i], "a" + row)
 xlsetdata(o_XL, res1[i+1], "b" + row)

 row = row + 1
next

XLCLOSE(o_XL)

// 0,2,4 タイトル
// 1,3,5 リンク

No.3562 2017/02/25(Sat) 16:09:52

Re: A列に偶数の配列、B列に奇数の配列に順番に入れる方法 / ジンギスカン
配列をエクセルにA列、B列に入力する方法はできたのですが、エラーが出てしまいます。
breakでfor文をぬけようとしてもエラーになります。どこが間違っているのでしょうか?

[エラーコード]
getvalue:variant or safe array index out of bounds

17行目  xlsetdata(o_XL, res1[i+1], "b" + row)

[試しているスクリプト]


call C:\Users\aruke\Desktop.uws

file="C:\Users\aruke\Desktop\URL.txt"

//fileを配列に入れる
Dim res1 = COMMON.test_hairetu(file)

o_XL=xlopen(0)

row = 2

for i = 0 to length(res1) step+2
xlsetdata(o_XL, res1[i], "a" + row)
xlsetdata(o_XL, res1[i+1], "b" + row)
row = row + 1

if i=length(res1) then
break
next


o_XL.ActiveWorkBook.SaveAs(file1)
XLCLOSE(o_XL)

// 0,2,4 タイトル
// 1,3,5 リンク

No.3567 2017/02/26(Sun) 19:56:53

Re: A列に偶数の配列、B列に奇数の配列に順番に入れる方法 / しろまさ
エラーはsafearrayの範囲外という内容。
length(res1)に配列要素はない。

さあ問題です。どこを修正すればよいでしょうか?

No.3568 2017/02/26(Sun) 20:47:21

Re: A列に偶数の配列、B列に奇数の配列に順番に入れる方法 / ジンギスカン
しろまさ様、回答ありがとうございます、しろまさ様のサイトのページ紙で印刷で見させて頂いています。

iがlength(res1)の13になるとbreakしてfor文を抜けれると思ったのですが、この考え方は間違っているのでしょうか?

>エラーはsafearrayの範囲外という内容。length(res1)に配列要素はない。
length(res1)が13ですので、0から進んでいくと12までいって13だけが残されるからエラーという考え方で良いのでしょうか?

if i=length(res1) then

//13
print "length(res1)="+length(res1)

break

No.3570 2017/02/26(Sun) 21:38:40

Re: A列に偶数の配列、B列に奇数の配列に順番に入れる方法 / ジンギスカン
>length(res1)に配列要素はない。
length(res1)-1で条件式を組み立てるという事ですよね。

下記のスクリプトでうまくいきました。
for i = 0 to length(res1) step+2
xlsetdata(o_XL, res1[i], "a" + row)
if length(res1)-1= i then
break
endif

 xlsetdata(o_XL, res1[i+1], "b" + row)
 row = row + 1

next

No.3571 2017/02/26(Sun) 22:31:07

Re: A列に偶数の配列、B列に奇数の配列に順番に入れる方法 / しろまさ
> length(res1)-1で条件式を組み立てるという事ですよね。
正解です。ただ、
for i = 0 to length(res1)-1 step+2 とすればIf文は不要となります。

[i+1]を使う今回の条件では
for i = 0 to length(res1)-2 step+2 で良さそうですね。

No.3574 2017/02/27(Mon) 08:51:21

Re: A列に偶数の配列、B列に奇数の配列に順番に入れる方法 / ジンギスカン
>for i = 0 to length(res1)-1 step+2 とすればIf文は不要
これは、どういう風にすればIF文不要でできるのでしょうか?

>for i = 0 to length(res1)-2 step+2
こちらはbreak文無しでうまくできました。

No.3579 2017/02/27(Mon) 23:16:29

Re: A列に偶数の配列、B列に奇数の配列に順番に入れる方法 / ジンギスカン
length(res1)、 lengthは1から数える

配列、res1[i]は0から数える

よって、配列に合わせる為にlength(res1)−1にする

length(res1)は13の場合、length(res1)−1は12になる。

配列には12のデータが入っていると判断できる。

12個のデータという事は、配列[11]と表示とイコール

12個のデータをエクセルにA列、B列に2列×6行で入れたいとする。

よって、iが12になった場合のxlsetdata(o_XL, res1[i], "a" + row)の前にif文のbreakを入れる。


call C:\Users\Desktop

file="C:\Users\aruke\Desktop\URL.txt"

Dim res1 = COMMON.test_hairetu(file)

file1="C:\Users\aruke\Deskt"

o_XL=xlopen(0)


row = 2

for i = 0 to length(res1)-1 step+2

if i=12 then
break
endif
xlsetdata(o_XL, res1[i], "a" + row)


  xlsetdata(o_XL, res1[i+1], "b" + row)
 row = row + 1

next

o_XL.ActiveWorkBook.SaveAs(file1)
XLCLOSE(o_XL)

// 0,2,4 タイトル
// 1,3,5 リンク

No.3580 2017/02/27(Mon) 23:44:56

Re: A列に偶数の配列、B列に奇数の配列に順番に入れる方法 / stuncloud
> length(res1)は13の場合、length(res1)−1は12になる。
はいいんだけど
> 配列には12のデータが入っていると判断できる。
って判断しちゃだめです
length(res1) が個数です
res1[0] から res1[12] までの13個の要素がある配列です
このへんの認識違いはバグの元になるので気をつけましょう

No.3584 2017/02/28(Tue) 09:56:09
起動オプション / satocha
起動オプションを調べようとしてヘルプを開きましたが、見つかりません。
古いバージョンのヘルプだと「スクリプト」→「その他項目」の下の「スクランブル」と「uwsc.ini」の間にありますが、移ったのでしょうか。それとも仕様が変わったのでしょうか。

No.3565 2017/02/26(Sun) 13:11:50

Re: 起動オプション / umiumi
必要性のないものである為、機能的に削除(予定)しました。
No.3572 2017/02/27(Mon) 01:23:44

Re: 起動オプション / satocha
ご回答ありがとうございます。
Win標準のタスクスケジューラーよりUWSCのスケジューラーのほうが高機能なので、PC起動時の処理を行わせたあと/Kオプションで常駐させる使い方をしています。
廃止されても対応できますので、必要性がないと言われればそのとおりですが。

No.3573 2017/02/27(Mon) 02:44:03

Re: 起動オプション / しき
/L をよく使っています。大変便利です。
なくなさないでください。よろしくお願いします

No.3577 2017/02/27(Mon) 14:08:22
高速な表引きを作成したいが、文字化けする / SEN
いつもお世話になっております。
エクセルのvlookup関数みたいな高速な表引きのプログラムを作成したいと思っています。
正規表現にも対応できて、普通の検索にも対応できればと思って、過去に教えて頂いた分の集大成として作成しました。
しかし、どうしても文字化けするのです。エディターで開くと変な文字が見え他は大丈夫なのですが、
エクセルで開くとダメです。
"Nヨウ N-14 ユカ"の部分だと思うのですがうまくいかないのです。
他の商品はキチンと転記出来る様で問題ありません。
が、一度おかしくなると、全部文字化けします。
製品マスタ.csvは実際には、15000行位ありまして思ったスピードになりません。
あと一息なのですが、どうにもなりません。
ご教授頂けませんでしょうか?


P高速正規表現表引きCSV置換("余剰梱包マイナス.csv",1,5,"製品マスタ.csv",2,3)

PROCEDURE P高速正規表現表引きCSV置換(調査ファイル名,調査検索列,調査置換列,マスタファイル名,マスタ検索列,マスタ置換列)
 dim 項目[2]
 調査 = fopen(調査ファイル名,F_READ or F_WRITE)
 マスタ = fopen(マスタファイル名)
  for s = 2 to fget(調査,F_LINECOUNT)
   ifb fget(調査,s,調査検索列) <> "" then
    ifb fget(調査,s,調査置換列) = "" then
     抽出 = fopen("temp.csv", f_write)
      項目[0] = "findstr"
      項目[1] = trim(fget(調査,s,調査検索列))
      項目[2] = マスタファイル名
      第一抽出 = doscmd(join(項目))
      fput(抽出,第一抽出)
     fclose(抽出)

     抽出 = fopen("temp.csv")
      for i = 1 to fget(抽出,F_LINECOUNT)
       正規 = CreateOLEObj("VBScript.Regexp")
       正規.pattern = trim(fget(抽出,i,マスタ検索列))
       一致 = 正規.Execute(fget(調査,s,調査検索列))
       ifb 一致.count > 0 then
        fput(調査,fget(抽出,i,マスタ置換列),s,調査置換列)
        break
       endif
      next
     fclose(抽出)
    endif
   endif
  next
 fclose(マスタ)
 fclose(調査)
FEnd

//製品マスタ.csv
//CD,品番,品名
//1111111,2-14,Nヨウ N-14 ユカ

//余剰梱包マイナス.csv
//梱包,削減,余裕,帳簿,品名(17/02/23)終了時点,機種,追加更新日,引当更新日,コメント,分類,フリー
//2-14,0,0,0,,,12/26確認,2017/2/9,,,

No.3564 2017/02/25(Sat) 22:35:05
一番古いデータを削除したい / SEN
いつも大変お世話になっております。
ファイル名の日にちが一番古いファイルを削除したいのですが、目的は達成しましたが長くなりました。
こんなものでしょうか?

dim 日にち[10]

GETDIR(GET_CUR_DIR, "取寄データ2*.csv")

FOR i = 0 TO (LENGTH(GETDIR_FILES) - 1)
 日にち[i] = GETTIME(0,BETWEENSTR(GETDIR_FILES[i],"取寄データ",".csv"))
 print "i="+i+" "+BETWEENSTR(GETDIR_FILES[i],"取寄データ",".csv")+" "+日にち[i]
NEXT
最小値 = CALCARRAY(日にち,CALC_Min)
FOR i = 0 TO (LENGTH(GETDIR_FILES) - 1)
 ifb 最小値 = 日にち[i] then
  一番古いファイル = GETDIR_FILES[i]
  print 一番古いファイル
 endif
next
ifb LENGTH(GETDIR_FILES) > 4 then
 ifb msgbox(一番古いファイル+"を削除してよいですか?",BTN_YES or BTN_NO) = BTN_YES THEN
  DosCmd("DEL C:\uwsc43\"+一番古いファイル)
 endif
endif

//取寄データ20170223.csv
//取寄データ20170222.csv
//取寄データ20170221.csv
//取寄データ20170220.csv
//取寄データ20170219.csv

No.3555 2017/02/25(Sat) 14:21:22

Re: 一番古いデータを削除したい / routa
// GETDIRはデフォルトでファイル名順です。
ifb GETDIR(GET_CUR_DIR, "取寄データ2*.csv") > 4 then
 ifb msgbox(GETDIR_FILES[0]+" を削除してよいですか?",BTN_YES or BTN_NO) = BTN_YES THEN
  DELETEFILE(GETDIR_FILES[0])
 endif
endif

No.3556 2017/02/25(Sat) 15:02:02

Re: 一番古いデータを削除したい / SEN
なんと!
何も必要なかったのですね。
聞いてみて、よかったです。

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

No.3563 2017/02/25(Sat) 18:15:50
テキストファイルにあるリンクを配列に入れて、それをエクセルのA列に順番に入れる方法 / ジンギスカン
配列.txtのリンクを1次元配列に入れて、それをエクセルのA1、A2、A3と入力したいですが、A1、B2、C3と入力になってしまいます。何か良い方法ないでしょうか?

[配列.txt]
http://a/
https://b/
https://c/


file="C:\Desktop\配列.txt"

fid = FOPEN(t_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)
res1 = slice(アカウント, 0, length(アカウント)-1)

file1="テスト.xlsm"

EXCEL=XLOPEN(,file1)

xlsetdata(EXCEL, res1, "a1")
xlclose(EXCEL)

No.3549 2017/02/24(Fri) 16:11:51

Re: テキストファイルにあるリンクを配列に入れて、それをエクセルのA列に順番に入れる方法 / stuncloud
配列で一度に入れようとしないでループで一つずつ入力

row = 1
for value in res1
 xlsetdata(excel, value, "A" + row)
 row = row + 1
next

No.3550 2017/02/24(Fri) 17:15:42

Re: テキストファイルにあるリンクを配列に入れて、それをエクセルのA列に順番に入れる方法 / しろまさ
t_path=GET_CUR_DIR + "\配列.txt"
file1="テスト.xlsm"
res1 = DosCmd("type " + t_path) + "<#CR>"

// 配列もFOPENもXLSETDATAも使わない方法
EXCEL=XLOPEN(,file1)
SendStr(0, res1)
EXCEL.Range("a1").PasteSpecial

// 2〜3行目のみ
2行目開始位置 = Pos("<#CR>", res1, 1) + 2
4行目開始位置 = Pos("<#CR>", res1, 3) + 2
SendStr(0, Copy(res1, 2行目開始位置, 4行目開始位置 - 2行目開始位置))
EXCEL.Range("c1").PasteSpecial

No.3551 2017/02/24(Fri) 18:08:03

Re: テキストファイルにあるリンクを配列に入れて、それをエクセルのA列に順番に入れる方法 / routa
// エクセルは2次元
Dim アカウント[list][0] //---配列の宣言
 アカウント[i][0] = FGET(fid,count) //---配列:アカウントに挿入
xlsetdata(EXCEL, アカウント, "a1")
// res1 は何の為?

No.3552 2017/02/24(Fri) 18:46:06

Re: テキストファイルにあるリンクを配列に入れて、それをエクセルのA列に順番に入れる方法 / ジンギスカン
stuncloud様、回答ありがとうございます。できました、助かりました。
No.3559 2017/02/25(Sat) 15:29:19

Re: テキストファイルにあるリンクを配列に入れて、それをエクセルのA列に順番に入れる方法 / ジンギスカン
しろまさ様、回答ありがとうございます。色々な方法があるんですね。勉強になります。
No.3560 2017/02/25(Sat) 15:34:36

Re: テキストファイルにあるリンクを配列に入れて、それをエクセルのA列に順番に入れる方法 / ジンギスカン
routa様、回答ありがとうございます。res1は必要ないですね、失礼いたしました。
No.3561 2017/02/25(Sat) 15:34:56
指定フォルダー内に入っているファイル名の配列にいれて.pngを省いて配列に入れ直す方法 / ジンギスカン
指定フォルダー内に入っているファイル名を配列にいれて.pngを省いて配列に入れ直すのが型が合いませんと表示されます。下記のコードではうまくいきません。何か良い方法ないでしょうか?

foler="C:\Users\"
num=getdir(foler)

res= JOIN(GETDIR_FILES)
res=chgmoj(res,".png","")
GETDIR_FILES= SPLIT(res)-1
GETDIR_FILES= slice(GETDIR_FILES, 0, length(GETDIR_FILES)-1)
print GETDIR_FILES[0]

[C:\Users\内のファイル名]

C:\Users\a画像.png
C:\Users\b画像.png
C:\Users\c画像.png

[したいの処理]

a画像
b画像
c画像

No.3547 2017/02/24(Fri) 15:23:36

Re: 指定フォルダー内に入っているファイル名の配列にいれて.pngを省いて配列に入れ直す方法 / stuncloud
GETDIR_FILESに代入はできません
別の変数に代入しましょう

NewArray = split(res)

No.3548 2017/02/24(Fri) 16:01:54

Re: 指定フォルダー内に入っているファイル名の配列にいれて.pngを省いて配列に入れ直す方法 / しろまさ
// なんでも正規表現

re = DosCmd("Dir /A-D C:\Users")
re = regReplace(re, ".*\d+\s(.+?)\.png(\r\n)|.*\r\n", "$1$2")
MsgBox(Trim(re))

Function regReplace(a_text, a_ptn, a_after) // 正規表現 置換
  Dim reg = CreateOLEObj("VBScript.Regexp"); reg.Global = TRUE; reg.Multiline = TRUE; reg.pattern = a_ptn; Result = reg.Replace(a_text, a_after)
FEnd

No.3553 2017/02/24(Fri) 18:49:29

Re: 指定フォルダー内に入っているファイル名の配列にいれて.pngを省いて配列に入れ直す方法 / ジンギスカン
stuncloud様、回答ありがとうございます。別の変数に入れたらできました。
No.3557 2017/02/25(Sat) 15:28:07

Re: 指定フォルダー内に入っているファイル名の配列にいれて.pngを省いて配列に入れ直す方法 / ジンギスカン
しろまさ様、回答ありがとうございます。無事できました。
パターンの解釈が自分の実力ではとうていできません。
もっと学んでいきたいと思います。

No.3558 2017/02/25(Sat) 15:28:37
(No Subject) / ランナ
uwscを使ってあるアプリケーションを操作しています。

あるウィンドウの●●というクリックボタンを、マウスの左ボタンでクリックするまで、
スクリプトをスリープさせたい、と考えていますが上手くいかないので教えてください。

それまでは、マウスで左クリックするまでスリープさせることで間に合っていたので

while !(GETKEYSTATE(VK_LBUTTON))
sleep(0.1)
wend

で済んでいました。

しかし●●というクリックボタンまで指定する必要が出てきたので

while !(GETKEYSTATE(VK_LBUTTON(id,"●●",CLK_BTN)))
sleep(0.1)
wend

とやってみましたが、上手くいきません。
「関数:VK_LBUTTONがありません」というエラーメッセージが出てしまいます。

getkeystateの関数では、クリックボタンの指定はできないのでしょうか。
改良点や、それ以外に方法などがあれば教えてください。
よろしくお願いします。

No.3538 2017/02/22(Wed) 16:08:15

Re: / stuncloud
> 「関数:VK_LBUTTONがありません」というエラーメッセージが出てしまいます。
VK_LBUTTONは関数ではないのでそうなります

で、●●ボタンがクリックされるまで待つ、というのはちょっと難しいです
例えば●●ボタンをクリックすると画面上に特定の文字が表示される、ということであればVK_LBUTTON検出後その文字列が表示されてるか確認する、というようにボタンクリックによる変更を検出できるような仕組みを作ることになると思います

No.3545 2017/02/23(Thu) 12:30:16

Re: / ランナ
ありがとうございます。ほかのやり方を試してみたいと思います。
No.3554 2017/02/24(Fri) 18:53:41
saveimgについて / カイ
お世話になります。

saveimgの幅や高さについて伺いたいことがあります。
例えば座標1〜10の範囲でキャプチャする時、幅を9にして1+9=10=右の座標にするのでしょうか。
それとも実際にキャプチャする範囲として幅10を入力するのでしょうか。

細かいことで申し訳ないのですがよろしくお願いします。

No.3541 2017/02/23(Thu) 09:41:05

Re: saveimgについて / stuncloud
幅は幅です
欲しい幅が10ピクセルなら10です
高さも同様

No.3543 2017/02/23(Thu) 12:02:57

Re: saveimgについて / カイ
質問に答えて頂きありがとうございます。
迷った箇所か解決しました。

No.3546 2017/02/23(Thu) 13:39:11
CLK_ITEMコマンドについていくつか / Jun金
お世話になっております。

CLK_ITEMコマンドについていくつか質問があります。

1.CLK_LSTVEWとCLK_ACCの違いは何ですか?
最初の画面上でファイルを実行するときは上記二つのコマンドでClickが可能ですが
NotepadのCtrl+Oを実行してFileを選択するのはCLK_LSTVEWで不可能です。

2.NotepadのCtrl+Oで様々なファイルリスト中見えないファイルを選択することはできないんですか?

以上、よろしくお願いいたします。

No.3542 2017/02/23(Thu) 11:07:09

Re: CLK_ITEMコマンドについていくつか / stuncloud
> 1.CLK_LSTVEWとCLK_ACCの違いは何ですか?
CLK_LSTVEWはリストビューのアイテムをクリックするためのものですね、リストビューというのはエクスプローラの画面のように行と列があるものがだいたいそうです
CLK_ACCは非常に大雑把に言うとクリックできそうなもの全部が対象 (厳密にはそういうことじゃないんですが
それぞれgetitemのITM_LSTVEWとITM_ACCCLKで一覧を取得できます

で、メモ帳のCtrl+oの「開く」画面ですが

id = exec("notepad.exe")
sckey(id, VK_CTRL, VK_O)
sleep(1)
for item in getitem(getid("開く"), ITM_LSTVEW, -1)
 print item
next

としてみましたがひとつも表示されないのでリストビューとして処理できないのかもしれません
なので処理は遅くなりますがCLK_ACCを使うしかないかもです

> 2.NotepadのCtrl+Oで様々なファイルリスト中見えないファイルを選択することはできないんですか?
非表示のものは無理だと思います


それと、メモ帳でファイルを開くのであれば

exec("notepad.exe C:\hoge.txt")

のようにexecでファイルパスを指定するという方法もあります

No.3544 2017/02/23(Thu) 12:17:19


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


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