6
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Visual BasicAdvent Calendar 2022

Day 4

VSCode(twinBASIC拡張)でVBScriptをデバッグする

Last updated at Posted at 2022-12-04

はじめに

これは、Visual Basic Advent Calendar 2022の4日目の記事となります。

VBScriptのプログラムを作る時にはデバッグができないので、MsgBoxで値を出したりして確認していました。
かといってVSCodeにはVB用の拡張機能があっても、シンタックスハイライトするくらいです。それではとVBScriptでデバッグが出来る方法を模索しました。

模索中に別件ですがVSCodeでVBA開発する拡張機能があることを知りました。ただしデバッグは出来ません。

【2023/01/15追記】
twinBASICの新版は専用の統合IDEを使用しています。これでもVBScriptのデバッグは可能です。

VBScriptのデバッグ

VbsEditを使う

遅ればせながら「VbsEdit」を知りました。有償 5,900円ではありますが、デバッグも可能です。
トライアル版では、デバッグ機能を使う際に3秒間ほど待ち時間が発生するそうです。

VBE(Visual Basic Editor)を使う

ExcelのVBEを使用すれば、多少の違いはありますがデバッグは出来ますね。

VSCodeでtwinBASIC拡張を使う

今回、紹介する方法になります。
twinBASICは、Visual Basic 6.0の100%互換ソフトでCWaynePhillipsEAさんが個人で開発しています。最新版はVSCodeのソースをもとにウェブブラウザー上で動くようしたMonaco Editorで開発されているものの、初期開発版はVSCodeの拡張機能として作成されており、デバッグすることも可能です。

twinBASICによるデバッグ方法

インストール方法

先ずはVSCodeでtwinBASICをインストールしてください。

プロジェクトは、HelloworldProjectのままでいいです。

警告メッセージ

下記の警告メッセージがでますが「NO」を選択してください。最新版はMonaco EditorによるIDEで開発されています。
image.png

INFO:このtwinBASIC VSコードエクステンションの開発は2023年まで一時停止されます。
この拡張機能は引き続き使用できますが、現在、より最新で多くの新機能とバグフィックスを含む専用のIDEをデベロップしていることに注意してください。
新しいtwinBASIC IDEについてもっと知りたいですか?

VB6.0とVBSの差を吸収する

twinBASICは、VB6.0の100%互換ソフトなので、VBEとは言語仕様的に同じですがVBSと違いがあります。

WScript機能をVBAでエミュレートとする

WScriptをエミュレートするWScriptObjを作成します。
全部作る必要はなく必要になった機能を実装していくのがいいでしょう。

Class WScriptObj

    Public Function Echo(ByVal message)
        MsgBox message
    End Function

    Public Sub Sleep(ByVal time)
        Dim tempDate As Date
        time = time / 1000
        tempDate = DateAdd("s", time, Now)
        Do
            DoEvents
        Loop While Now < tempDate
    End Sub

    Public Sub Quit()
        End
    End Sub

End Class

twinBASICでのVBSの開発例

サンプルソースは下記サイトを元にしています。
VBScriptをお手軽にデバッグして開発する方法
VBAではないのでScriptFullNameやScriptNameは除外しています。
その代わり、Echoを追加しました。

Class WScriptObj

    Public Function Echo(ByVal message)
        MsgBox message
    End Function

    Public Sub Sleep(ByVal time)
        Dim tempDate As Date
        time = time / 1000
        tempDate = DateAdd("s", time, Now)
        Do
            DoEvents
        Loop While Now < tempDate
    End Sub

    Public Sub Quit()
        End
    End Sub

End Class

Module ModHelloWorld
    ' This project type is set to 'Standard EXE' in the Settings file, so you need a Main() subroutine to run when the EXE is started.
    Public Sub Main()

        Dim a
        Dim b
        Dim c
        a = 1
        b = 2
        c = a + b
        WScript.Echo c

        Dim WScript As New WScriptObj
        'VBS特有の機能をVBAで使用する
        Dim RetStr, regEx, Match, Matches   ' 変数を作成します。
        Set regEx = CreateObject("VBScript.RegExp")   ' 正規表現を作成します。
        regEx.Pattern = "aiu"   ' パターンを設定します。
        regEx.IgnoreCase = True   ' 大文字と小文字を区別しないように設定します。
        regEx.Global = True   ' 文字列全体を検索するように設定します。
        Set Matches = regEx.Execute("123aiueo")   ' 検索を実行します。
        For Each Match In Matches   ' Matches コレクションに対して繰り返し処理を行います。
           RetStr = RetStr & "一致する文字列が見つかった位置は、"
           RetStr = RetStr & Match.FirstIndex & " です。一致した文字列は、"
           RetStr = RetStr & Match.Value & " です。" & vbCrLf
        Next
        MsgBox RetStr               '正規表現結果を出力する
        WScript.Sleep 3000          ' 3秒待機
        WScript.Echo "テスト"
        WScript.Quit                ' 終了する
        MsgBox "ここは実行されない"

    End Sub

End Module

例として、WScript.Echo cの部分でブレークポイントを置きます。
Public Sub Mainの上にある「▶ run ModHelloWorld.Main」をクリックするとデバッグが開始されます。
image.png

ブレークポイントで止まるので、ウォッチの値などを見てデバッグすることが出来ます。
image.png

最後に

この方法で、VSCodeを使用してVBScriptをデバッグすることが出来ました。
あくまでロジックの確認として使用するのに限定されますが、何も無いよりは便利だと思います。
VBScriptに拘らないなら、twinBASICとしてビルドしてしまえば、exeが作成出来ますよ。

6
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?