先日、LibreOffice Calc のマクロを、この記事に書きました。ダイアログ上のテキストフィールドの文字列を、シートのセルに転記するマクロです。
Option VBASupport 1REM ***** BASIC *****Option Explicit'Subルーチンの外側でoDlgを宣言しておくDim oDlg As ObjectSub ShowMyDialogDialogLibraries.LoadLibrary("Standard")oDlg = CreateUnoDialog(DialogLibraries.Standard.Dialog1)oDlg.Execute()oDlg.Dispose()End SubSub TxtTenkiDim oTextField As ObjectDim sText As StringoTextField = oDlg.GetControl("TextField1")sText = Cstr(oTextField.getText)'A9セルに文字列を転記Thisworkbook.Worksheets(1).Range("A9").Value = sText'メッセージボックスに文字列表示MsgBox "入力した文字列:" & vbLf & sTextEnd Sub
このマクロを実行すると、ダイアログ上の文字列がセルに転記されます。
上記のコードは、LibreOffice Basic 言語と、VBA (Visual Basic for Applications)がごちゃ混ぜになっています。2つの言語がごちゃ混ぜでも動作することに驚きました。
LibreOffice Basic コードで変数 sText に値を代入し、VBA コードでその変数から値を取り出しています。このようなごちゃ混ぜが許されるのも、上記のように変数を介しているからなのだろう、と推測していました。
ところが、ところが、実験的に今度は次のコードも試してみました。
Option VBASupport 1REM ***** BASIC *****Option ExplicitDim oDlg As ObjectDim oTxt AS ObjectSub ShowMyFormDialogLibraries.LoadLibrary("Standard")oDlg = CreateUnoDialog(DialogLibraries.Standard.Dialog1)oTxt = oDlg.GetControl("TextField1")oDlg.Execute()oDlg.Dispose()End SubSub DataTenkimsgbox "入力文字列:" & vbLf & oTxt.TextThisworkbook.Worksheets(1).Range("A1").Value = oTxt.TextoDlg.endExecute()End Sub
なんと、このコードでも同じように動作するではありませんか。おぉ、びっくり!
オブジェクト変数 oTxt の Text プロバティで取り出した文字列を、VBAでセルに転記しています。これだと、LibreOffice Basic と、VBA がますます入り混じって、ごちゃ混ぜになっています。

おそらく、LibreOffice Basic と、VBA がごちゃ混ぜコードは、メンテナンス性が落ちるので、推奨はされないだろうと思われます。コードを書いた本人はまぁいいとして、他人が見たら、分かりにくいですから。
そういうことならば、自分自身しか使用しないマクロであれば、ごちゃ混ぜでも支障はないとも言えます。ということで、他のだれも利用することが想定されない、私専用のマクロとして、作っていこうと思います。
それでは、また次の記事で。
goosyun
![Excel マクロ&VBA [実践ビジネス入門講座]【完全版】 第3版 Excel マクロ&VBA [実践ビジネス入門講座]【完全版】 第3版](https://m.media-amazon.com/images/I/51wPBj4pZ-L._SL500_.jpg)