WSF : VBScript の 関数定義を WEB 上に置いて PC で使用する

基本的には SHIFT_JIS で保存する

まず、WEB 側に置くコードですが、Content-Type を text/plain にする為に、PHP で httpヘッダーを記述します。.htaccess で記述してもかまいませんが、WEB上の好きな場所に移動しやすくする為に php で記述しておくのが一番いいと思います。 ソースのキャラクタセットは shift_jis で保存して shift_jis として httpヘッダーに出力します。こうしておくと、PC 側で ServerXMLHTTP を使って読み出して、動的に関数を定義する事も可能になります。( 動的に定義する場合は、UTF-8 でも問題ありません )

動的に定義する場合は VBScript の記述方法に注意

WEB 側に VBScript のコードを置いて動的に定義する場合の注意として重要なルールが二つあります。 1) シングルクォートのコメントを使用しない 2) 条件式の = を使用しない 何れも VBScript の構文解析の問題らしいです。

PHP で 『正規表現のトリム』の記述

01.<?php
02.header( "Content-Type: text/plain; charset=shift_jis" );
03.header( "Expires: Thu, 19 Nov 1981 08:52:00 GMT" );
04.header( "Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0" );
05.header( "Pragma: no-cache" );
06.?>
07.REM **********************************************************
08.REM 正規表現のトリム
09.REM **********************************************************
10.Function RegTrim( strValue )
11. 
12.        Dim regEx, str
13. 
14.        Set regEx = New RegExp
15.        regEx.IgnoreCase = True
16.        regEx.Pattern = "^[ \s]+"
17.        str = regEx.Replace( strValue, "" )
18.        regEx.Pattern = "[ \s]+$"
19.        RegTrim = regEx.Replace( str, "" )
20. 
21.End Function

この関数は、VBScript の正規表現を使って文字列の左右の空白文字を漢字スペースも含めて取り除くものです。

PC 側の定義は通常通りですが、script 要素の src 属性で web 上の場所を指定する事になります。拡張子を .wsf にしてWscript.exe か Cscript.exe で実行します( 通常はエクスプローラからダブルクリックです )
01.<job>
02.<script language="VBScript" src="https://toolbox.winofsql.jp/vbs/regtrim.php"></script>
03.<script language="VBScript">
04. 
05.str = RegTrim( getResource( "mydata" ) )
06.MsgBox( "/" & str & "/" )
07. 
08.</script>
09.<resource id="mydata">
10. 
11. 
12.    この部分のみ取り出します    
13. 
14. 
15.</resource>
16.</job>

埋め込みテキストがソースコードの場合の記述方法

resource 要素では、ソースコード内にテキストデータを用意できるのでソースコードを準備しておいて、プログラムを登録したい時に使ったりします 但し、そのような場合は文の中に < があるとエラーになるので以下のように記述します
01.<job>
02.<script language="VBScript" src="https://toolbox.winofsql.jp/vbs/regtrim.php"></script>
03.<script language="VBScript">
04. 
05.str = RegTrim( getResource( "mydata" ) )
06.MsgBox( "/" & str & "/" )
07. 
08.</script>
09.<resource id="mydata">
10.<![CDATA[
11. 
12.    この部分のみ  <  取り出します    
13. 
14.]]>
15.</resource>
16.</job>




VBScript

