打撃結果入力用サンプルの作成 | なおぽんのだらだら日記

なおぽんのだらだら日記

          ~なおぽんのブログ~
           普通じゃないかも。

ボタン一つで入力できる幸せ!




LibreOffice Base
で、打撃結果入力システムを作ることを目標にサンプルマクロと格闘しておりました。


で、まずは小さなものからはじめないとな・・てことで、ボタンを押すと結果がテーブルに結果が入るBaseドキュメントを作ってみました。

ボタン画面



こんな感じの画面で・・ヒット!を連打、アウトを連打すると、


テーブル


こんな感じでテーブルにデータが入る仕組みです。


ボタンを押す時にテーブルにデータを追加するときのマクロは、マクロの杜のBaseサンプルマクロのRowsetでRow追加(Primary Key必須)をちょこっといじっただけです。


→ OSS(Open Sourse Software)でいこう!!「Open Office.org/Libre Office.orgを使おう編」

→ Macroの杜 サンプルマクロ Base



では、手順。


大まかに分けて4つの作業工程になります。


①起動と打撃結果入力用フォームの作成
②DAGEKIKEKKAテーブルの作成
③マクロ(テーブルへの行追加、入力)の設定
④入力フォーム、ボタンへのマクロの割り当て

では、説明にかかります。



①起動と打撃結果入力用フォームの作成


LibreOfficeよりBaseを起動します。

Libre起動



[次へ]をクリック

新規1



[完了]をクリック

新規2



「打撃結果入力サンプル」とファイル名を設定し・・[保存]をクリック

新規3



打撃結果入力サンプル.odbファイルができあがります。

打撃結果入力サンプル起動



最初に入力用のボタンの画面(フォーム)を作ります。
フォームから、デザイン表示でフォームを作成をクリックすると

フォームへ



何も編集してないフォームが開きます。

フォームが開きます




タイトルのラベルを作りましょう
左の「ラベル」をクリックした後

ラベルフィールド



+□のような感じにマウスの矢印が変わるので、置きたいところでクリック、
そのまま引きのばしてラベル作成

ラベル



上の状態でマウスを右クリックし、コントロールを選択

コントロール



属性パネルが開くので、全般からタイトル、フォント、配置等設定。

ラベル属性




ラベルが思うような字になったら次はボタンです。
左の「ボタン」をクリックして

ボタン



ラベルの時のようにマウスの矢印が+□みたいな形になるので
置きたいところにクリック、引き伸ばしてボタンを配置します。

ボタン出現



ラベルの時と同様に右クリックでコントロールへ

ボタンからコントロール




ボタンの属性が開きますので、全般で、タイトル、フォント、配置等修正
フォントの色はフォントの[フォント効果]のほうにございます。

ボタン属性



右のボタンについてもヒット!のところをアウトにして同様に作成します。



で、完成したら保存です。閉じようとすると保存するか尋ねられますので[保存]


閉じる前



「打撃入力サンプル」で登録

フォーム保存

で、フォームの作業はいったん終了です。



②DAGEKIKEKKAテーブルの作成

次はテーブルの作成。テーブルから、デザイン表示でテーブルを作成をクリック。


テーブル作成


するとこんな画面が開きます。

テーブル編集画面が開きます



フィールド名に「KEKKA」と入力。フィールドタイプはテキストが自動で入るかと思います。

KEKKA作成



閉じようとすると保存するか尋ねられますので「はい」で

テーブル保存



プライマリキーについても尋ねられるので「はい」

プライマリキー保存



で、テーブル名「DAGEKIKEKKA」でテーブルを保存


DAGEKIKEKKAテーブル



保存されたテーブルは、「DAGEKIKEKKA」を右クリック、[編集]で再び開くと

DAGEKIKEKKA]テーブル編集



IDが追加されています。

DAGEKIKEKKAテーブル編集中身


下の自動入力値を「はい」に変更します。

自動入力値



テーブルの設定自体はこれで終わりです。
テーブルの中身はこの状態でDAGEKIKEKKAテーブルを右クリック、「開く」を選択すると確認できます。

DAGEKIKEKKA再び



こんな感じで空のテーブルができております。

DAGEKIKEKKAテーブル開くと



③マクロの設定
次は、マクロの設定に移ります。
[ツール]-[マクロ]-[マクロの管理]-[LibreOffice Basic]を選択

マクロの管理




「打撃結果入力サンプル.odb」を選び、[新規作成]を選択

マクロの新規作成


新しいモジュール がでてきます。そのまま [OK]で

モジュール1



こんなモジュール画面が出てきます。

モジュール画面


以下のテキストを

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」で行ってください。


最後の保存です。[保存]で


最後修了


あとは、フォームを開いてヒット!、アウト、それぞれのボタンを押すとテーブルに追加されます。

ボタン押して開くと


 お疲れさまでした!。