Skip to content

Instantly share code, notes, and snippets.

@KotorinChunChun
Last active March 25, 2023 17:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save KotorinChunChun/33c318c62ec9948371492e04b132fc12 to your computer and use it in GitHub Desktop.
Save KotorinChunChun/33c318c62ec9948371492e04b132fc12 to your computer and use it in GitHub Desktop.
VBEでVBSを編集するための偽WScriptクラス
Rem
Rem VBEでVBSを編集するための偽WScriptクラス
Rem
Rem 開発 : @KotorinChunChun
Rem
Option Explicit
Rem WScript オブジェクトのプロパティとメソッド
Rem https://docs.microsoft.com/ja-jp/previous-versions/windows/scripting/cc364456(v=msdn.10)
Rem
Rem プロパティ
Rem Arguments プロパティ
Rem FullName プロパティ
Rem Name プロパティ
Rem Path プロパティ
Rem ScriptFullName プロパティ
Rem ScriptName プロパティ
Rem StdErr プロパティ
Rem StdIn プロパティ
Rem StdOut プロパティ
Rem Version プロパティ
Rem
Rem メソッド
Rem CreateObject メソッド
Rem ConnectObject メソッド
Rem DisconnectObject メソッド
Rem Echo メソッド
Rem GetObject メソッド
Rem Quit メソッド
Rem Sleep メソッド
Rem 参考 : VBScriptをお手軽にデバッグして開発する方法
Rem https://qiita.com/saeki4n/items/fc1e19c8b2348230d6b6
Rem https://docs.microsoft.com/ja-jp/previous-versions/windows/scripting/cc392401(v=msdn.10)
Rem VBA の機能で VBScript に含まれていない機能
Rem 2009/08/28
Rem 次の表は、 VBScript に含まれていない VBA (Visual Basic for Applications) 機能の一覧です。
Rem
Rem 種類 含まれていない機能 / キーワード
Rem Select Case ステートメント キーワード Is または比較演算子が含まれる式
Rem キーワード To を使う値の範囲の指定が含まれる式
Rem エラー処理 Erl 関数
Rem Error ステートメント
Rem Resume ステートメント、Resume Next ステートメント
Rem 演算子 Like 演算子
Rem オブジェクト Clipboard オブジェクト
Rem Collection オブジェクト
Rem オブジェクトの使用 演算子を使用したコレクションへの参照
Rem オブジェクト操作 キーワード TypeOf
Rem コレクション Add メソッド、Count プロパティ、Item メソッド、Remove メソッド
Rem ! 演算子を使用したコレクションへの参照
Rem 財務処理 すべての財務処理関数
Rem 条件分岐 #Const ディレクティブ
Rem #If...Then...#Else ディレクティブ
Rem 制御構造 DoEvents 関数
Rem GoSub...Return ステートメント、GoTo ステートメント
Rem On Error GoTo ステートメント
Rem On...GoSub ステートメント、On...GoTo ステートメント
Rem 行番号、行ラベル
Rem 宣言 Declare ステートメント (DLL 参照のための宣言)
Rem キーワード Optional
Rem キーワード ParamArray
Rem Static ステートメント
Rem ダイナミック データ エクスチェンジ (DDE) LinkExecute メソッド、LinkPoke メソッド、LinkRequest メソッド、LinkSend メソッド
Rem データ型 バリアント型 (Variant) を除くすべての組み込みデータ型
Rem Type...End Type ステートメント
Rem デバッグ Debug.Print
Rem End ステートメント、Stop ステートメント
Rem 配列 Option Base ステートメント
Rem 0 以外のインデックスの最小値を指定した配列の宣言
Rem 日付と時刻 Date ステートメント、Time ステートメント
Rem その他 Deftype ステートメント
Rem Option Base ステートメント
Rem Option Compare ステートメント
Rem Option Private Module ステートメント
Rem ファイル入出力 すべてのファイルの入出力機能
Rem 変換 CVar 関数、CVDate 関数
Rem Str 関数、Val 関数
Rem 文字列 固定長文字列
Rem LSet ステートメント、RSet ステートメント
Rem Mid ステートメント
Rem StrConv 関数
Rem https://docs.microsoft.com/ja-jp/previous-versions/windows/scripting/cc392354(v=msdn.10)
Rem VBScript の機能で VBA に含まれていない機能
Rem 2009/08/28
Rem 次の表は、VBA (Visual Basic for Applications) に含まれていない VBScript 機能の一覧です。
Rem
Rem 種類 機能 / キーワード
Rem オブジェクト RegExp
Rem スクリプト エンジン ID ScriptEngine
Rem ScriptEngineBuildVersion
Rem ScriptEngineMajorVersion
Rem ScriptEngineMinorVersion
Rem 宣言 Class
Rem その他 Eval
Rem Execute
Rem 2017-05-13
Rem VBAからVBScriptへマクロを移植する方法
Rem https://thom.hateblo.jp/entry/2017/05/13/070441
Rem Rem 下で定義するDebugPrintクラスをもとに変数Debugを準備
Rem Dim Debug: Set Debug = New DebugPrint
Rem
Rem Call Main
Rem
Rem Sub Main()
Rem Debug.Print "こんにちは"
Rem Debug.Print "さようなら"
Rem Debug.Flush Rem FlushしてはじめてPrintした内容がMsgBoxで表示される。
Rem End Sub
Rem
Rem Rem 以下にDebugPrintクラスを定義
Rem Class DebugPrint
Rem Private message
Rem
Rem Public Sub Print(msg)
Rem message = message & msg & vbNewLine
Rem End Sub
Rem
Rem Public Sub Flush()
Rem MsgBox message
Rem Call Clear
Rem End Sub
Rem
Rem Public Sub Clear()
Rem message = ""
Rem End Sub
Rem End Class
Rem テスト用の保持値
Private Arguments_ As Collection
Private ScriptFullName_ As String
Private ScriptName_ As String
Private Interactive_ As Boolean
Rem テスト用の実行時パラメータをセットする
Public Sub DebugSetArguments(ParamArray Args() As Variant)
Dim item As Variant
Set Arguments_ = New Collection
For Each item In Args
Arguments_.Add item
Next
End Sub
Rem テスト用のスクリプトパスをセットする(未指定時ThisWorkbook)
Public Sub DebugSetScriptFullName(ssFullName As String)
ScriptFullName_ = ssFullName
ScriptName_ = Mid(ssFullName, InStrRev(ssFullName, "\") + 1)
End Sub
Rem --------------------------------------------------
Rem プロパティ
Rem WshArguments オブジェクト (引数のコレクション) を返します。
Property Get Arguments() As Collection
If Arguments_ Is Nothing Then
Set Arguments = New Collection
Else
Set Arguments = Arguments_
End If
End Property
Rem 実行中のスクリプトへの絶対パスを提供します。
Public Function ScriptFullName()
ScriptFullName = IIf(ScriptFullName_ = "", ThisWorkbook.FullName, ScriptFullName_)
End Function
Rem 実行中のスクリプトのファイル名を提供します。
Public Function ScriptName()
ScriptName = IIf(ScriptName_ = "", ThisWorkbook.Name, ScriptName_)
End Function
Rem ホストの実行可能ファイル (CScript.exe または WScript.exe) への絶対パスを返します。
Function FullName()
FullName = "C:\Windows\System32\cscript.exe"
FullName = "C:\Windows\System32\wscript.exe"
Stop
End Function
Rem スクリプトのモードを設定または識別します。
Rem インタラクティブモードに設定
Rem WScript.Interactive = True
Rem バッチモードに設定
Rem WScript.Interactive = False
Property Set Interactive(isIntaractiveMode As Boolean)
Interactive_ = isIntaractiveMode
End Property
Property Get Interactive() As Boolean
Interactive = Interactive_
End Property
Rem WScript オブジェクト (ホスト実行可能ファイル) の名前を返します。
Function Name()
Name = "cscript.exe"
Name = "wscript.exe"
End Function
Rem ホスト実行可能ファイル (CScript.exe または WScript.exe) の格納先ディレクトリの名前を返します。
Function Path()
Path = "C:\Windows\System32"
End Function
Rem 現在のスクリプトで使用する書き込み専用のエラー出力ストリームを公開します。
Function StdErr()
Stop
End Function
Rem 現在のスクリプトで使用する読み取り専用の入力ストリームを公開します。
Function StdIn() As Object
Stop
End Function
Rem 現在のスクリプトで使用する書き込み専用の出力ストリームを公開します。
Function StdOut() As Object
Stop
End Function
Rem Windows Script Host のバージョンを返します。
Property Get Version()
Debug.Print "VBS Version"
End Property
Rem --------------------------------------------------
Rem メソッド
Rem COM オブジェクトを作成します。
Property Get CreateObject(ssProgID As String, Optional ssPrefix As String) As Object
Rem VBAの1つめはClass。VBSではProgID
Rem VBAの2つめはServerName。VBSではPrefix
Set CreateObject = VBA.CreateObject(ssProgID, ssPrefix)
End Property
Rem 所定のプリフィックスを持つ関数にオブジェクトのイベント ソースを接続します。
Function ConnectObject(obj As Object, strPrefix As String)
Debug.Print "VBAにはConnectObjectがありません", strPrefix
Stop
End Function
Rem オブジェクトのイベント ソースへの接続を解除します。
Function DisconnectObject(obj As Object)
Stop
End Function
Rem ダイアログ ボックスまたはコンソールに出力を送ります。
Function Echo(ss)
Debug.Print "Echo", ss
End Function
Rem 指定された ProgID を持つ既存のオブジェクトを取得するか、ファイルを読み込んで新しいオブジェクトを作成します。
Function GetObject(ssPathName As String, Optional ssProgID As String, Optional ssPrefix As String) As Object
Rem VBAの2つめはClass。VBSではProgID
Set GetObject = VBA.GetObject(ssPathName, ssProgID)
End Function
Rem 指定されたエラー コードで実行を終了します。
Rem errcodeを省略すると、エラーコードは 0 を返します。
Sub Quit(Optional nnErrcode)
Debug.Print "VBS Quit"
MsgBox "WScriptなら終了。VBAなので生きる"
End Sub
Rem スクリプトの待機時間を、ミリ秒単位で指定します。
Public Sub Sleep(ByVal time)
Dim tempDate As Date
time = time / 1000
tempDate = DateAdd("s", time, Now)
Do
DoEvents
Loop While Now < tempDate
Rem または
' Application.Wait [Now() + "00:00:00.1"]
End Sub
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment