「Web出版サイト」ベータ公開

Q&A集[?]

当サイトでのご質問の受付は終了しました

すべてのコンテンツを読み込み専用としたため、回答欄からも投稿できません

Apache OpenOffice/LibreOfficeのご質問はそれぞれのフォーラムへご投稿ください

質問コーナー

サイト内検索

分類メニュー

関連サイト


本日:1
昨日:0
総数:3872
現在:3


.odtで作ったフォームを開いた時に指定サイズにするマクロ

ページOpenOffice.org FAQの登録ページ
投稿者さいきゆみ
分類
edit/refer
優先順位
edit/refer
状態
edit/refer
カテゴリー
edit/refer
投稿日2011-01-09 16:08:25 (日)
OSwin7
依存するページfaq/4/801
バージョン
edit/refer

メッセージ

回答ページでは行末に「~」を付加する必要はありません

http://www.oooforum.org/forum/viewtopic.phtml?t=8930 をよみまして、書いてみました。

REM  *****  BASIC  *****
Sub ResizeWindow(X As Integer, Y As Integer) 
Dim aSize As New com.sun.star.awt.Size 
aSize.Width = 800
aSize.Height = 700 
thisComponent.CurrentController.Frame.ContainerWindow.setOutputSize(aSize) 
End Sub

マクロの画面状の実行ボタンでは、これでサイズが変更されます。 ところが開いた時にこのマクロを実行するというのを登録しても何も起こらないです。

また、マクロの実行をしたところ「実行中にスクリプトフレームワークのエラーが発生しました」となります。

マクロの文章が悪いのでしょうか?

errra.jpg

引数

Wannwanno (2011-01-09 16:56:00 (日))

先頭行の引数を修正して下さい、又マルチステートメントには「:」(コロン)を使います。

REM ***** BASIC *****

Sub ResizeWindow(Event As com.sun.star.document.DocumentEvent)
	Dim aSize As New com.sun.star.awt.Size
	aSize.Width = 800 : aSize.Height = 700
	thisComponent.CurrentController.Frame.ContainerWindow.setOutputSize(aSize)
End Sub

ありがとうございます。しかし、やはり同じエラーが出ます

さいきゆみ (2011-01-09 19:21:35 (日))

マクロを書く画面では問題なく動きます。
しかし、フォームのプロパティの読み込み時のマクロの割り当てをして閉じて開いても変化がありません。
また、ドキュメント状でのマクロの実行では同様のエラーが出ます。

入力フォームを適度な大きさで開けるようにしたいというのはよく使うので是非知りたいのです。よろしくお願いいたします。

やはりマクロの書き方が違うみたいです

さいきゆみ (2011-01-09 21:46:56 (日))

Sub ResizeWindow 
dim vFrame as Object 
dim vWindow as Object 
dim vRect as Object 
dim intHeight as Integer 
dim intWidth  as Integer 
dim intXPos as Integer 
dim intYPos as Integer 
   
vFrame = StarDesktop.getCurrentFrame() 
vWindow = vFrame.getContainerWindow() 
vRect = vWindow.getPosSize() 
intXPos=vRect.X 
intYPos=vRect.Y 
intHeight=712 
intWidth=1024 
vWindow.setPosSize(intXPos, intYPos, intWidth, intHeight, 15) 
End Sub

このようにしたら動きました。 今あるドキュメントのサイズを変更ということになるようです。 まったくカンでしかわかってないのですが…。

ただ、フォームを開いた時に入力モードにするにはどうしたらいいんでしょうか?
入力モードにしないと反映されないようです。

マクロの記録で実行しました。

さいきゆみ (2011-01-09 22:20:23 (日))

記録されたマクロに上記のマクロを書いて実行したら思ったようなことができました。

ありがとうございました。

無題

Wannwanno (2011-01-10 19:41:52 (月))

