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

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

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

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

ダイアログ上のテキストフィールド文字列をLibreOffice Calcセルへ転記

 

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の同時使用ができるとなると、マクロの利用幅がぐっと広がります。今後、大いに利用させてもらいます
    goosyun