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関連

    ファイルをBase64エンコード・デコードするVBAマクロ

    以前書いたファイルのBase64エンコード・デコード処理を行うVBAマ…

  2. Office関連

    Google TTSで文字列を読み上げるマクロ

    2012/02/09 追記:関連記事・Google翻訳…

  3. Office関連

    [Office 2013]コントロール日英比較表

    日本語版と英語版のOffice 2013でコントロール(コマンド)名や…

コメント

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

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

Time limit is exhausted. Please reload CAPTCHA.

最近の記事

アーカイブ

RapidSSL_SEAL-90x50
PAGE TOP