VBScriptのInputBoxでキャンセル判定する方法について
2021年11月07日
前に投稿したクリップボードの内容をファイル化するVBScriptについて
https://aki.p-kin.net/Entry/25/
メールなんかを保存するのに便利でちょいちょい使っているんだけど、
別用途で提供したときに、キャンセル機能が欲しいと要望が出た。
InputBoxに何も入力しなかった場合も、キャンセルボタンを押した場合も
返り値は、空白なので制御不能。
確かにキャンセルはしたい。でも、何も入力せずに保存できた方が便利。
・・・思いついた!!
InputBoxのオプションに初期値を設定できるから
半角スペースを初期値に設定しておいて、
返り値が空白ならキャンセル、半角スペースなら「固定文字+日付」
その他の文字なら「固定文字+日付+(その他の文字)」に分類しよう!
って、デフォルトの文字を最初から設定しておいてあげればいいじゃん。。。
改修か所は以下の通り。
●InputBoxにデフォルト追加。説明が不親切だったので作文。長いので定数に格納した。
●メイン処理を明確化するために、Sub main()に処理をまとめた。
●ファイル名の共通部分を定数に格納した。
以下、ソース。
https://aki.p-kin.net/Entry/25/
メールなんかを保存するのに便利でちょいちょい使っているんだけど、
別用途で提供したときに、キャンセル機能が欲しいと要望が出た。
InputBoxに何も入力しなかった場合も、キャンセルボタンを押した場合も
返り値は、空白なので制御不能。
確かにキャンセルはしたい。でも、何も入力せずに保存できた方が便利。
・・・思いついた!!
InputBoxのオプションに初期値を設定できるから
半角スペースを初期値に設定しておいて、
返り値が空白ならキャンセル、半角スペースなら「固定文字+日付」
その他の文字なら「固定文字+日付+(その他の文字)」に分類しよう!
って、デフォルトの文字を最初から設定しておいてあげればいいじゃん。。。
改修か所は以下の通り。
●InputBoxにデフォルト追加。説明が不親切だったので作文。長いので定数に格納した。
●メイン処理を明確化するために、Sub main()に処理をまとめた。
●ファイル名の共通部分を定数に格納した。
以下、ソース。
PR
Dirコマンドの取得結果を整理するVBScript
2021年08月31日
Dirコマンドの取得結果をdir /s /b風に整理するVBScript
元々、Dirコマンドを使ってフォルダ内のファイル一覧を取得して、
エクセルを使って解析していたんだけど、
何をするにもエクセルでマクロを動かしてからだと使い勝手も悪いし、
他のエクセルを使った業務ができなくなるので
VBScriptに外だしすることにした。
エクセルバージョンはこちら
https://aki.p-kin.net/Entry/10/
※ 不具合修正。環境によってファイルサイズの末尾に「バイト」が付く場合があるので、
fSize = Trim(Replace(Mid(buf, 19, 16),"バイト",""))とするのが良いかも。
おさらい
コマンドプロンプトで以下コマンドを打つと、フォルダ内のファイル一覧を取得できる。
> Dir フォルダ名
このコマンドのよく使うオプションはこちら
/s:サブフォルダを対象にする
/a-d:ファイルのみを対象にする
/b :フルパスのファイル名のみ取得する
> ファイル名:指定したファイルに結果を上書きする
>> ファイル名:指定したファイルに結果をアペンドする
/b形式は加工しやすいけど、ファイルのサイズや更新日時を取りたい。。。
というわけで、「Dir /s /a-d フォルダ名 > ファイル名 」のコマンドで取得して、
ドラッグドロップすると/b形式に変換するVBScript。
それにしても、VBScriptはデバッグしにくいなー。
ソースの中身をテキストファイルにコピペして、.VBSの拡張子で保存。
Dir /s /a-dの結果をドラッグドロップすると、/bっぽく整理して出力。
ファイルサイズの出力等の設定をオプション定数に出した。
以下、ソース。
元々、Dirコマンドを使ってフォルダ内のファイル一覧を取得して、
エクセルを使って解析していたんだけど、
何をするにもエクセルでマクロを動かしてからだと使い勝手も悪いし、
他のエクセルを使った業務ができなくなるので
VBScriptに外だしすることにした。
エクセルバージョンはこちら
https://aki.p-kin.net/Entry/10/
※ 不具合修正。環境によってファイルサイズの末尾に「バイト」が付く場合があるので、
fSize = Trim(Replace(Mid(buf, 19, 16),"バイト",""))とするのが良いかも。
おさらい
コマンドプロンプトで以下コマンドを打つと、フォルダ内のファイル一覧を取得できる。
> Dir フォルダ名
このコマンドのよく使うオプションはこちら
/s:サブフォルダを対象にする
/a-d:ファイルのみを対象にする
/b :フルパスのファイル名のみ取得する
> ファイル名:指定したファイルに結果を上書きする
>> ファイル名:指定したファイルに結果をアペンドする
/b形式は加工しやすいけど、ファイルのサイズや更新日時を取りたい。。。
というわけで、「Dir /s /a-d フォルダ名 > ファイル名 」のコマンドで取得して、
ドラッグドロップすると/b形式に変換するVBScript。
それにしても、VBScriptはデバッグしにくいなー。
ソースの中身をテキストファイルにコピペして、.VBSの拡張子で保存。
Dir /s /a-dの結果をドラッグドロップすると、/bっぽく整理して出力。
ファイルサイズの出力等の設定をオプション定数に出した。
以下、ソース。
テキストファイルの文字列を置換して上書きするVBScript
2021年05月21日
2022/7/7追記
より汎用性の高いソースができたので、ご紹介。
指定したテキストファイルの文字列を置換して、別名保存(上書き)するVBScript
SQLを操作できるフリーソフト「CSE」を使ってSELECT結果をCSV出力すると、
ダブルコーテーション「"」が付いてしまう。
ダブルコーテーションが付いていると既存のツールが動作しないので、
テキストファイルのダブルコーテーションを削除するVBScriptを作ってみた。
また、SELECT結果をエクセルに張り付けるため、
カンマをTABに置換するVBScriptも作った。
ソースは同じで置換する文字が違うだけなので、片方のみソースを掲載。
さんざん使いまわしているファイルをドラッグドロップで動く処理が長いが、
実際の処理はあんまり長くない。
ファイルを編集して上書き保存のやり方がわからず、
テキスト出力して名前を付けて保存の処理にした。
以下、ソース。
より汎用性の高いソースができたので、ご紹介。
指定したテキストファイルの文字列を置換して、別名保存(上書き)するVBScript
SQLを操作できるフリーソフト「CSE」を使ってSELECT結果をCSV出力すると、
ダブルコーテーション「"」が付いてしまう。
ダブルコーテーションが付いていると既存のツールが動作しないので、
テキストファイルのダブルコーテーションを削除するVBScriptを作ってみた。
また、SELECT結果をエクセルに張り付けるため、
カンマをTABに置換するVBScriptも作った。
ソースは同じで置換する文字が違うだけなので、片方のみソースを掲載。
さんざん使いまわしているファイルをドラッグドロップで動く処理が長いが、
実際の処理はあんまり長くない。
ファイルを編集して上書き保存のやり方がわからず、
テキスト出力して名前を付けて保存の処理にした。
以下、ソース。
日付のフォルダを作るVBscript2
2021年05月21日
だいぶ前に日付のフォルダを作るVBScriptを作った。
https://aki.p-kin.net/Entry/24/
業務ではちょいちょい使っていて、思うことがある。
フォルダ作ったんなら開いてよ!!
てなわけで、改良してみた。
参考になったのがこのサイト
'https://rakugakiman.com/archives/2258
フォルダを開く処理って1行で表現できるのね。
使いやすさを考えて、1行表現ではなくモジュールに飛ばすことにした。
以下、ソース。
https://aki.p-kin.net/Entry/24/
業務ではちょいちょい使っていて、思うことがある。
フォルダ作ったんなら開いてよ!!
てなわけで、改良してみた。
参考になったのがこのサイト
'https://rakugakiman.com/archives/2258
フォルダを開く処理って1行で表現できるのね。
使いやすさを考えて、1行表現ではなくモジュールに飛ばすことにした。
以下、ソース。
テキストファイルから指定した文字列を含む行を抽出するVBScriptの一般化
2021年04月25日
前回、ログファイルから該当の文字列を含む行だけ抽出するVBScriptを作った。
抽出する文字列を追加する場合、プログラムを修正しないといけないってのは
使いづらいと思い、抽出条件をINPUTBOXで指定するバージョンを作ってみた。
紙ベースでしっかり設計したから1時間かからずに完成。
毎度INPUTBOXで文字列を入力するのはデバッグ中もだるさを感じるとこなので、
オプション設定にした方が使いやすいか・・・。①か②お好みで。
①strFilter = InputBox("フィルタ条件を入力してください。" & chr(10) & "ORは†、ANDは‡で指定します。","フィルタ条件入力")
②strFilter = "ui‡com†アカ"
カンマやアスタリスクを演算文字列として使うことも考えたけど、
演算文字列はログ抽出できないので、†と‡を使うことにした。
演算文字列は‡を先に計算する。たとえば
A†B‡C とした場合は、Aまたは(BかつC)を含む文字列を取得する。
‡の数が未知数だったので、Dictionary配列を使うことにした。
うまく使えば結構便利かも!!
◆使用方法◆(変更なし)
ソースをメモ帳にコピーし、「.vbs」形式で保存。
ログファイルを保存したファイルのアイコンにドラッグドロップする。
(複数ファイルにも対応)
以下、ソース。
抽出する文字列を追加する場合、プログラムを修正しないといけないってのは
使いづらいと思い、抽出条件をINPUTBOXで指定するバージョンを作ってみた。
紙ベースでしっかり設計したから1時間かからずに完成。
毎度INPUTBOXで文字列を入力するのはデバッグ中もだるさを感じるとこなので、
オプション設定にした方が使いやすいか・・・。①か②お好みで。
①strFilter = InputBox("フィルタ条件を入力してください。" & chr(10) & "ORは†、ANDは‡で指定します。","フィルタ条件入力")
②strFilter = "ui‡com†アカ"
カンマやアスタリスクを演算文字列として使うことも考えたけど、
演算文字列はログ抽出できないので、†と‡を使うことにした。
演算文字列は‡を先に計算する。たとえば
A†B‡C とした場合は、Aまたは(BかつC)を含む文字列を取得する。
‡の数が未知数だったので、Dictionary配列を使うことにした。
うまく使えば結構便利かも!!
◆使用方法◆(変更なし)
ソースをメモ帳にコピーし、「.vbs」形式で保存。
ログファイルを保存したファイルのアイコンにドラッグドロップする。
(複数ファイルにも対応)
以下、ソース。