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()に処理をまとめた。
●ファイル名の共通部分を定数に格納した。
以下、ソース。
'CripToFile(uni)2.vbs
call main()
Sub main()
'実行時点のクリップボードの中身を保存する
dim ClipText
ClipText=GetClipboardText()
'ファイル名を生成
dim iText
Const strMsg = "クリップボードを取得しました。保存ファイル名を指定してください。"
Const strTitle = "ファイル名入力"
Const strDefault = " "
iText = inputbox(strMsg,strTitle,strDefault)
dim date,fName
date=Replace(now, "/", "")
date=Replace( date , ":" , "" )
date=Replace( date , " " , "_" )
date=left(date , 8) '20211107_2256 8:年月日のみ、13:年月日時分
Const CommonName = "ClipText"
if iText ="" then
fName = ""
elseif iText =strDefault then
fName = CommonName & "_" & date & ".txt"
else
fName = CommonName & "_" & date & "(" & iText & ").txt"
end if
if fName = "" then
msgbox "キャンセルしました。"
else
'テキストファイルを作って書き込み https://win.just4fun.biz/
dim fso,tso
Set fso = CreateObject("Scripting.FileSystemObject")
Set tso = fso.CreateTextFile(fName, true,true) 'unicode
tso.Write(ClipText)
tso.Close
end if
end Sub
'クリップボードを取得 'http://osanai.org/47/
Function GetClipboardText()
Dim objHTML
Set objHTML = CreateObject("htmlfile")
GetClipboardText = Trim(objHTML.ParentWindow.ClipboardData.GetData("text"))
End Function
PR
Comment