つれづれ電脳記(日くらしPCに向かひて)
- 1 ダイアログを利用したマクロ自作
- 2 自作マクロのコード
- 3 LibreOffice BasicとVBAの同時使用
1 ダイアログを利用したマクロ自作 LibreOffice Calc のダイアログ(Excelのユーザフォームに相当)について、先日からこのブログに書いています。 ダイアログ操作に、Microsoft Office専用の言語VBAは使えません。LibreOfficeが対応している言語を使うことになります。その言語の中でも、LibreOffice Basic というのが、コードの書き方などで、VBAに近いようです。 VBAの解説ならば、ネット上にごろごろと情報があふれています。それに対し、LibreOffice Basic に関する情報となると、本当に数が限られます。実社会でのシェアを反映しての情報量です。 そうした中で、LibreOffice Basic について、とても参考になるWebサイト(ブログ)が見つかりました。「学校に通わずに学ぶログ」というタイトルのブログです。 そのブログ記事を参考にさせてもらい、自分なりに試行錯誤し、ちょっとしたマクロを作りました。 2 自作マクロのコード 今回自作したマクロは、ボタンをクリックすると、ダイアログ上に配置したTextField(テキストフィールド)に入力の文字列が、スプレッドシート(ワークシート)上のセルに転記されるというものです。 そのマクロコードは、次に掲載のとおりです。 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 (コードは自己責任で、ご利用ください。)
よろしければ、このコードはどうぞ自由にご利用ください。ただし、くれぐれも自己責任でお願いします。万一、このマクロ実行によって不具合等が生じたとしても、当方は一切の責任を負いません。
テキストフィールド入力文字列をセルに転記 3 LibreOffice BasicとVBAの同時使用 ごく短かく、簡単なコードですが、なんせLibreOffice Basicという言語は初めてです。ああでもないし、こうでもないと、いろいろ試行錯誤を重ねました。その結果、マクロが完成して、思いどおりに動作してくれたときは、ちょっとした感動でした。 このマクロ作成途中で、とてもうれしい発見がありました。LibreOffice BasicとVBAの、同時使用ができることです。なんと、2つをごちゃ混ぜで使っても、まともに動作するではありませんか。 モジュール冒頭(1行目)に、 Option VBASupport 1というおまじないを挿入すると、LibreOfficeマクロでも、VBAの一部が動作します*1。一部互換です。 上記2に掲載しているマクロコードの中味をじっくり見てもらうと分かりますが、 Thisworkbook.Worksheets(1).Range("A9").Value = sText というVBAコード中で、変数sTextを利用できています。 つまり、LibreOffice Basicコード中で値を代入した変数sTextですが、VBAコードの中でその代入値を利用できているのです。 LibreOffice BasicとVBAの同時使用ができるとなると、マクロの利用幅がぐっと広がります。今後、大いに利用させてもらいますExcel マクロ&VBA [実践ビジネス入門講座]【完全版】 第3版
Amazonそれではまた次の記事で。
goosyunランキング参加中gooからきました
ランキング参加中goo blog 転生組
*1:【LibreOfficeでVBAマクロ】 https://goosyun.hatenablog.jp/entry/2019/08/04/151122