Office関連

プログラムのソースコードを別の言語に変換するVBAマクロ

SharpDevelopが公開している、ソースコードを変換するAPI「SharpDevelop Code Converter API」を見つけたので、早速試してみました(Web上のコンバーターはコチラ)。

プロトコルがSOAPなのでSoapClient30オブジェクトを利用します。

※ 要SOAP Toolkit

・SOAP Toolkit 3.0
http://www.microsoft.com/en-us/download/details.aspx?id=13456

Option Explicit

Public Sub Sample()
  Dim TypeOfConversion As String
  Dim SourceCode As String
  Dim ConvertedCode As String
  Dim ErrorMessage As String
  
  'TypeOfConversion:変換元と変換先言語
  'C# to VB.NET:cs2vbnet
  'VB.NET to C#:vbnet2cs
  'C# to Boo:cs2boo
  'VB.NET to Boo:vbnet2boo
  TypeOfConversion = "cs2vbnet"
  
  '変換元コード(C#)
  SourceCode = "using System;" & vbCrLf
  SourceCode = SourceCode & "namespace HelloWorld" & vbCrLf
  SourceCode = SourceCode & "{" & vbCrLf
  SourceCode = SourceCode & "    class Hello" & vbCrLf
  SourceCode = SourceCode & "    {" & vbCrLf
  SourceCode = SourceCode & "        static void Main()" & vbCrLf
  SourceCode = SourceCode & "        {" & vbCrLf
  SourceCode = SourceCode & "            System.Console.WriteLine(""Hello World!"");" & vbCrLf
  SourceCode = SourceCode & "        }" & vbCrLf
  SourceCode = SourceCode & "    }" & vbCrLf
  SourceCode = SourceCode & "}"
  
  With CreateObject("MSSOAP.SoapClient30")
    .MSSoapInit2 "http://codeconverter.sharpdevelop.net/ConvertService.asmx?WSDL", _
                 "", _
                 "ConvertService", _
                 "ConvertServiceSoap", _
                 "http://developer.sharpdevelop.net/CodeConverter.NET/"
    If .PerformConversion(TypeOfConversion, SourceCode, ConvertedCode, ErrorMessage) Then
      .ConvertSnippet TypeOfConversion, SourceCode, ConvertedCode, ErrorMessage
      Debug.Print ConvertedCode
    End If
  End With
End Sub

上記コードではConvertSnippetオペレーションを呼び出してコードの変換を行っていて、元となるC#のコードが下記で、

using System;
namespace HelloWorld
{
    class Hello
    {
        static void Main()
        {
            System.Console.WriteLine("Hello World!");
        }
    }
}

出力されたVBのコードが下記になります。

Namespace HelloWorld
    Class Hello
        Private Shared Sub Main()
            System.Console.WriteLine("Hello World!")
        End Sub
    End Class
End Namespace

精度の検証まではしていませんが、簡単なコードだったらちゃんと変換してくれそうです。
このAPIをVBAから使う是非は兎も角として、中々面白いAPIですね!
実際に利用する際には、テキストボックスやテキストファイルに書かれたコードを変換する、という形にすれば使い勝手がよくなりそうです。

ちなみに、上記コードを書くにあたってサンプルや資料が少ないので若干苦労しました。
(“TypeOfConversion“に指定するコードの種類の書き方も最初は分からず…)
C#で書かれた下記サンプルプログラムのソースコードを見つけてようやく使い方が分かったのですが、もうちょっとサンプルコードを載せておいてほしかった!というのが正直な感想です。

・Windows Forms Web Service Client
http://codeconverter.sharpdevelop.net/DotNetClientApplication.aspx

関連記事

  1. Office関連

    Officeアプリケーションのバージョン情報ダイアログから情報を取得するVBScript

    自分の手間を減らすためのスクリプトシリーズ、今回はWordやExcel…

  2. アイコン一覧

    Office 365アイコン(imageMso)一覧(S)

    Office 365のデスクトップ版Officeアプリケーション(Wo…

  3. Office関連

    フッターにページ番号と総ページ数を挿入するWordマクロ

    以前書いた、フッターに「ページ番号 / 総ページ数」を挿入するWord…

  4. Office関連

    PowerPoint 2013ではプレゼンテーションをmp4形式で保存できるようになりました。

    ※ この情報はOffice 2013 カスタマー プレビュー版を元にし…

  5. Office関連

    コントロールID 一覧(Office 2013)

    2013/03/25 追記:Office 2013のコントロールI…

コメント

  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

Time limit is exhausted. Please reload CAPTCHA.

最近の記事

アーカイブ

RapidSSL_SEAL-90x50
PAGE TOP