Home > コンピュータ > LibreOffice > マクロ

単純なマクロを作成する

新規作成日 2017-12-09
最終更新日

原文「Creating a simple macro

簡単な情報を、繰り返し入力することを想像してみてください。あなたは、情報をクリップボードに格納することができますが、あなたが、何か他のもののためにクリップボードを使用する場合、内容が、変更されます。マクロとして内容を格納することは、単純な解決策です。(いくつかの単純な場合では、ここで使用される例が、含まれています。より素晴らしい解決策は、AutoTextを使用することです)。

Tools > Macros > Record Macroを使用して、マクロの記録を開始します。小さなウインドウが、表示されます。それで、あなたは、OpenOffice.orgが記録されていることを知っています。

記録の停止ボタン

適当と思われる情報を入力するか、適切な一連の操作を実行します。この場合、私は、名前、Andrew Pitonyakを入力しました。

記録を停止するために、Stop Recordingボタンをクリックします。マクロを保存します。そして、OpenOffice.org Basicマクロ・ダイアログを表示します。

OOo Macro Organizerダイアログ、DBInspectionライブラリが、選択されています。

OOo Macro Organizerダイアログ、DBInspectionライブラリが、選択されています。

確実に、My Macrosという名前のライブラリ・コンテナを開きます。My Macrosの下にあるStandardという名前のライブラリを探します。気をつけて下さい。すべてのライブラリ・コンテナには、Standardという名前のライブラリがあります。マクロを格納するための新しいモジュールを作成するために、Standardライブラリを選択し、New Moduleをクリックします。

新しいマクロに名前をつけます。

新しいマクロに名前をつけます。

既定のモジュールの名前は、Module1です。;より素晴らしい名前を選択してください。けれども、それは、まだ、説明的でありません。私は、Recordedを使用しました。説明的な名前を入力し、モジュールを作成するために「OK」をクリックします。OpenOffice.org Basic Macrosダイアログは、再び、表示されます。新しいモジュールを表示する。新しく作成したモジュールを強調表示します。左上角で、使用するマクロの名前を入力します。「EnterMyname」のような、そして、その次に、マクロを保存するために、「保存」をクリックします。

すべての手順を実行した場合は、現在、Standardライブラリには、EnterMyName macro3が含まれている、Recordedという名前のモジュールが含まれています。OOoが、新しいモジュールを作成すると、それは、Mainという名前のマクロが、自動的に追加されます。

マクロを実行する

Running the macro

Macro Selectorダイアログを開くために、Tools > Macros > Run Macroを使用します。新しく作成したマクロを選択し、Runをクリックします。

あなたのマクロを選択し、Runをクリックします。

あなたのマクロを選択し、Runをクリックします。

マクロを実行するための他の方法があります。例えば、Runボタンが含まれているマクロ・オーガナイザーを開くために、Tools > Macros > Organize Macros > OpenOffice.org Basicを使用します。ダイアログが、通常より速く開くため、熱心なマクロ・ライターの著者は、マクロ・オーガナイザーが好きです。しかし、選択プロセスが、わずかに遅くなることがあります。

マクロを調べて、編集する

Viewing and editing the macro

あなたは、作成したばかりのマクロを表示する、そして、編集することができます。OpenOffice.org Basic Macrosダイアログ(Figure 3参照)を開くために、Tools > Macros > Organize Macros > OpenOffice.org Basicを使用します。Basic IDE (Integrated Development Environment)で、マクロを開くために、新しいマクロを選択し、Editをクリックします。

LISTING 1:作成された「EnterMyname」マクロ。

  REM  *****  BASIC  *****
  Sub Main
 
  End Sub
 
  sub EnterMyName
  rem ---------------------------------------------------------------
  rem define variables
  dim document   as object
  dim dispatcher as object
  rem ---------------------------------------------------------------
  rem get access to the document
  document   = ThisComponent.CurrentController.Frame
  dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
 
  rem ---------------------------------------------------------------
  dim args1(0) as new com.sun.star.beans.PropertyValue
  args1(0).Name = "Text"
  args1(0).Value = "Andrew Pitonyak"
 
  dispatcher.executeDispatch(document, ".uno:InsertText", "", 0, args1())
  end sub

最初に現れるListing 1のマクロは、複雑なものではありません。いくつかの事を学ぶと、作成されたマクロを理解する際に、大幅に役に立ちます。議論は一覧にされているマクロの一番上の近くにある機能から開始し、それらを説明します。あなたが、詳細を避けたい場合、続いて、単に "Andrew Pitonyak"というテキストを現在のカーソル位置に挿入するように変更してください。

説明は、REMから始まります。

Comments start with REM

キーワードREMは、remarkの略で、マクロの説明を開始します。REMの(同じ行の上の)後のすべてのテキストは、無視されます。 ショートカットとして、シングルクォート(一重引用符文字)を使用して、コメントを開始することもできます。