文書を開いた時イベントではなくフォームの読み込む時イベントだったんでつね.....(´・ω・`)
解決して良かったでつ...

イベントの割り当ての問題

M.Kamataki (2011-01-11 12:10:01 (火))

解決されているようですが、エラーになるのはイベントの割り当ての問題も絡んでいます。その点、整理しないとすっきりしないと思いますので、補足します。

まず、エラーが出るサンプルです。

filefaq6_114sample1.odt

OpenOffice.orgに標準で登録されているBibliographyデータベースを利用しているので、どなたでも確認できると思います。さいきさんもこのように、どなたでも確認できるサンプルを最初にご提供いただければ、回答される方もイベントの割り当ての問題にも気づいたと思います。

Wannwannoさんの最初のマクロも、イベントの割り当てを「ツール」-「カスタマイズ」‐「イベント」で、「文書を開いた時」に割り当てれば、エラーなく動作します。下記サンプルになります。

filefaq6_114sample2.odt

また、さいきさんが紹介された別のマクロも「文書を開いた時」に割り当てれば、マクロの記録でとったマクロを追加する必要はないと思いますが、どうでしょうか。以下、サンプルです。(こちらは、「フォームデザイン」バー上の「オートコントロールフォーカス」をオンにしています)

filefaq6_114sample3.odt

;; 「スクリプトフレームワークのエラー」がイベントの割り当てが不適正だと発生するのは、faq/6/113のご質問のコメント「テストの結果」と関連しているかも。ユーザー設定の問題以外でも再現できましたので、貴重な情報だと思います。

ありがとうございました。よくわかりました。

さいきゆみ (2011-01-13 12:33:28 (木))

fileinputresize.basの添付のマクロを
「ツール」-「カスタマイズ」‐「イベント」 で「文書を開いた時」に実行しても可能なことを確認しました。Wannwannoさんが書いてくれたマクロの方が理解しやすくていいと思います。

フォームを入力状態で閉じれば入力状態のまま開くことができるんですね。
いろいろ勉強になりました。
ありがとうございました。 

新しいレコードを追加状態にするマクロはマクロの記録で作ったものですが、これをもう少しスマートに書く方法がありましたら教えてくださるとありがたいです。 ここまでくるとかなり使いやすいフォームになると思います。

今回のことを私のブログにこちらにまとめてみました。
http://yumisaiki.blogspot.com/2011/01/blog-post_13.html

Wannwanno さん分に追加しました

ike@九州 (2011-01-13 18:00:15 (木))

Sub ResizeWindow(Event As com.sun.star.document.DocumentEvent)
 Dim oDoc As Object,oCtrl As Object,oForm As Object
 Dim aSize As New com.sun.star.awt.Size
 oDoc = Event.Source
 oCtrl = oDoc.getCurrentController
 aSize.Width = 800 : aSize.Height = 700
 oCtrl.Frame.ContainerWindow.setOutputSize(aSize)
 oForm = oDoc.getDrawPage.getForms.getByName("MainForm")
 '新規挿入行に移動
 oForm.afterLast
 oForm.moveToInsertRow
 'フォーム上の"txt住所"という名前のテキストボックスにカーソルを持っていく
 oCtrl.getControl(oForm.getByName("txt住所")).setFocus
End Sub

新しいレコード

M.Kamataki (2011-01-13 20:19:34 (木))

「ドキュメントを開く」イベントではなくボタンの「実行時」のイベントに割りつけることを想定して、「フォームのナビゲーション」バーの「新しいレコード」ボタンの操作を「マクロの記録」で保存したものを紹介したことがあります。faq/4/1244「フォームでボタンでいろんな機能を作成したい」です。このときは知らなかったのですが、マクロを使わないで実現できます。ボタンコントロールのプロパティの設定で「アクション」の中から「新しいレコード」を選べばマクロと同じ動作になります。

フォームでも、入力用のフォームと割り切ればマクロは不要です。さいきさんの以下のサイトで紹介されているスクリーンショットに、「フォームの属性」ダイアログボックスが写っていますよね。その中の「データのみ追加」欄を「はい」に変更すれば、「新しいレコード」ボタンをクリックした状態でフォームが開きます。

>スマートに書く方法がありましたら教えてくださるとありがたいです

英語のフォーラムで同じ質問がありましたが、以下のように回答は付いていません。

Go to field
http://user.services.openoffice.org/en/forum/viewtopic.php?f=25&t=35349

関連して以下では、Villeroyさんが、ボタンのアクションを使う方法を紹介しています。

How Do I Create a Form Button to Add a New Record?
http://user.services.openoffice.org/en/forum/viewtopic.php?f=39&t=3745

ike@九州さんが回答されたマクロとほぼ同じですが、任意のフィールドにフォーカスを置く方法はprobe1さんが回答されています。

今回はボタンイベントではありませんし、「データのみ追加」のフォームを意図されていないのであれば、「マクロの記録」でとったマクロで十分かと思います。

ありがとうございました。

さいきゆみ (2011-01-13 20:52:14 (木))

ike@九州 様が書いてくださったのは、とてもわかりやすく、これなら覚えられそうな気がします。
これからもコツコツ勉強していきます。

見落とし

M.Kamataki (2011-01-13 21:06:25 (木))

「新しいレコード」ボタンに相当するのが、以下の部分ですね。見落としていました。

'新規挿入行に移動
oForm.afterLast
oForm.moveToInsertRow

とてもbasicわかりやすいと感じられてよかったです。

さいきゆみ (2011-01-13 21:24:33 (木))

fileinputresizeup.bas ちなみにわかればでいいのですが、今回からスライサーで表示のパーセントが変更できますが、これを150%とかにするとかいうマクロはどう書いたらいいんでしょうか? わかったら教えてください。これもマクロの記録で実現できましたけど^^; おもしろくなってきました。

ズームについて

M.Kamataki (2011-01-14 00:29:41 (金))

はにゃ?さんのサイトの以下の掲示板でズームについて情報がやり取りされています。

ズームの状態の取得
http://hermione.s41.xrea.com/pukiwiki/pukiwiki.php?OOobbs2%2F36

とてもビューティフルになりました。

さいきゆみ (2011-01-14 07:09:56 (金))

REM  *****  BASIC  *****
Sub ResizeWindow(Event As com.sun.star.document.DocumentEvent)
Dim oDoc As Object
Dim oCtrl As Object
Dim oForm As Object
Dim oViewSettings As Object
Dim aSize As New com.sun.star.awt.Size
oDoc = ThisComponent
oCtrl = oDoc.getCurrentController
aSize.Width = 800 : aSize.Height = 750
oCtrl.Frame.ContainerWindow.setOutputSize(aSize)
oForm = oDoc.getDrawPage.getForms.getByName("addressinput_form")
'新規挿入行に移動
oForm.afterLast
oForm.moveToInsertRow
'フォーム上の"fmt郵便番号"という名前のテキストボックスにカーソルを持っていく
oCtrl.getControl(oForm.getByName("fmt郵便番号")).setFocus
'120%に拡大
oViewSettings = oCtrl.ViewSettings
oViewSettings.ZoomValue = 120
End Sub

素人質問で恐縮ですが、一番最初の行の
(Event As com.sun.star.document.DocumentEvent) はどういう意味なのでしょうか? わかりましたらよろしくお願いします。

イベント割り当ての場合のみの利用

ike@九州 (2011-01-14 09:25:25 (金))

(Event As com.sun.star.document.DocumentEvent) は
イベントを変数で受け取り利用したい場合の記述です
Event 変数名は任意です oEvent、oEv、ev などの記述を見かけます

利用しないのであれば記述は必要ありません。

利用した場合、以下の記述に違いが出ています
oDoc = ThisComponent --> oDoc = Event.Source

ike@九州  それがoDoc = Event.Source にするとマクロの画面上でエラーになりました。

さいきゆみ (2011-01-14 12:05:55 (金))

errar.jpg

普通に実行する分には問題ないのですが。
とりあえず記述がなくても動くのを確認しました。

こういうところはどのあたりで勉強したらいいんでしょうか? 手探りで覚えているのですが。

返答が早くて嬉しいです。ありがとうございました。

イベントの動作ではありません

ike@九州 (2011-01-14 12:57:47 (金))

マクロの実行は、割り当てたイベントの動作ではないので…
あくまで
割り当てたイベントが発生したときに取得できる変数なので
文書を開いた時に割り当てていた場合、文書を開いた時のみ正しく Event 変数は利用できます。

はにゃ? さんのサイトでの勉強が多いです。
情報が得られなかった場合、
http://www.oooforum.org/forum/search.phtml
での検索になります。

それでもなかった場合、以下の mri を利用しての手探りになります。
http://hermione.s41.xrea.com/pukiwiki/index.php?OOo%2FExt%2FMRI

mri の使い方(使えるメソッド、プロパティを調べる)
faq/5/474
他の方の情報も参考にして下さい

はにゃ? さんのサイトってどこでしょうか?

さいきゆみ (2011-01-15 02:44:18 (土))

検索したら怪しい枕のサイトに行ってしまいました。
ご親切にいろいろ教えてくださりありがとうございます。

OOoBasic Wiki

ike@九州 (2011-01-15 09:00:47 (土))

はにゃ? さんのサイトはこのぺージ左ペインの関連サイトにある
OOoBasic Wiki です。

Zoom情報、MRI の作者などで、既に訪問されてると思います。おほほ

ありがとうございました。

さいきゆみ (2011-01-15 22:43:27 (土))

ポチポチがんばります。とても今回やる気になりました。 マクロの本が1冊しかなく、その本の内容があまりに…だったもので…。 助かりました。

なぜかまたエラーが出るようになってしまったのですが

さいきゆみ (2011-02-18 00:40:21 (金))

この間にしたことといえば…アクロバットのアップデートくらいの気がするのですが…。
erra.jpg

どうも、マクロのルールが変わったような気がしてしかたありません。

さいきゆみ (2011-02-18 01:09:37 (金))

リサイズまでなら正常に動くことが確認されました。
へこみます。

問題ないですけれど

ike@九州 (2011-02-18 10:28:49 (金))

Vista OOo3.3
さいきさん のコードで問題なく

リサイズ
新規レコードへ移動
指定テキストボックスへ移動
拡大してます。

エラーの場合は
エラー箇所が反転しています
添付のエラー画像から判断するとフォームが基にしているテーブル又はクエリの最終レコードは正常でしょうか?
新規レコード追加は普通に追加ボタンで行った方が良いかも知れませんね。

検証

ike@九州 (2011-02-21 13:46:30 (月))

原因が分かりました。
エラーはフォームを編集で開いた時に出現するのではないでしょうか?

ので、解決策

'編集モードの場合何もしない
If oCtrl.isFormDesignMode Then Exit Sub 
oForm.AfterLast()
oForm.moveToInsertRow()

に変更してください。

そのとおりでございます

さいきゆみ (2011-02-21 22:49:05 (月))

よかった〜。ありがとうございます。やる気が復活しました。まったく原因がわからなかったのですが、そういうこともあるんですね。 ありがとうございます。

完了にします

M.Kamataki (2011-02-22 11:11:36 (火))

みなさん、コメントありがとうございます。

お名前:
題名:


添付ファイル: fileerra.jpg 874件 [詳細] fileerrar.jpg 881件 [詳細] fileinputresizeup.bas 767件 [詳細] fileinputresize.bas 756件 [詳細] filefaq6_114sample3.odt 1105件 [詳細] filefaq6_114sample2.odt 1163件 [詳細] filefaq6_114sample1.odt 1173件 [詳細] fileerrra.jpg 920件 [詳細]