kazpgmの日記

『プログラム自動作成@自動生成』作成の日記

kaz_javaSpringBootプログラム作成ツールのエクセルVBAをVBに変えてエクセルの外に出す。

■16:44
自動作成マクロVBAVB.netに変換している。変換方法が上手になってきたといっていいだろう。なんと、コンパイルエラーは取れた。
今日は▲を変換した。
さっそく実行した。まあ、例外発生した。ちょっと理由がわからなかったけど修正し、この箇所は通った。
①関数への配列のアドレスを渡して、中身を変更して戻す処理が、エクセルマクロVBAVB.netで違っていた。

 Module Module4_Utils
     Public hinagataController() ' 雛型Controller
     Sub hinagataReadAll(dummy)
         Call hinagataRead(hinagataController, ActiveWorkbookPathを編集() & "\hinagata\java\controller")
     End Sub
     Sub hinagataRead(hinagata, DIR指定)
         ReDim hinagata(i, 2)
         ・・・ここでhinagata(i, 2)に値を入れる
     End Sub

VBAマクロの時は「hinagataController()」が「ReDim hinagata(i, 2)」になる。が、VB.netでは「hinagataController()」はNothingのままで、値が入らない。そこで、

    Public hinagataController(,) ' 雛型Controller
     Sub hinagataReadAll(dummy)
         Call hinagataRead(hinagataController, ActiveWorkbookPathを編集() & "\hinagata\java\controller")
     End Sub
    Sub hinagataRead(ByRef hinagata(,), DIR指定)
         ReDim hinagata(i, 2)
         ・・・ここでhinagata(i, 2)に値を入れる
     End Sub

 とすると、「hinagataController(,)」が「ReDim hinagata(i, 2)」になって値が入る。という解決。多分、VB.netは、Public hinagataController()は1次元で、ReDimで2次元配列にできない。さらに、Byrefにしないとアドレス渡しにならない。らしい。ちょっと不思議。

▲1.AmendViewとRegisterView作成.cls
▲2.DDL文作成Otaasuke.cls
▲3.DbElementsマップ作成.cls
▲4.DetailView作成.cls
▲5.JSP項目値作成.cls
▲6.Joinテーブル達マップ作成.cls
▲7.ListViewとActionStrView作成.cls
▲8.Module1_一気にPGM作成Otaasuke.bas
	★9.Module2_Consts.bas
▲10.Module3.bas
	★11.Module4_Utils.bas
▲12.RegisterList作成.cls
	★13.TextFile.cls
▲14.controllerForJoinC部品作成.cls
▲15.controller作成.cls
▲16.csv作成.cls
▲17.entity作成.cls
▲18.form作成.cls
	★19.mail作成.cls
▲20.repository作成.cls
▲21.service作成.cls
▲22.templateなどOtaasuke.cls
▲23.upload作成.cls
▲24.テーブル内DbElement達マップ作成.cls

■22:14
②自動作成マクロVBAのOpenをVB.netで、素直にFileOpen変換したが、SJISファイル読み込みで文字化けした。ので、System.IO.StreamReaderに変更した。
・素直にVB.netのFileOpen変換したもの

FileNumber = FreeFile()
FileOpen(FileNumber, (MyPath & MyName), OpenMode.Input)
Do While Not EOF(FileNumber)
    lineData = LineInput(FileNumber)
    hinagata(i, 2) = hinagata(i, 2) & lineData & vbCrLf
Loop
If Right(hinagata(i, 2), Len(vbCrLf)) = vbCrLf Then '最後には改行をつけない
    hinagata(i, 2) = Left(hinagata(i, 2), (Len(hinagata(i, 2)) - Len(vbCrLf)))
End If
FileClose(FileNumber)

VB.netのSystem.IO.StreamReaderに変更したもの(文字化け解決)

Dim sr As New System.IO.StreamReader(MyPath & MyName, System.Text.Encoding.GetEncoding("shift_jis"))
While sr.Peek() > -1
    lineData = sr.ReadLine()
    hinagata(i, 2) = hinagata(i, 2) & lineData & vbCrLf
End While
If Right(hinagata(i, 2), Len(vbCrLf)) = vbCrLf Then '最後には改行をつけない
    hinagata(i, 2) = Left(hinagata(i, 2), (Len(hinagata(i, 2)) - Len(vbCrLf)))
End If
sr.Close()

■23:50
③自動作成マクロVBAでは文字列と数字を比較した場合、うまい具合に数字にして比較している。VB.netでは""と数字を比較してもエラーにはならないが、多分、数字を文字にして比較しているような気がする。"10">1の結果が違うので。
・自動作成マクロVBA

If Cells(j, cont検索項目順) > i Then

VB.netの時

if Cells(j, cont検索項目順)<>"" then
    If Integer.Parse(Cells(j, cont検索項目順)) > i Then
    End If
End If

■24:09
また、明日やろう。

■2021/06/21から、『kaz_javaSpringBootプログラム自動作成◎自動生成ツール』をVectorに載せています。2022年にZenn本も書きました。使ってみての感想や間違いの指定や、こうやったほうがいいとかの情報があればメールください。
Vector
www.vector.co.jp
・Zenn本(SpringBoot、Thymeleaf プログラム自動作成(マクロ使用版))
zenn.dev

■2021/06/21から、『kaz_javaSpringBootプログラム自動作成◎自動生成ツール』をVectorに載せています。2022年にZenn本も書きました。使ってみての感想や間違いの指定や、こうやったほうがいいとかの情報があればメールください。
Vector
www.vector.co.jp
・Zenn本(SpringBoot、Thymeleaf プログラム自動作成(マクロ使用版))
zenn.dev