忍者ブログ

ドラッグドロップで更新日時をファイル名に付与するVBScript

2021年03月25日
フォルダ別に作成されたログファイルが全部同じ名前で保存されている。。。

全件をローカルにコピペした場合は、(数字)で持ってこれるけど、
負荷軽減のために複数回に分けようとすると、windowsのバージョンが古いせいか
上書きしますかYES/NOしかない。

ファイル名に更新日時を付与したい衝動にかられる。

バッチファイルで使えそうなやつをみつけたけど、
更新日時の秒が入ってないのでそのままじゃ使えず。

軽くいじってみるも、うまくいかず断念。

自動的にファイル名に更新日付を付けるバッチファイルを作ったら便利すぎた
Engineer's Notebook
https://eng-notebook.com/post-3246/



VBScriptで自作を決意。
でもそのまえにググってみたら、もろHIT!

本部長は管理ができない
http://gren-dken.hatenablog.com/entry/2013/08/22/000119


冒頭部分のエラー処理については、こちらのサイトから

解析エンジニアの自動化 blog
http://chuckischarles.hatenablog.com/entry/2018/10/29/002921




利便性を考えて、更新日時の文字数は冒頭の定数で変更可能にした。

リネーム後のファイル名が既に使われている場合、
自動的に(№)を付与する仕様に変更。
ファイルの頭につけるかお尻につけるか
定数を定義して、IF文で分岐するように修正。

以下、ソース
PR
つづきはこちら "ドラッグドロップで更新日時をファイル名に付与するVBScript"

各フォームを呼び出すランチャーマクロ(ランチャー5)

2021年03月20日
ここのところユーザーフォームを使ったマクロを作ってきた。

第1弾 文頭および文末に文字を挿入するマクロ
第2弾 文頭および文末の文字を削除するマクロ
第3弾 Mid関数で文字を切り出すマクロ
第4弾 指定位置に文字を挿入するマクロ
今回は、第1弾~第4弾で作ったフォームを呼び出すフォーム作った。

ポイントは、数値の入力制限で使用した_KeyDownプロパティを使って
単一キー操作で各フォームを呼べるようにしたこと。

_KeyDownプロパティは、ユーザーフォームに対しては指定できないので、
TabIndexが1のキャンセルボタンに対して_KeyDownプロパティを設定。

起動時にアクティブになっているボタンに設定することがポイント。
ダウンロード



ちなみに、これらマクロを作ったきっかけである
1文字目の「’」のコントロールは残念ながらできなかった。。。

ユーザーフォームは、各オブジェクトを作るのがめんどくさいけど、
今回、_KeyDownプロパティで各モジュールを呼べることが分かったので
キー一覧書いたテキストボックスに_KeyDownプロパティを設定するのもありかな。
以下ソース

つづきはこちら "各フォームを呼び出すランチャーマクロ(ランチャー5)"

指定位置に文字を挿入するマクロ(ランチャー4)

2021年03月20日
前回、Mid関数で文字を切り出すマクロを作った。

文字の挿入も指定位置でできた方がいいなってことで作ってみた。

今回は、新しいことは何もないので、詳細省略。

ブログに公開するタイミングでバグが見つかる。。。


ユーザーフォームで入力箇所を数値指定して、
テキストボックスに入力した文字を挿入する。

ダウンロード



以下、ソース
つづきはこちら "指定位置に文字を挿入するマクロ(ランチャー4)"

Mid関数で文字を切り出すマクロ(ランチャー3)

2021年03月20日
前回、文頭および文末の文字を削除するマクロを作った。

ユーザーフォームで削除対象の文字を確認しながら
上下ボタンで文字数を設定できるUIが便利だった。

いつもMid関数で何文字目か調べるのがめんどくさいので、
Midで抜き出すバージョンを作ってみた。

基本的な作りは前回と全く同じ。

Leftの代わりにMidでSample文字を表示する仕様に変更。
文字数を指定しないとすぐに表示できないので、
文字数のデフォルト値を10に設定した。
マクロで文字を確認してMid関数を使う方が多そう。


ダウンロード


