つれづれ電脳記(日くらしPCに向かひて)

つれづれなるままに、日くらしPCに向かひて、その悪戦苦闘ぶりをそこはかとなく書き付くるおじさん。たまに雑談[管理人:goosyun]

つれづれなるままに、日くらしPCに向かひて、デジタル関係の悪戦苦闘ぶりをそこはかとなく書き付くるおじさんです。
たまに雑談してます。連絡・問い合わせフォームは、ページ最下部に置いています。[著者(運営人):goosyun]

(当ブログには本文中に広告リンクが含まれています。)

LibreOffice  Basic言語とVBAごちゃ混ぜコード

 先日、LibreOffice Calc のマクロを、この記事に書きました。ダイアログ上のテキストフィールドの文字列を、シートのセルに転記するマクロです。
Option VBASupport 1
REM  *****  BASIC  *****
Option Explicit
 
 'Subルーチンの外側でoDlgを宣言しておく
 Dim oDlg As Object
 
Sub ShowMyDialog
 DialogLibraries.LoadLibrary("Standard")
 oDlg = CreateUnoDialog(DialogLibraries.Standard.Dialog1)
 oDlg.Execute()
 oDlg.Dispose()
End Sub
 
Sub TxtTenki
  Dim oTextField As Object
  Dim sText As String 
   oTextField = oDlg.GetControl("TextField1")
   sText = Cstr(oTextField.getText)
 'A9セルに文字列を転記
   Thisworkbook.Worksheets(1).Range("A9").Value = sText 
 'メッセージボックスに文字列表示 
   MsgBox "入力した文字列:" & vbLf & sText
End Sub

 このマクロを実行すると、ダイアログ上の文字列がセルに転記されます。

 上記のコードは、LibreOffice  Basic 言語と、VBAVisual Basic for Applications)がごちゃ混ぜになっています。2つの言語がごちゃ混ぜでも動作することに驚きました。
 LibreOffice  Basic コードで変数 sText に値を代入し、VBA コードでその変数から値を取り出しています。このようなごちゃ混ぜが許されるのも、上記のように変数を介しているからなのだろう、と推測していました。
 ところが、ところが、実験的に今度は次のコードも試してみました。
Option VBASupport 1
REM  *****  BASIC  *****
Option Explicit
 
   Dim oDlg As Object
   Dim oTxt  AS Object
 
Sub ShowMyForm
    DialogLibraries.LoadLibrary("Standard")
    oDlg = CreateUnoDialog(DialogLibraries.Standard.Dialog1)
    oTxt =  oDlg.GetControl("TextField1")
    oDlg.Execute()
    oDlg.Dispose()
End Sub
 
Sub DataTenki
 msgbox "入力文字列:"  & vbLf  & oTxt.Text
 Thisworkbook.Worksheets(1).Range("A1").Value = oTxt.Text
 oDlg.endExecute()
End Sub

 なんと、このコードでも同じように動作するではありませんか。おぉ、びっくり!

 オブジェクト変数 oTxt の Text プロバティで取り出した文字列を、VBAでセルに転記しています。これだと、LibreOffice  Basic と、VBA がますます入り混じって、ごちゃ混ぜになっています。

 
 おそらく、LibreOffice  Basic と、VBA がごちゃ混ぜコードは、メンテナンス性が落ちるので、推奨はされないだろうと思われます。コードを書いた本人はまぁいいとして、他人が見たら、分かりにくいですから。
 そういうことならば、自分自身しか使用しないマクロであれば、ごちゃ混ぜでも支障はないとも言えます。ということで、他のだれも利用することが想定されない、私専用のマクロとして、作っていこうと思います。
     goosyun