シャットダウンダイアログを開く( VBscript, Jscript, C#, C# in PowerShell, PowerShell, PHP, Python, Ruby )

ALT + F4



デスクトップをクリックまたは、デスクトップだけを表示してこのショートカットで開きます。Windows のアプリケーションは通常このショートカットで終了します。(タイトルバーの左上のアイコンをクリックするとメニューが表示されてその中にあります)



VBScript

Shell.ShutdownWindows method

Jscript

C# : VisualStudio
01.using System;
02. 
03.namespace ShutdownDialog
04.{
05.        class Program
06.        {
07.                static void Main(string[] args)
08.                {
09.                        dynamic shell = Activator.CreateInstance(Type.GetTypeFromProgID("shell.application"));
10.                        shell.ShutdownWindows();
11. 
12.                }
13.        }
14.}

PowerShell 内で C#
01.$code = @"
02.using System;
03.public class MyClass {
04.        public static void Main() {
05. 
06.                dynamic shell = Activator.CreateInstance(Type.GetTypeFromProgID("shell.application"));
07.                shell.ShutdownWindows();
08. 
09.        }
10.}
11."@
12. 
13.Add-Type -Language CSharp -TypeDefinition $code -ReferencedAssemblies ("Microsoft.CSharp")
14. 
15.[MyClass]::Main()

PowerShell のみ

PHP

Python
1.import win32com.client
2.shell = win32com.client.Dispatch("shell.application")
3.shell.ShutdownWindows()

pywin32 が必要なので、こちらを参照してください

Ruby





小さな VBScript 集

SendToフォルダを開くスクリプト
1.Set obj = CreateObject("Shell.Application")
2.Set objFolder = obj.NameSpace( &h09 )
3.obj.Explore(objFolder.Self.Path)

MDB 作成

C:\Windows\SysWOW64\cscript.exe create_mdb.vbs
1.Set obj = CreateObject("ADOX.Catalog")
2.obj.Create "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=sample.mdb;"

GUID 取得
1.Set TypeLib = CreateObject("Scriptlet.TypeLib")
2.Call InputBox("コピーして使用して下さい","新しい GUID を取得しました",TypeLib.Guid)

シャットダウンダイアログ

管理者コマンドプロンプト
1.Set obj = Wscript.CreateObject("Shell.Application")
2.obj.ShellExecute "cmd.exe", "/k", "", "runas", 1

アクセス可能な階層を持つフォルダのサイズ
1.Set objFSO = CreateObject("Scripting.FileSystemObject")
2.Set objFolder = objFSO.GetFolder("c:\temp")
3.Wscript.Echo objFolder.Size

空の zip ファイルの作成
1.Set Fso = CreateObject( "Scripting.FileSystemObject" )
2.Set Handle = Fso.CreateTextFile( "empty.zip", True )
3.EmptyData = Chr(&H50) & Chr(&H4B) & Chr(&H5) & Chr(&H6)
4.EmptyData = EmptyData & String( 18, Chr(0) )
5.Handle.Write EmptyData
6.Handle.Close

Excel から PDF 作成
1.Set ExcelApp = CreateObject( "Excel.Application" )
2.Set MyBook = ExcelApp.Workbooks.Open( "Book1.xlsx" )
3.Call MyBook.ExportAsFixedFormat( 0, "Book1.pdf" )
4.ExcelApp.Quit()


VBScript : 既存の Excel を PDF に変換する ( ExportAsFixedFormat )



単純な一覧データを出力した PDF の見本




Excelで名前を付けて保存で PDF に保存できますが、これはスクリプトで行うコードです。
( プリンタが使える状態でないと動作しません )

ExportAsFixedFormat メソッド

XlFixedFormatType

.wsf で作成しています。もともと、.wsf のほうが簡単に外部ライブラリを参照したり、オブジェクトを最初から定義できるのでコードが簡潔になります。ここでは、Excel.Application 内で定義されている定数も参照して使えるようにしています。

Excel 側では、印刷設定により一行目のタイトルを常に表示するようにしたり、A4 横にして縮小したりしています。シートは二つありますが、PDF に変換すると全て出力されます。


01.<JOB>
02.<OBJECT id="Fso" progid="Scripting.FileSystemObject" />
03.<OBJECT id="ExcelApp" progid="Excel.Application" />
04.<REFERENCE guid="00020813-0000-0000-C000-000000000046" />
05.<SCRIPT language="VBScript">
06.' Wscript.Echo xlTypePDF,xlTypeXPS
07. 
08.' **************************************
09.' スクリプトのあるディレクトリの取得
10.' **************************************
11.strCurPath = WScript.ScriptFullName
12.Set obj = Fso.GetFile( strCurPath )
13.Set obj = obj.ParentFolder
14.strCurPath = obj.Path
15. 
16.' 途中で異常終了すると、Excel がプロセスに残ってしまうので表示させています。
17.' マウス等で Excel 本体を操作しないで下さい。
18.' Excel を表示させたくない場合は、以下を削除または行頭に ' でコメントにして下さい
19.ExcelApp.Visible = True
20. 
21.Dim MyBook
22.Dim FilePath
23. 
24.' ここで Excel を参照するダイアログが開きます
25.FilePath = ExcelApp.GetOpenFilename("Excel ファイル (*.xlsx;*.xls), *.xlsx;*.xls", 1, "Excel ファイルの選択")
26.if FilePath = "False" Then
27.        MsgBox "Excel ファイルの選択がキャンセルされました"
28.        ' スクリプト終了
29.        Wscript.Quit()
30.End If
31. 
32.' ここで Excel に読み込んでいます
33.on error resume next
34.' Workbook を取得( スクリプトと同じディレクトリ )
35.Set MyBook = ExcelApp.Workbooks.Open( FilePath )
36.if Err.Number <> 0 then
37.        ' 終了( 開放 )
38.        ExcelApp.Quit()
39.        Wscript.Echo Err.Description & vbCrLf & FilePath
40.        ' スクリプト終了
41.        Wscript.Quit()
42.end if
43.on error goto 0
44. 
45.Dim aPath
46.Dim strFileName
47.Dim aExt
48. 
49.' Excel の名前部分を取り出して、pdf の名前部分にします
50.aPath = Split(FilePath, "\")
51.strFileName = aPath(Ubound(aPath))
52.aExt = Split(strFileName,".")
53.strFileName = aExt(0)
54. 
55.' スクリプトと同じフォルダに保存されます
56.Call MyBook.ExportAsFixedFormat( xlTypePDF, strCurPath & "\" & strFileName & ".pdf" )
57. 
58.' 終了( 開放 )
59.ExcelApp.Quit()
60. 
61.' 終了確認
62.Wscript.Echo "処理が終了しました"
63. 
64.</SCRIPT>
65.</JOB>

Microsoft の記事

Application.GetOpenFilename メソッド

Microsoft の英文の記事

Saving Workbooks to PDF and XPS Formats in Excel 2007




VBScript : キーストロークを送信してキー操作をした事にする( 例 : リモート デスクトップ接続ダイアログ )

リモート デスクトップ接続は開いた後、詳細画面が表示されないので、ALT+O を送り、その後 SHIFT+TAB でタブを選択して、右矢印で次のタブに移動させます。 ALT+O SHIFT+TAB > 右矢印 画面タブで設定
01.Set WshShell = CreateObject("WScript.Shell")
02.WshShell.Run( "mstsc.exe" )
03. 
04.WScript.Sleep(500)
05.WshShell.AppActivate("リモート デスクトップ接続")
06.WScript.Sleep(500)
07. 
08.' キーストロークを送信
09.WshShell.SendKeys ("%O")
10.WScript.Sleep(500)
11.WshShell.SendKeys ("+{TAB}")
12.WScript.Sleep(500)
13.WshShell.SendKeys ("{RIGHT}")

※ キーストロークの送信は環境や状況によっては、うまく動作しないかもしれません。その場合は適宜変更して下さい (キーストローク詳細 / SendKeys メソッド)




VBScript : ファイルのパスや名前をクリップボードへ( ダブルクォートなし ) / 送るフォルダに保存

エクスプローラで、SHIFT キーを押しながら右クリックすると『パスとしてコピー』がありますが、ダブルクォートが付加されています( たいていはそのほうがいいのですが )ので、ダブルクォートのないパスを取得します


▼ こんな感じで取得されます
"C:\Program Files\7-Zip\7-zip.dll"

filepath.vbs( SendTo ディレクトリに置いてください )

01.Set WshShell = Wscript.CreateObject("WScript.Shell")
02.Set Fso = Wscript.CreateObject("Scripting.FileSystemObject")
03. 
04.strTemp = WshShell.ExpandEnvironmentStrings("%temp%")
05.strPath = strTemp & "\__clipCommand.tmp"
06. 
07.Set objHandle = Fso.OpenTextFile( strPath, 2, True )
08.objHandle.Write Wscript.Arguments(0)
09. 
10.Call WshShell.Run( "cmd.exe /c clip < """ & strPath & """", 0, True )

▼ こうなります
C:\Program Files\7-Zip\7-zip.dll

以下はディレクトリ部分を省いた名前の部分のみをクリップボードにコピーします。

filename.vbs( SendTo ディレクトリに置いてください )

01.Set WshShell = Wscript.CreateObject("WScript.Shell")
02.Set Fso = Wscript.CreateObject("Scripting.FileSystemObject")
03. 
04.strTemp = WshShell.ExpandEnvironmentStrings("%temp%")
05.strPath = strTemp & "\__clipCommand.tmp"
06. 
07.Set objHandle = Fso.OpenTextFile( strPath, 2, True )
08.strName = Wscript.Arguments(0)
09.aPath = Split(strName,"\")
10.strName = aPath(Ubound(aPath))
11.objHandle.Write strName
12. 
13.Call WshShell.Run( "cmd.exe /c clip < """ & strPath & """", 0, True )

▼ こうなります
7-zip.dll

さらに以下では、複数ファイルを選択した場合のファイル名部分だけを取り出して複数行としてコピーします( 但しあまり大量のファイルは元々の文字列の制限によりエラーとなります

filelist.vbs( SendTo ディレクトリに置いてください )

01.Set WshShell = Wscript.CreateObject("WScript.Shell")
02.Set Fso = Wscript.CreateObject("Scripting.FileSystemObject")
03. 
04.str = ""
05.For I = 0 to Wscript.Arguments.Count-1
06.        aData = Split( Wscript.Arguments(I), "\" )
07.        str = str & aData(Ubound(aData)) & vbCrLf
08.Next
09. 
10.strTemp = WshShell.ExpandEnvironmentStrings("%temp%")
11.strPath = strTemp & "\__clipCommand.tmp"
12. 
13.Set objHandle = Fso.OpenTextFile( strPath, 2, True )
14.objHandle.Write str
15.Call WshShell.Run( "cmd.exe /c clip < """ & strPath & """", 0, True )

▼ ファイルが多すぎて起きるエラー


▼ うまくいくとこんな感じです
nslookup.exe
ntdll.dll
odbc32.dll
ole32.dll


操作補足

エクスプローラで SendTo フォルダに移動するには、アドレスバーに sendto と直接入力します。テンポラリフォルダは、%temp% と入力して下さい。




コードを直接ダウンロードした場合は、右クリックのプロパティより『許可する』にチェックしておきます。






XCOPY で新しいファイルのみバックアップする為のスクリプトを作成するスクリプト / VBScript

⭕ ディレクトリ選択でバックアップするフォルダを決定 ⭕ カレント(このスクリプトを実行したフォルダ)にスクリプトが作成されます ⭕ 新しいスクリプトを実行 ⭕ カレントにバックアップ用のフォルダが作成されます ⭕ バックアップするフォルダ内をそのフォルダ内に全てコピーします ▼ 実行時に表示されるフォルダ選択 XCOPY なので、2回目以降は新しいファイルのみコピーします ▼ 作成されたスクリプトのサンプルです
01.strName = "BK_C_temp_lightbox"
02.strTarget = "C:\temp\lightbox"
03.strBackupFolder = "C:\tmp\vbs"
04.if MsgBox( strTarget & vbCrLf & "のバックアップを開始します。よろしいですか? (保存先:" & strBackupFolder & "\" & strName & ")", 1 ) = 2 then
05.        Wscript.Quit
06.end if
07.Set WshShell = Wscript.CreateObject( "WScript.Shell" )
08.ExecCommand = "cmd.exe /C ""xcopy.exe """ & strTarget & """ """ & strBackupFolder & "\" & strName & "\"" /D /E /C /S /Y & PAUSE"""
09.Call WshShell.Run( ExecCommand )

▼ 使用するオプション
/D : コピー元の日付がコピー先の日付より新しいファイルだけをコピーします
/E : ディレクトリまたはサブディレクトリが空であってもコピーします
/C : エラーが発生してもコピーを続けます
/S : 空の場合を除いて、ディレクトリとサブディレクトリをコピーします
/Y : 既存のファイルを上書きする前に確認のメッセージを表示しません

一番重要なのは、/D です。/S /E で、存在するディリクトリはすべてコピーされます。/E /Y によって、最後まで停止する事なく実行されます。

追加で使う事が想定されるオプション

コピーしたくないディレクトリやファイルがある場合、以下のように指定します。

/EXCLUDE:ファイルのパス

ファイルのパスが示すテキストファイル内に、除外するディレクトリやファイルにある文字列の一部を1 行に 1 つずつ記述します。

その文字列が、コピー対象ファイルの絶対パスの一部と一致した場合、そのファイルはコピーから除外されます。

▼ 例
⭕ "\obj\" という文字列を指定するとディレクトリ obj の下の全ファイルが除外 されます。
⭕ ".obj" という文字列を指定すると .obj という拡張子のファイルがすべて除外されます

ソースコード

001.' ***********************************************************
002.' 処理開始
003.' ***********************************************************
004.Set Fso = Wscript.CreateObject( "Scripting.FileSystemObject" )
005.Set Shell = Wscript.CreateObject( "Shell.Application" )
006. 
007.' ***********************************************************
008.' 実行中ディレクトリの取得
009.' ***********************************************************
010.strPath = Wscript.ScriptFullName
011.Set objFile = Fso.GetFile( strPath )
012.strBackupFolder = Fso.GetParentFolderName( objFile )
013. 
014.' ***********************************************************
015.' バックアップ対象ディレクトリの取得
016.' ***********************************************************
017.' ① 省略すると、ルートはデスクトップ
018.Set objFolder = Shell.BrowseForFolder( 0, "バックアップするフォルダを選択してください", &H4B )
019. 
020.' ② 文字列による直接指定
021.' strRoot = "c:\"
022.' Set objFolder = Shell.BrowseForFolder( 0, "バックアップするフォルダを選択してください", &H4B, strRoot )
023. 
024.' ③ ルートを番号で指定( この場合は C:\Users\username\AppData\Local )
025.' ※ あまり現実的ではない特殊ディレクトリの選択
026.' nRoot = &h1c
027.' Set objFolder = Shell.BrowseForFolder( 0, "バックアップするフォルダを選択してください", &H4B, nRoot )
028. 
029.if objFolder is nothing then
030.        WScript.Quit
031.end if
032.if not objFolder.Self.IsFileSystem then
033.        WScript.Echo "ファイルシステムではありません"
034.        WScript.Quit
035.end if
036. 
037.strTargetFolder = objFolder.Self.Path
038.strName = Replace( strTargetFolder, ":", "" )
039.strName = Replace( strName, "\", "_" )
040.strName = Replace( strName, " ", "" )
041.strName = "BK_" & strName
042. 
043.' ***********************************************************
044.' スクリプト作成
045.' ***********************************************************
046.Set OutFile = Fso.OpenTextFile( strBackupFolder & "\" & strName & ".vbs", 2, True )
047. 
048.OutFile.WriteLine "strName = """ & strName & """"
049.OutFile.WriteLine "strTarget = """ & strTargetFolder & """"
050.OutFile.WriteLine "strBackupFolder = """ & strBackupFolder & """"
051.OutFile.Write "if MsgBox( strTarget & vbCrLf & ""のバックアップを開始します。よろしいですか? (保存先:"" & strBackupFolder & ""\"" & strName & "")"""
052.OutFile.WriteLine ", 1 ) = 2 then"
053.OutFile.WriteLine "     Wscript.Quit"
054.OutFile.WriteLine "end if"
055. 
056.OutFile.WriteLine "Set WshShell = Wscript.CreateObject( ""WScript.Shell"" )"
057.OutFile.Write "ExecCommand = ""cmd.exe /C """"xcopy.exe """""" & strTarget & """""" """""" & strBackupFolder & ""\"" & strName & ""\"""""
058.OutFile.WriteLine " /D /E /C /S /Y & PAUSE"""""""
059.OutFile.WriteLine "Call WshShell.Run( ExecCommand )"
060. 
061.OutFile.Close
062. 
063.WScript.Echo "バックアップスクリプト : " &  strName & ".vbs" & " を作成しました"
064. 
065. 
066.' ***********************************************************
067.' ディレクトリ指定用番号
068.' https://docs.microsoft.com/ja-jp/windows/desktop/api/shldisp/ne-shldisp-shellspecialfolderconstants
069.' typedef enum {
070.'       ssfALTSTARTUP = 0x1d,
071.'       ssfAPPDATA = 0x1a,
072.'       ssfBITBUCKET = 0x0a,
073.'       ssfCOMMONALTSTARTUP = 0x1e,
074.'       ssfCOMMONAPPDATA = 0x23,
075.'       ssfCOMMONDESKTOPDIR = 0x19,
076.'       ssfCOMMONFAVORITES = 0x1f,
077.'       ssfCOMMONPROGRAMS = 0x17,
078.'       ssfCOMMONSTARTMENU = 0x16,
079.'       ssfCOMMONSTARTUP = 0x18,
080.'       ssfCONTROLS = 0x03,
081.'       ssfCOOKIES = 0x21,
082.'       ssfDESKTOP = 0x00,
083.'       ssfDESKTOPDIRECTORY = 0x10,
084.'       ssfDRIVES = 0x11,
085.'       ssfFAVORITES = 0x06,
086.'       ssfFONTS = 0x14,
087.'       ssfHISTORY = 0x22,
088.'       ssfINTERNETCACHE = 0x20,
089.'       ssfLOCALAPPDATA = 0x1c,
090.'       ssfMYPICTURES = 0x27,
091.'       ssfNETHOOD = 0x13,
092.'       ssfNETWORK = 0x12,
093.'       ssfPERSONAL = 0x05,
094.'       ssfPRINTERS = 0x04,
095.'       ssfPRINTHOOD = 0x1b,
096.'       ssfPROFILE = 0x28,
097.'       ssfPROGRAMFILES = 0x26,
098.'       ssfPROGRAMFILESx86 = 0x30,
099.'       ssfPROGRAMS = 0x02,
100.'       ssfRECENT = 0x08,
101.'       ssfSENDTO = 0x09,
102.'       ssfSTARTMENU = 0x0b,
103.'       ssfSTARTUP = 0x07,
104.'       ssfSYSTEM = 0x25,
105.'       ssfSYSTEMx86 = 0x29,
106.'       ssfTEMPLATES = 0x15,
107.'       ssfWINDOWS = 0x24
108.' } ShellSpecialFolderConstants;
109.' ***********************************************************

関連する Microsoft ドキュメント

Shell Reference
Shell Objects for Scripting and Microsoft Visual Basic
Shell object
Shell.BrowseForFolder method



VBScript : Excel のブックを新規に作成する( .xlsx と .xls を選択 )

最新の Excel では新規で自動的に作成されるシートのデフォルトは一つです。但しそれは Excel のオプション設定で変更可能なので、必要であれば Book.Worksheets.Count というように現在のシート数を取得してコードを変更すれば良いと思います。

保存する形式としては、可能列挙型 (Excel) / SaveAs メソッド で使用する定数 より選択して SaveAs メソッドの第二引数に指定します。ここでは、.xls( 56 ) を使用しています
01.' ****************************
02.' Excel オブジェクト作成
03.' ****************************
04.Set App = CreateObject("Excel.Application")
05. 
06.' ****************************
07.' 警告を出さないようにする
08.' ****************************
09.App.DisplayAlerts = False
10. 
11.' ****************************
12.' ブック追加
13.' ****************************
14.App.Workbooks.Add()
15. 
16.' ****************************
17.' 追加したブックを取得
18.' ****************************
19.Set Book = App.Workbooks( App.Workbooks.Count )
20. 
21.' ****************************
22.' 現状、ブックにはシート一つ
23.' という前提で処理していますが
24.' 必要であれば、Book.Worksheets.Count
25.' で現在のシートの数を取得できます
26.' ****************************
27.Set Worksheet = Book.Worksheets( 1 )
28.Worksheet.Activate()
29. 
30.' ****************************
31.' Add では 第二引数に指定した
32.' オブジェクトのシートの直後に、
33.' 新しいシートを追加します。
34.' ****************************
35.Call Book.Worksheets.Add(,Worksheet)
36. 
37.' ****************************
38.' シート名設定
39.' ****************************
40.Book.Sheets(1).Name = "新しい情報"
41.Book.Sheets(2).Name = "予備情報"
42. 
43.' ****************************
44.' 参照
45.' 最後の 1 は、使用するフィルター
46.' の番号です
47.' ****************************
48.FilePath = App.GetSaveAsFilename(,"Excel ファイル (*.xlsx), *.xlsx,古いExcel ファイル (*.xls), *.xls", 1)
49.if FilePath = "False" Then
50.        MsgBox "Excel ファイルの保存選択がキャンセルされました"
51.        Wscript.Quit()
52.End If
53. 
54.' ****************************
55.' 保存
56.' 拡張子を .xls で保存するには
57.' Call ExcelBook.SaveAs( BookPath, 56 ) とします
58.' ****************************
59.on error resume next
60.if Ucase(Right(FilePath,3)) = "XLS" then
61.        Call Book.SaveAs( FilePath, 56 )
62.else
63.        Book.SaveAs( FilePath )
64.end if
65.if Err.Number <> 0 then
66.        MsgBox( "ERROR : " & Err.Description )
67.end if
68.on error goto 0
69. 
70.' ****************************
71.' Excel をアプリケーションとして終了
72.' ****************************
73.App.Quit()
74. 
75.' ****************************
76.' Excel を VBScript から開放
77.' ****************************
78.Set App = Nothing
79. 
80.' ****************************
81.' オブジェクト変数を初期化
82.' ( 初期化しないとオブジェクト扱いされる )
83.' ****************************
84.App = Empty
85. 
86. 
87.MsgBox( "処理が終了しました" )

Microsoft ドキュメント

Application.GetSaveAsFilename メソッド (Excel)

Application.GetOpenFilename メソッド (Excel)

Worksheets.Add メソッド (Excel)

Workbook.SaveAs メソッド (Excel)

可能列挙型 (Excel) / SaveAs メソッド で使用する定数








PATH 環境変数をセミコロンで区切って一行づつ表示するバッチファイル( path-list.bat )

echo で VBScript の実行文を表示して、%temp%\_.vbs に書き出してそのまま実行するという、バッチファイルです。システム用とユーザ用を別々に作成して実行しています。

PATH コマンドの代りに使えます。

1.@echo off
2.echo ▼ システム
3.cmd /c echo Set ws=WScript.CreateObject("WScript.Shell"):Set wv=ws.Environment("SYSTEM"):pt=wv("PATH"):ad=Split(pt,";"):For I=0 To Ubound(ad):Wscript.echo ws.ExpandEnvironmentStrings(ad(I)):Next>%temp%\_.vbs&cscript.exe /NOLOGO %temp%\_.vbs
4.echo ▼ ユーザ
5.cmd /c echo Set ws=WScript.CreateObject("WScript.Shell"):Set wv=ws.Environment("USER"):pt=wv("PATH"):ad=Split(pt,";"):For I=0 To Ubound(ad):Wscript.echo ws.ExpandEnvironmentStrings(ad(I)):Next>%temp%\_.vbs&cscript.exe /NOLOGO %temp%\_.vbs
6.pause






VBScript で架空の氏名を作成するスクリプト / ( .WSF )

選択する漢字によっては、さらに架空度が増します。

結果をコマンドプロンプトへ出力する事を前提としているので、Wscript.exe でスクリプトが実行された場合、Crun という関数で コマンドプロンプトを開いて cscript.exe でスクリプトを強制的に再実行させるようにしています。

01.<JOB>
02.<OBJECT id="WshShell" progid="WScript.Shell" />
03.<SCRIPT language="VBScript">
04.' ***********************************************************
05.' 処理開始
06.' ***********************************************************
07.nMax = 20       ' 取得する人数
08. 
09.Crun
10. 
11.' 1、2 は教育漢字の最初
12.strName1 = "愛悪圧安暗案以位囲委意易異移胃衣遺医域育一印員因引飲院右宇羽"
13.strName2 = "雨運雲営映栄永泳英衛液益駅円園延沿演遠塩央往応横王黄億屋恩温"
14.strName3 = "男也一行樹之朗七人"
15.strName4 = "子代美恵"
16. 
17.For i = 1 to nMax
18. 
19.        ' 姓1文字目
20.        nTarget = Random( 1, Len(strName1) )
21.        strName = Mid( strName1, nTarget, 1 )
22. 
23.        ' 1文字目と2文字目が一致したら除外
24.        nTarget2 = nTarget
25.        Do while( nTarget = nTarget2 )
26.                nTarget2 = Random( 1, Len(strName1) )
27.        Loop
28. 
29.        ' 姓2文字目
30.        strName = strName & Mid( strName1, nTarget2, 1 ) & " "
31. 
32.        ' 名1文字目
33.        nTarget = Random( 1, Len(strName2) )
34.        strName = strName & Mid( strName2, nTarget, 1 )
35. 
36.        ' 性別
37.        nTarget = Random( 0, 1 )
38. 
39.        ' 性別によって名2文字目を決定
40.        if nTarget = 0 then
41.                nTarget = Random( 1, Len(strName3) )
42.                strName = strName & Mid( strName3, nTarget, 1 )
43.        else
44.                nTarget = Random( 1, Len(strName4) )
45.                strName = strName & Mid( strName4, nTarget, 1 )
46.        end if
47.         
48.        Wscript.Echo strName
49. 
50.Next
51. 
52.' ***********************************************************
53.' 範囲内ランダム値取得
54.' ***********************************************************
55.Function Random( nMin, nMax )
56. 
57.        Randomize
58.        Random = nMin + Int(Rnd * (nMax - nMin + 1))
59. 
60.End function
61. 
62.' ***********************************************************
63.' Cscript.exe で強制実行
64.' ***********************************************************
65.Function Crun( )
66. 
67.        Dim str
68. 
69.        str = WScript.FullName
70.        str = Right( str, 11 )
71.        str = Ucase( str )
72.        if str <> "CSCRIPT.EXE" then
73.                str = WScript.ScriptFullName
74.                strParam = " "
75.                For I = 0 to Wscript.Arguments.Count - 1
76.                        if instr(Wscript.Arguments(I), " ") < 1 then
77.                                strParam = strParam & Wscript.Arguments(I) & " "
78.                        else
79.                                strParam = strParam & Dd(Wscript.Arguments(I)) & " "
80.                        end if
81.                Next
82.                Call WshShell.Run( "cmd.exe /c cscript.exe " & Dd(str) & strParam & " & pause", 3 )
83.                WScript.Quit
84.        end if
85. 
86.End Function
87. 
88.' ***********************************************************
89.' ダブルクォート
90.' ***********************************************************
91.Function Dd( strValue )
92. 
93.        Dd = """" & strValue & """"
94. 
95.End function
96. 
97.</SCRIPT>
98.</JOB>

💙 例えば...
院引 演恵
域院 雲恵
衣位 応行
印意 央樹
羽因 往恵
院意 応行
位胃 沿子
囲移 塩子
異因 映代
以引 雨人
圧因 塩代
域右 温七
易育 延七
右委 黄子
異引 雲美
圧衣 園朗
愛員 王七
悪右 英之
圧遺 益樹
院暗 横美