忍者ブログ

VBScriptのInputBoxでキャンセル判定する方法について

2021年11月07日
前に投稿したクリップボードの内容をファイル化するVBScriptについて
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
  Vodafone絵文字 i-mode絵文字 Ezweb絵文字