« Youtubeの全画面再生が遅い | トップページ | TECHONE HOBBY TRENCHES F3P EPP 製作記 »

GPSログ高度補正EXCELマクロの.exeファイル化

以前GPSロガー(GT-730FL-S)の高度をオフセット補正するマクロをEXCEL 2003で作成しましたが、パソコンが壊れて、EXCELの入っていないパソコンに買い換えたので、マクロが動かなくなってしまいました。表計算自体はOpenOfficeで代用できますが、マクロ(VBA)はだめです。

そこで、Visual Basic Expressに移植しました。まだ十分にデバックしていないので、使う場合は自己責任でお願いします。実行するためには、Microsoft .NET Framework 4 Client Profile (x86 および x64)が必要です。

「nmea_alt_0_3_0_0.zip」をダウンロード

最初はEXCELのCSVの取り込み機能を使っていたのですが、将来EXCELが無くても動くようにするため、先のマクロRev.0.3ではワークシートを使わないようにしていました。従って、簡単に移植できると思っていたのですが、VBAとVBがそれなりに違っていることに気づかされました。

そこで、EXCEL 2003 VBAからVisual Basic 2010 Expressに移植した手順をメモしておきます。

1.EXCEL側の準備
1) ワークシートやEXCEL固有の機能を使わないようにコードを変更する。
2) 各フォームやモジュールをエクスポートする(.frm,.bas)。
3) 各フォームを印刷する。

2.Visual Basicの準備
1) 新規プロジェクトを作成する。
2) [プロジェクト][新しい項目の追加]でWindowsフォームを作成し、印刷したフォームと同じ様にフォームを一から作り直す。
3) エクスポートしたフォーム(.frm)をテキストエディタで開き、それを参考にしながら、作成したフォームのプロパティ(主に(Name))を元のプロパティに変更する。
4) フォームのコード部分に、エクスポートしたフォーム(,frm)のコード部分をコピーする。
5) [プロジェクト][新しい項目の追加]でモジュールを追加し、エクスポートしたモジュール(.bas)のコードを作成したモジュール(.vb)にコピーする。

3.コードの変更
ソースコードにエラーを示すマークが表示されるので、エラーがなくなるようにコードを修正する。変更量を少なくするため、推奨されない古いコードも使ってます。

◆Option Explicit Onを、「Module~End Module」や「Public Class~End Class」の外に移動する。

◆Unload(Form1) ---> Me.close()

◆CSng(TextBox1.Value) ---> CSng(TextBox1.Text)

◆TextBox1 ---> TextBox1.Text

◆CheckBox1.Value ---> CheckBox1.Checked

◆FileName = Application.GetOpenFilename( _
        Title:="Read a NMEA file", _
        FileFilter:="NMEA file(*.nmea;*.txt;*.csv),*.nmea;*.txt;*.csv", _
        MultiSelect:="False")
--->
        Dim ofd As New OpenFileDialog()
        ofd.Filter = "NMEA file(*.nmea;*.txt;*.csv)|*.nmea;*.htxt:*.csv| _
          All file(*.*)|*.*"
        ofd.FilterIndex = 1
        ofd.Title = "Read a NMEA file"
        ofd.Multiselect = False
        If ofd.ShowDialog() = DialogResult.OK Then
            FileName = ofd.FileName
        Else
            FileName = ""
        End If
        SaveFileDialog1.Dispose()

◆FileName = Application.GetSaveAsFilename( _
        InitialFileName:=txtFileOut, _
        Title:="Write a NMEA file", _
        FileFilter:="NMEA file(*.nmea),*.nmea,Text file(*.txt),*.txt, _
          CSV file(*.csv),*.csv")
--->
        Dim SaveFileDialog1 As New SaveFileDialog()
        SaveFileDialog1.Title = "Write a NMEA file"
        SaveFileDialog1.FileName = FileName
        SaveFileDialog1.Filter = "NMEA file(*.nmea;*.txt;*.csv)| _
          *.nmea;*.htxt:*.csv|All file(*.*)|*.*"
        SaveFileDialog1.FilterIndex = 1
        SaveFileDialog1.CreatePrompt = True
        If SaveFileDialog1.ShowDialog() = DialogResult.OK Then
            FileName = SaveFileDialog1.FileName
        Else
            FileName = ""
        End If

◆Form1.Show ---> Form1.ShowDialog()
                  Form1.Dispose()

◆MsgBox "test" & Format(sng, "0.0")
  --->
  MsgBox("test" & Format(sng, "0.0"))

◆i = FreeFile
  Open FileName For Input As #i
--->
  i = FreeFile()
  FileOpen(i, FileName, OpenMode.Input)

◆i = FreeFile
  Open FileName For Output As #i
--->
  FileName = FreeFile()
  FileOpen(i, FileNamet, OpenMode.Output)

◆Print #i, s ---> PrintLine(i, s)

◆Close i ---> FileClose(i)

◆Left(s,i)が「'Public Property Left As Integer'には引数がないため、戻り値の型をインデックス化できません」となる。 --> Microsoft.VisualBasic.Left(s,i)と書く。

◆Public s As Stringが、「名前空間のステートメントが無効です」となる。---> Public s As StringをSub Main()内に移動。

◆Sub Main()が実行されない。 ---> ソリューションエクスプローラの当該プロジェクトを右クリックし、プロパティ、アプリケーションフレームワークを有効にするのチェックを外す。スタートアップオブジェクトをSub Main()のあるモジュールに設定する。

◆Form1.Show()で表示されたフォームが閉じないうちに、次のステップが実行されてしまう。---> Form1.ShowDialog()、Form1.Dispose()に変更する。

◆Form1.vb内のイベントプロシージャー「Private Sub cmdAltOK_Click()」がイベントにリンクしない。---> 「Private Sub cmdAltOK_Click()  Handles cmdAltOK.Click」のように「Handles~」を追加する。

|

« Youtubeの全画面再生が遅い | トップページ | TECHONE HOBBY TRENCHES F3P EPP 製作記 »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック


この記事へのトラックバック一覧です: GPSログ高度補正EXCELマクロの.exeファイル化:

« Youtubeの全画面再生が遅い | トップページ | TECHONE HOBBY TRENCHES F3P EPP 製作記 »