* フォームでボタンでいろんな機能を作成したい [#le0f34f2]
 |RIGHT:|LEFT:|c
 |~ページ|[[OpenOffice.org FAQの登録ページ]]|
 |~投稿者|taka|
 |~分類|#listbox3(Q&A,faq03,class)|
 |~優先順位|#listbox3(普通,faq03,priority)|
 |~状態|#listbox3(完了,faq03,state)|
 |~カテゴリー|#listbox3(Base データベース,faq03,category)|
 |~投稿日|2008-09-17 10:02:50 (水)|
 |~OS|debian4.0|
 |~依存するページ||
 |~バージョン|#listbox3(2.0.4,faq03,version)|
 
 ** メッセージ [#fb2a964e]
 |LEFT:|c
 |回答ページでは行末に「~」を付加する必要はありません|
 フォームの中にボタンを作成し、マクロを実行する事により使い勝手をよくしようと思っています。ボタンでやりたい動作は、
 
 1、検索機能のボタンで抽出されたフィルタの解除
 
 2、追加するため新しいレコードの状態にする
 
 3、レコードの削除
 
 4、保存もしくは更新
 
 上記の機能は、フォームナビデータの「フィルタまたは並べ替えの解除」ボタンが
 すでに存在しているので、それを使用したら早いのですが、
 超初心者の方に、もっとわかりやすくフォームの中にボタンを作り、ボタンの
 テキスト名でわかりやすく表記しようと思っています。
 
 ただ、自分もまだ初心者で、マクロのコードがわからずエラーがでたりしますので
 お願いします。
 
 
 ----
 ***追加 [#udefa047]
 >taka (2008-09-17 11:24:59 (水))~
 ~
 1のフィルタの解除は下記の通りで成功しました。~
 ~
 Sub TableReset(oEvent)~
 Dim oForm~
 oForm = oEvent.source.getModel().getParent()~
 oForm.ApplyFilter = False~
 oForm.reload()~
 End Sub~
 
 //
 ***「マクロの記録」を使う [#v2ec1454]
 >M.Kamataki (2008-09-17 13:56:28 (水))~
 ~
 faq/1/146「Baseのフォームを直接表示したい」をご覧になって、Writerのフォームにするというのもひとつの手です。そうすると「マクロの記録」が使えます。~
 ~
 「マクロの記録」を使い、フォームナビゲータの「新しいレコード」ボタンをクリックした際のマクロを記録できます。「2、追加するため新しいレコードの状態にする」は以下のようなコードになります。これはdispatcherというやつでOpenOffice.orgのメニューやボタンに割り当てられているコマンドを実行するものです。~
  sub NewRecord
  dim document   as object
  dim dispatcher as object
  document   = ThisComponent.CurrentController.Frame
  dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
  dispatcher.executeDispatch(document, ".uno:NewRecord", "", 0, Array())
  end sub
 なお、わたしは「脱Accessは、まず脱Baseから」というお話をして歩いています。以下のページからHowToBase200808.pdfという資料をご覧ください。WriterやCalcをフォームした方がいろいろと楽になります。~
 ~
 http://openoffice-docj.sourceforge.jp/wiki/Documentation/Base_Seminar#OSC2008_Nagoya~
 ~
 ;; 肝心のURLを書き忘れましたが、takaさんにはすでに紹介済みのようでした。~
 
 //
 ***今回 [#j765ec10]
 >taka (2008-09-17 15:15:10 (水))~
 ~
 今回というか、以前から何回か質問させていただいていますが、~
 プライベートではcalcやWriterを使ってフォームしてみたいのですが、~
 仕事上、フォーム中でという要望なので四苦八苦しております。~
 ~
 マクロの記録、使えますねw~
 脱Accessのやつは拝見しました。ちょっと難しかったので何度も讀み返そうと思っています。~
 
 //
 ***ちょっとトリッキーですが [#h7ea8b3c]
 >M.Kamataki (2008-09-17 17:00:05 (水))~
 ~
 フォームを編集モードで開きます。ツールバーの「フォームコントロール」を表示したら、「デザインモード オン/オフ」ボタンをクリックすると、フォームのナビゲーターバーが表示されます。~
 ~
 この状態なら、「マクロの記録」が実行できて、フォーム自身にマクロを登録することも可能です。(フォームにマクロを登録するのは、あまりお薦めしません。できれば登録先はマイマクロか拡張機能にしましょう)~
 
 //
 ***一応 [#hde5423f]
 >taka (2008-09-17 18:13:47 (水))~
 ~
 マクロも登録でき、アドバイス通りにマイマクロに登録しました。~
 たしかにこの方法ですと見れますね。~
 ~
 お薦めできないのは、なにか不具合が生じたりするのでしょうか?~
 それと保存しませんでしたが、間違って保存しようとした際に~
 エラーが表示され、メッセージボックスを閉じたら~
 設置していた、テキストボックスやボタンが消えました。。。~
 ~
 保存がなっていなかったので、一度BASEを再起動したら~
 元の状態でしたが、あせりました。。。~
 
 //
 ***Re: 一応 [#ffb85398]
 >M.Kamataki (2008-09-18 10:27:15 (木))~
 ~
 >お薦めできないのは、なにか不具合が生じたりするのでしょうか?~
 今の仕様はどう考えても使い勝手が良いとはいえません。そこで以下の改善要望をfaq/4/79「Base(.odb)の「ドキュメント自身」にマクロを登録したい」で紹介しました。~
 ~
 Possibility to put macros in *.odb file :~
 http://ja.openoffice.org/issues/show_bug.cgi?id=49133~
 ~
 この要望が取り込まれるのが、来年春リリース予定の3.1となっています。現行バージョンでフォームにマクロを登録すると、3.1以降ではodbファイル自身へマクロを登録するという修正作業が必要になると思います。(自動ではやってくれないかも)~
 ~
 さらに使い勝手が悪いのも、ご報告のようなトラブルが起こる原因かと思います。~
 ~
 ところで当初の問題は解決しそうですか。~
 
 //
 ***無題 [#g26ac089]
 >taka (2008-09-18 11:20:04 (木))~
 ~
 >M.Kmatakiさん~
 これからのバージョンに期待ですね。。。~
 ~
 あと先ほど、ようやくすべて成功しました。~
 このやり方、相当いいですね。新たに問題が発生したので、~
 ここは完了にして、別に投稿します。~
 ~
 ありがとうございました。~
 
 //
 ***Re: 一応 [#m3aac15a]
 >はにゃ? (2008-09-18 15:43:26 (木))~
 ~
 「Base(odb)ドキュメントにマクロを登録」で関連ドキュメントがあります。~
 ~
 Macros in Database Documents~
 http://wiki.services.openoffice.org/wiki/Macros_in_Database_Documents~
 ~
 一応、マクロの移行ウィザードが提供される予定のようですが全て移行できるわけではありませんが。それについては上記ページに記載があります。~
 //3.0 rc1 ですでにウィザードが含まれているような気がするのですが…。
 
 //
 ***無題 [#z246d9c6]
 >taka (2008-09-18 17:32:33 (木))~
 ~
 >はにゃさん~
 ありがとうございます。さっそく拝見させていただきます。~
 
 //
 #article