StarBasicは、キーワードの大文字と小文字を区別することができません。それで、REM、Rem、remはすべてコメントを開始します。 あなたが、APIで定義された記号定数を使用する場合は、名前は、大文字と小文字の区別すると想定する方が安全です。-これが、あなたにとって重要な場合、続いて、あなたは、この文書を読むには、あまりにも進んでいるでしょう。

Subによるサブルーチンの定義

Defining subroutines with SUB

それぞれのマクロは、キーワードSUBで定義されたサブルーチンに格納されます。サブルーチンは、END SUBという単語で終了します。マクロは、空で何もしないMainという名前のサブルーチンを定義することで開始します。次のサブルーチン、EnterMyNameは、関心のあるサブルーチンです。そして、それには、新たに作成されたコードが含まれています。

OpenOffice.orgは、モジュールを作成するとき、Mainという名前の空のサブルーチンを作成します。

この文書の範囲を越えている高度なトピックがありますが、それらについて知っていることは、興味深いかもしれません。:

  • あなたは、値が、マクロに送られるように、サブルーチンを書くことができます。それが、他のマクロから呼び出されるとき、記録されたマクロは、他のマクロから引数を受け取ることができません。
  • 他の種類のサブルーチンは、関数と呼ばれます。関数は、サブルーチンです。それは、呼び出し元のマクロに値を返すことができます。関数を定義するには、SUBではなくFUNCTIONキーワードを使用します。生成されるマクロは、常にSUB型です。

DIMを使用した変数の定義

Defining variables using DIM

極めて単純なマクロは、すべてにハードコードされた値を使用できます。残念ながら、OpenOffice.orgと対話する単純なマクロであっても、中間値を格納する必要があります。中間値を格納することは、紙に情報を書き込むのと似ています。そのため、あなたは、後で、それを見ることができます。DIMステートメントは、メッセージやメモを格納するために使用する一枚の紙を脇に置いておくことによく似ています。

EnterMyNameマクロは、オブジェクト型として、文書変数とディスパッチャを定義します。その他の一般的な変数型には、文字列、整数、日付などがあります。args1という名前の3つ目の変数が、定義されています。Args1は、極めて複雑なデータ型です。;それは、プロパティ値の配列(array)です。データ型配列(array)の変数は、1つの変数に複数の値を含めることができます。1冊の本に、複数のページを格納することに類似しています。配列(array)の値は、通常、0から始まる番号が付けられます。括弧の数値は、格納する場所にアクセスするために、利用する最大の数値を示します。この例では、1つの値だけがあり、それは、ゼロの番号が付けられています。 これは、混乱するように思えますが、今のところ、問題を無視し、より多くの例で、その概念を明確にします。

一緒にマクロを引き出す

Pulling the macro together

次の詳細は、極めて完全です。;すべての詳細を理解することは、重要ではありません。最初の行は、マクロの開始を定義します。

sub EnterMyName 

2つの変数を宣言します:

dim document as object 
dim dispatcher as object 

このコンポーネントは、現在のドキュメントを参照します。

文書のCurrentControllerプロパティは、サービスを参照します。それは、文書を「制御」します。例えば、あなたが、入力するとき、現在のコントローラーに通知します。現在のコントローラーは、続いて、文書のフレームに、変更をディスパッチします。

コントローラーのFrameプロパティは、文書のためのメイン・フレームを返します。その結果、ドキュメントという名前の変数は、ディスパッチされたコマンドを受け取る、ドキュメントのフレームを参照します。

document = ThisComponent.CurrentController.Frame 

OpenOffice.orgのほとんどのタスクは、コマンドをディスパッチすることによって達成されます。OOo version 2.0以降では、マクロから、ディスパッチの実行を容易にするディスパッチ・ヘルパー・オブジェクトが、利用できます。CreateUnoServiceメソッドは、サービスの名前を受け取ります。そして、そのサービスのインスタンスを作成しようとします。完了すると、ディスパッチャ変数には、DispatchHelperへの参照が含まれています。

dispatcher = createUnoService("com.sun.star.frame.DispatchHelper") 

配列(array)をプロパティと宣言します。それぞれのプロパティは、名前と値を持ちます。言い換えると、それは、名前と値の対です。作成された配列(array)は、インデックス・ゼロの1つのプロパティを持っています。

dim args1(0) as new com.sun.star.beans.PropertyValue

プロパティに名前"Text"とマクロが実行されるとき、挿入されるテキストの値"Andrew Pitonyak"を与えます。

args1(0).Name = "Text" 
args1(0).Value = "Andrew Pitonyak" 

ここが、魔法が生じる場所です。ディスパッチ・ヘルパーは、ディスパッチをコマンド".uno:InsertText"による文書のフレーム(documentという名前の変数に格納される)に送信します。次の2つの引数、フレーム名と検索フラグは、この文書の範囲を超えています。最後の引数は、コマンドのInsertTextを実行している間、使用されるプロパティ値の配列(array)です。

dispatcher.executeDispatch(document, ".uno:InsertText", "", 0, args1()) 

最後に、サブルーチンの末端。

end sub 
このエントリーをはてなブックマークに追加