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

    テンプレートから簡単に新規文書を作成できるようにするWordテンプレート

    Wordで自作のテンプレートを利用して文書を作成するとき、2007以降…

  2. Office関連

    [Office 365 Solo]日本語環境以外では使えるの?

    Office 365 Soloを使ってみて、疑問に思ったことの一つが“…

  3. Office関連

    MemsourceのバイリンガルMXLIFFファイルから情報を抽出するWordマクロ

    近年翻訳業界では「Trados」や「memoQ」といった、“翻訳支援ツ…

  4. アイコン一覧

    Office 2013 アイコン一覧(B)

    ・Office 2013 アイコン一覧 NUM…

  5. Office関連

    Office製品の開発者用リファレンス(ダウンロード版)

    Docs.comでまとめていたリンクなんですが、来月15日にすべて廃止…

  6. Office関連

    関数一覧(Excel 2013 Customer Preview)

    関数の挿入ダイアログから抽出したExcel 2013 Customer…

コメント

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

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

Time limit is exhausted. Please reload CAPTCHA.

最近の記事

アーカイブ

RapidSSL_SEAL-90x50
PAGE TOP