プロパティは以下のとおり。

オブジェクト名:strMidForm(フォーム名)
Caption(表示名):MID(selection,開始文字,文字数)

オブジェクト名:stPos '開始位置
TabIndex(タブ遷移の順番):1
IMEMode(日本語入力制御):2 (fmIMEModeOff) 英語モード
TextBoxに数字のみ入力させる 【VBA在庫管理#33】 | オレグラミング (oregramming.com)

オブジェクト名:Ln '文字数
TabIndex(タブ遷移の順番):2
IMEMode(日本語入力制御):2 (fmIMEModeOff) 英語モード
Value(デフォルト値):10 

オブジェクト名:CommandButton1 ’キャンセルボタン
Accelerator(操作キー Alt + ...):C
Cancel(ESCキー紐づけ):True
TabIndex(タブ遷移の順番):4

オブジェクト名:CommandButton2 '実行ボタン
Accelerator(操作キー Alt + ...):M
TabIndex(タブ遷移の順番):3

オブジェクト名:SampleMid 'Mid後の文字サンプル表示
TabStop(タブ遷移の対象):False
TextAlign(テキスト位置):2 fmTextAlignCenter(中央揃え)

以下、ソース
つづきはこちら "Mid関数で文字を切り出すマクロ(ランチャー3)"

文頭および文末の文字を削除するマクロ(ランチャー2)

2021年03月20日
前回、文頭および文末に文字を挿入するマクロを作った。

マクロの実行はCtrl+Zで戻せないので、元に戻すためのマクロを作る。

今回もめんどくさいけど、ユーザーフォームで。

文頭と文末から削除する文字数を指定するフォームを用意。
フォームに入力可能な文字を数値に制限するため、キーコントロールを実施。
数値専用のテキストボックス|ユーザーフォーム入門 (excel-ubara.com)

KeyCode = 0とすると、キー入力を無視する。
Acceleratorで指定した文字やESCキーのキャンセルも
KeyCode = 0の条件に入っている場合は操作が効かないので注意。
数値入力めんどくさいから上下操作もできる面白いな。
キーコントロールのソースを見たら簡単そうだったので実装。
(Case vbKeyUp、Case vbKeyDownで指定するだけ)

上下操作で数値を増減させるけど、キー入力に備えてデフォルトはブランクに。
数値型だとブランクの場合に計算エラーが出るので
バリアント型で変数を受けて、数値型の変数を別途定義して計算。


何文字削除したらどうなるか事前に知りたいよな。
サンプル表示用のラベルを用意し、selection(1)で削除対象の文字を表示。

キーコントロールの最後に表示制御を入れていたら、
直接数値入力時に更新されないバグが発生。
「_change」で別途指定が必要だったので修正。



ダウンロード


デフォルトから変更したプロパティは以下の通り。

オブジェクト名:strTrimForm(フォーム名)
Caption(表示名):セルの両端の文字列を削除

オブジェクト名:stLen '文頭から削除する文字数
TabIndex(タブ遷移の順番):1
IMEMode(日本語入力制御):2 (fmIMEModeOff) 英語モード
TextBoxに数字のみ入力させる 【VBA在庫管理#33】 | オレグラミング (oregramming.com)

オブジェクト名:edLen '文末文字
TabIndex(タブ遷移の順番):2
IMEMode(日本語入力制御):2 (fmIMEModeOff) 英語モード

オブジェクト名:CommandButton1 ’キャンセルボタン
Accelerator(操作キー Alt + ...):C
Cancel(ESCキー紐づけ):True
TabIndex(タブ遷移の順番):4

オブジェクト名:CommandButton2 '実行ボタン
Accelerator(操作キー Alt + ...):T
TabIndex(タブ遷移の順番):3

オブジェクト名:SampleLeft '文頭の削除対象文字サンプル表示
TabStop(タブ遷移の対象):False

オブジェクト名:SampleRight '文末の削除対象文字サンプル表示
TabStop(タブ遷移の対象):False

以下、ソース
つづきはこちら "文頭および文末の文字を削除するマクロ(ランチャー2)"