GPSログ高度補正EXCELマクロの.exeファイル化
以前GPSロガー(GT-730FL-S)の高度をオフセット補正するマクロをEXCEL 2003で作成しましたが、パソコンが壊れて、EXCELの入っていないパソコンに買い換えたので、マクロが動かなくなってしまいました。表計算自体はOpenOfficeで代用できますが、マクロ(VBA)はだめです。
そこで、Visual Basic Expressに移植しました。まだ十分にデバックしていないので、使う場合は自己責任でお願いします。実行するためには、Microsoft .NET Framework 4 Client Profile (x86 および x64)が必要です。
最初は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~」を追加する。
| 固定リンク





コメント