LibreOffice Baseで、打撃結果入力システムを作ることを目標にサンプルマクロと格闘しておりました。
で、まずは小さなものからはじめないとな・・てことで、ボタンを押すと結果がテーブルに結果が入るBaseドキュメントを作ってみました。
こんな感じの画面で・・ヒット!を連打、アウトを連打すると、
こんな感じでテーブルにデータが入る仕組みです。
ボタンを押す時にテーブルにデータを追加するときのマクロは、マクロの杜のBaseサンプルマクロのRowsetでRow追加(Primary Key必須)をちょこっといじっただけです。
→ OSS(Open Sourse Software)でいこう!!「Open Office.org/Libre Office.orgを使おう編」
では、手順。
大まかに分けて4つの作業工程になります。
①起動と打撃結果入力用フォームの作成
②DAGEKIKEKKAテーブルの作成
③マクロ(テーブルへの行追加、入力)の設定
④入力フォーム、ボタンへのマクロの割り当て
では、説明にかかります。
①起動と打撃結果入力用フォームの作成
LibreOfficeよりBaseを起動します。
[次へ]をクリック
[完了]をクリック
「打撃結果入力サンプル」とファイル名を設定し・・[保存]をクリック
打撃結果入力サンプル.odbファイルができあがります。
最初に入力用のボタンの画面(フォーム)を作ります。
フォームから、デザイン表示でフォームを作成をクリックすると
何も編集してないフォームが開きます。
タイトルのラベルを作りましょう
左の「ラベル」をクリックした後
+□のような感じにマウスの矢印が変わるので、置きたいところでクリック、
そのまま引きのばしてラベル作成
上の状態でマウスを右クリックし、コントロールを選択
属性パネルが開くので、全般からタイトル、フォント、配置等設定。
ラベルが思うような字になったら次はボタンです。
左の「ボタン」をクリックして
ラベルの時のようにマウスの矢印が+□みたいな形になるので
置きたいところにクリック、引き伸ばしてボタンを配置します。
ラベルの時と同様に右クリックでコントロールへ
ボタンの属性が開きますので、全般で、タイトル、フォント、配置等修正
フォントの色はフォントの[フォント効果]のほうにございます。
右のボタンについてもヒット!のところをアウトにして同様に作成します。
で、完成したら保存です。閉じようとすると保存するか尋ねられますので[保存]
「打撃入力サンプル」で登録
で、フォームの作業はいったん終了です。
②DAGEKIKEKKAテーブルの作成
次はテーブルの作成。テーブルから、デザイン表示でテーブルを作成をクリック。
するとこんな画面が開きます。
フィールド名に「KEKKA」と入力。フィールドタイプはテキストが自動で入るかと思います。
閉じようとすると保存するか尋ねられますので「はい」で
プライマリキーについても尋ねられるので「はい」
で、テーブル名「DAGEKIKEKKA」でテーブルを保存
保存されたテーブルは、「DAGEKIKEKKA」を右クリック、[編集]で再び開くと
IDが追加されています。
下の自動入力値を「はい」に変更します。
テーブルの設定自体はこれで終わりです。
テーブルの中身はこの状態でDAGEKIKEKKAテーブルを右クリック、「開く」を選択すると確認できます。
こんな感じで空のテーブルができております。
③マクロの設定
次は、マクロの設定に移ります。
[ツール]-[マクロ]-[マクロの管理]-[LibreOffice Basic]を選択
「打撃結果入力サンプル.odb」を選び、[新規作成]を選択
新しいモジュール がでてきます。そのまま [OK]で
こんなモジュール画面が出てきます。
以下のテキストを
Sub Main
End Sub
の下にそのまま貼り付けてください
REM --- ここから ---
Sub oRowsetHit
On Error Goto oBad
' ******** [ Rowset で Row追加 ] **********
Dim oRSKekka as Object
Dim oAddKekka() as String
Dim i as Integer
oRSKekka = createUnoService("com.sun.star.sdb.RowSet")
' DataSourceと接続
With oRSKekka
.DataSourceName = "打撃結果入力サンプル"
.CommandType = com.sun.star.sdb.CommandType.TABLE
.Command = "DAGEKIKEKKA" ' No.1 col : ID( 自動入力 ) / No.2 Col : KEKKA の2つのColumnを持つTable で Primary Key 設定が必須
.IgnoreResult = true ' Not interested in result
.execute()
End With
'
' 値追加
oAddKekka = Array("ヒット")
'
for i = 0 to UBound(oAddKekka)
With oRSKekka
.moveToInsertRow()
.UpdateString(2, oAddKekka(i))
.insertRow()
End With
next i
'
' Rowset の Close
oRSKekka.close
set oRSKekka = Nothing
' Display
REM msgbox "Success"
Exit Sub
oBad:
Dim oErLine As Integer
Dim oErNum As Integer
Dim oErMsg As String
oErLine = Erl
oErNum = Err
oErMsg = Error
Msgbox("Error Line No. " & Chr$(9) & " : " & oErLine & Chr$(10) _
& "Error Number " & Chr$(9) & " : " & oErNum &Chr$(10 ) _
& "Error Message" & Chr$(9) & " : " & oErMsg , 0, "Error Message")
End Sub
Sub oRowsetOut
On Error Goto oBad
' ******** [ Rowset で Row追加 ] **********
Dim oRSKekka as Object
Dim oAddKekka() as String
Dim i as Integer
oRSKekka = createUnoService("com.sun.star.sdb.RowSet")
' DataSourceと接続
With oRSKekka
.DataSourceName = "打撃結果入力サンプル"
.CommandType = com.sun.star.sdb.CommandType.TABLE
.Command = "DAGEKIKEKKA" ' No.1 col : ID( 自動入力 ) / No.2 Col : KEKKA の2つのColumnを持つTable で Primary Key 設定が必須
.IgnoreResult = true ' Not interested in result
.execute()
End With
'
' 値追加
oAddKekka = Array("アウト")
'
for i = 0 to UBound(oAddKekka)
With oRSKekka
.moveToInsertRow()
.UpdateString(2, oAddKekka(i))
.insertRow()
End With
next i
'
' Rowset の Close
oRSKekka.close
set oRSKekka = Nothing
' Display
REM msgbox "Success"
Exit Sub
oBad:
Dim oErLine As Integer
Dim oErNum As Integer
Dim oErMsg As String
oErLine = Erl
oErNum = Err
oErMsg = Error
Msgbox("Error Line No. " & Chr$(9) & " : " & oErLine & Chr$(10) _
& "Error Number " & Chr$(9) & " : " & oErNum &Chr$(10 ) _
& "Error Message" & Chr$(9) & " : " & oErMsg , 0, "Error Message")
End Sub
REM --- ここまで ---
貼り付けるとこんな感じになります。
マクロの設定は以上で終了です。
④ボタンへのマクロの割り当て
では、ボタンへのマクロの割り当てを行います。
フォームから打撃入力サンプルを選び右クリック、[編集]を選択
フォームの編集画面が開きますので、ヒット!ボタンを選び右クリック、[コントロール]を選択
イベント、実行時の右、[...]のボタンをクリック
アクションの割り当て、でマクロを選択
マクロセレクターが開きますのでヒット!のボタンの場合は「oRowsetHit」を選んで[OK]
閉じるとアクションの割り当て、実行時のところに登録されていますので[OK]をクリック。
アウトのボタンについても同様に行います。
マクロの選択だけ「oRowsetOut」で行ってください。
最後の保存です。[保存]で
あとは、フォームを開いてヒット!、アウト、それぞれのボタンを押すとテーブルに追加されます。

























![DAGEKIKEKKA]テーブル編集](https://stat.ameba.jp/user_images/20140723/13/naopon66/62/3c/p/o0786055413011741671.png?caw=800)
















