マクロ,BASICに関する操作方法
秋田パソコンステーションのロゴ OpenOffice.org Reference OpenOffice.org
戻る 基本操作 文書作成 表計算 図形描画 ダウンロード

基本構文

回数によって処理を繰り返す

 FOR i=x TO y STEP z
 {処理}
 NEXT i
サンプル解説
    Sub For_To_Step
  1. Dim i,counter as integer
  2. Dim osheet,ocell as object
  3. counter=0
  4. oSheet = ThisComponent.Sheets(0)
  5. For i = 0 TO 27 Step 2
  6. oCell = oSheet.getCellByPosition(0,counter)
    oCell.value= i
  7. counter = counter + 1
  8. Next i
    End Sub

  1. 変数i,counterを整数型、
  2. 変数osheet,ocellをオブジェクトとして宣言します
  3. counterに0を代入します
  4. シートの表1を選択します
  5. iの値を0から27までステップ2でループを開始します
  6. 表1のA列にiを代入します
  7. counterに1を加えます
  8. ループを終了します
Calc表示

処理を選択する

 If [条件] Then
 {処理1}
 Else
 {処理2}
 End If
サンプル解説
    Sub If_Then_Else
  1. Dim number as integer
  2. number=InputBox ("年齢を入力")
  3. If number < 20 Then
    MsgBox "未成年"
  4. Else
    MsgBox "成人"
    End If
    End Sub

  1. 変数numberを整数型で宣言します
  2. InputBoxに年齢を入力します
  3. 20より小さければ未成年
  4. それ以外は、成人と出力します

処理を分岐させる

 Select Case [条件式]
 Case [条件]
 {処理1}
 Case [条件]
 {処理2}
 Case Else
 {処理3}
 End Select
サンプル解説
    Sub Select_Case
  1. Dim number as integer
  2. number=InputBox ("年齢を入力")
  3. Select Case number
  4. Case 33,42
    MsgBox "厄年"
  5. Case 34 to 41
    MsgBox "万事多忙"
  6. Case Else
    MsgBox "心配なし"
    End Select
    End Sub

  1. 変数numberを整数型で宣言します
  2. InputBoxに年齢を入力します
  3. numberを比較します
  4. 33と42が入力されたら、厄年と出力します
  5. 34〜41が入力されたら、万事多忙と出力します
  6. それ以外は、心配なしと出力します

条件によって処理を繰り返す(1)

 Do Until[条件式]
 {処理}
 Loop
サンプル解説
    Sub Do_Loop
  1. Dim counter,number as integer
  2. counter=0
  3. number=2
  4. Do Until number > 20
    number = number * 2
    counter = counter + 1
  5. If number < 1 Then Exit Do
    Loop
  6. MsgBox counter & "回ループしました"
    End Sub

  1. 変数counter,numberを整数型で宣言します
  2. counterを0にします
  3. numberを2にします
  4. numberが20になるまでnumberを2倍
    counterに1づつ加えていきます
  5. numberが1より小さくなったら、Loopから抜けます
  6. 回数を出力します

条件によって処理を繰り返す(2)

 While [条件式]
 {処理}
 Wend
サンプル解説
    Sub While_Wend
  1. Dim counter,number as integer
  2. counter=0
  3. number=2
  4. While number < 20
    number = number * 2
    counter = counter + 1
    Wend
  5. MsgBox counter & "回ループしました"
    End Sub

  1. 変数counter,numberを整数型で宣言します
  2. counterを0にします
  3. numberを2にします
  4. numberが20になるまでnumberを2倍
    counterに1づつ加えていきます
  5. 回数を出力します

ループから抜け出す

 Exit...For
 Exit...Do
サンプル解説
    Sub Exit_Do
  1. Dim i,number,counter
  2. number=0:counter=0
    Do
  3. For i = 1 To 1000
  4. number = Int(Rnd * 1000)
  5. Select Case number
  6. Case 7:Exit For
  7. Case 29:Exit Do
    End Select
    Next i
    MsgBox number & "、FOR回数は" & i & "回目"
    counter = counter + 1

    Loop
    MsgBox number & "、カウンター回数は" & counter & "回目"
    End Sub

  1. 変数i,number,counterを宣言します
  2. number,counterに0をセットします
  3. Forを使って1,000回繰り返します
  4. numberに乱数をセットします
  5. numberを比較します
  6. 7が出たら、Forから抜けてFor回数を表示します
    counterに1をプラスします
  7. 29が出たらLoopを抜けてカウンター回数を表示します

プログラムを終了する

 End
サンプル解説
    Sub routine
  1. Dim password,pword,ans
  2. password ="akita1234"
    Do
  3. pword=InputBox("パスワードを入力してください")
  4. If pword = password Then Exit Do
  5. ans=MsgBox ("終了しますか",4,"パスワードが違います")
  6. Select Case ans
    Case 6
    End
    End Select
    Loop
  7. MsgBox pword & "は正しいパスワードです"
    End Sub

  1. 変数passward,pword,ansを宣言する
  2. passwordにakita1234を設定する
  3. パスワード入力を要求する
  4. パスワードが合えばループを抜ける
  5. 終了するか聞く
  6. はいと入力するとプログラムを終了させる
  7. pwordを表示させ正しいと出力する

サブルーチンへ移動する

 GoSub [サブルーチン]
 {処理}
 [サブルーチン]
 {処理}
 Return
サンプル解説
    Sub subroutin
  1. Dim num as long
  2. Dim ans as integer
    Do
  3. num = InputBox("数を入力してください")
  4. Select Case num
  5. Case num > 10
    GoSub sub1
  6. Case Else
    GoSub sub2

    End Select
  7. ans=MsgBox (num,4,"終了しますか")
  8. If ans=6 Then Exit Sub
    Loop
    sub1:
    num = num ^ 2
    Return

    sub2:
    num = num * 2
    Return

    End Sub

  1. 変数numをLong形に宣言します
  2. 変数ansを整数型に宣言します
  3. 数を入力するよう要求します
  4. numを比較します
  5. 10より大きい数の場合、sub1に移動します
  6. それ以外は、sub2へ移動します
  7. 終了するか聞きます
  8. はいと入力すると終了します

プロシージャに制御を渡す

 Call [呼び出すプロシージャ名]
サンプル解説
    Sub Main_Syori
  1. Call Sub_Syori
  2. MsgBox "処理が戻ります"
    End Sub
    Sub Sub_Syori
    MsgBox "Sub_Syoriが呼び出されました"
    End Sub

  1. Sub_Syoriというプロシージャを呼び出します
  2. メッセージボックスに{処理が戻ります}と表示します
基本構文TOP

セルの操作

合計計算

サンプル解説
    Sub keisan
  1. Dim doc as object
    Dim sheet as object
    Dim cell as object
  2. doc = StarDesktop.CurrentComponent
    sheet = doc.sheets(0)
  3. cell=sheet.getCellByPosition(1,10)
    cell.formula="=SUM(B1:B10)"
    End Sub

  1. 変数doc、sheet、cellをオブジェクトとして宣言します
  2. (表1)を選択します
  3. シート"B11"を選択し
    SUM関数(B1:B10)の関数を入力します
calc表示

セル範囲の指定

サンプル解説
    REM ***** BASIC *****
  1. Option Explicit
    Sub Cell_BackColor
  2. Dim Doc as object
    Dim Sheet as object
    Dim CellRange AS Object
  3. Doc=StarDesktop.CurrentComponent
    Sheet=Doc.Sheets.getByName("表1")
  4. CellRange=Sheet.getCellRangeByName("A1:D10")
  5. CellRange.CellBackColor=RGB(0,0,255)
    End Sub

  1. 変数の宣言を強制します
  2. 変数Doc,Sheet,CellRangeをオブジェクト型に宣言します
  3. 表1を指定します
  4. セル範囲A1:D10を指定します
  5. 選択したセル範囲の背景色を青に設定します
calc表示

セル[A1]にデータを入力する

サンプル解説
    Sub Input_Data
  1. Dim Doc,Sheet,CellRange as Object
  2. Doc=StarDesktop.CurrentComponent
    Sheet=Doc.Sheets.getByName("表1")
  3. CellRange=Sheet.getCellRangeByName("A1")
  4. CellRange.Value=1000
    End Sub

  1. 変数Doc,Sheet,CellRangeをオブジェクト型に宣言します
  2. 表1を指定します
  3. セル[A1]を指定します
  4. セル[A1]に1000を入力します
calc表示

指定した範囲内にデータを入力する

サンプル解説
    REM ***** BASIC *****
    Option Explicit
    '指定した場所にデータを入力する
    Sub Inp_Data
    Dim Doc,Sheet,CellRange,Cell as Object
    Dim i as Integer
  1. Doc=ThisComponent
    Sheet=Doc.Sheets.getByName("表1")
  2. CellRange=Sheet.getCellRangeByName("A1:A10")
  3. For i = 0 to 9
    Cell=CellRange.getCellByPosition(0,i)
    Cell.Value= i * 200
    Next i
    End Sub






  1. (注)[Doc=ThisComponent]
    表1を指定
  2. [A1:A10]を範囲指定
  3. For文で1行毎に
    [行番号の200倍]のデータを出力します
calc表示

アクティブなセルにデータを出力する

サンプル解説
    REM ***** BASIC *****
    Option Explicit
    Sub ActiveCell_Input
    Dim nSelect,nSheet,nCellAdd as Object
    Dim nCellRow,nCellColumn as Integer
  1. nSheet=ThisComponent.Sheets(0)
  2. nSelect = ThisComponent.CurrentController.Selection
  3. nCellRow= nSelect.CellAddress.Row
  4. nCellColumn=nSelect.CellAddress.column
  5. nCellAdd=nSheet.getCellByPosition(nCellColumn,nCellRow)
  6. nCellAdd.Value=12345
    End Sub





  1. シート[表1]を指定
  2. アクティブなセルを選択
  3. 行番号を取得
  4. 列番号を取得
  5. セル番号を設定
  6. データを出力
calc表示
セルの操作TOP

データベースに接続

データソースの検索

サンプル解説
    REM ***** BASIC *****
    Option Explicit
    Sub DateBaseAccess
    Dim DatabaseContext as object
    Dim Names
    Dim i as Integer
    Dim nSheet as Object
    Dim nCell,nGetColumn as Object
    nSheet=ThisComponent.Sheets(0)
  1. DatabaseContext=createUnoService("com.sun.star.sdb.DatabaseContext")
  2. Names=DatabaseContext.getElementNames()
  3. For i = 0 to UBound(Names())
    nCell=nSheet.getCellByPosition(0,i)
    nCell.String=Names(i)
  4. nGetColumn=nCell.getColumns
    nGetColumn.OptimalWidth=true
    Next i
    End Sub









  1. データベースに接続
  2. データベースからOpenOfficeに登録してある
    データソースを検索
  3. セルA1からデータソースの名前を出力
  4. A列の幅を最適に調整
calc表示

特定のデータソースを検索

サンプル解説
    REM ***** BASIC *****
    Option Explicit
    Sub DataSourceAccess
    Dim DatabaseContext as Object
    Dim nDataSource as Object
  1. DatabaseContext=createUnoService("com.sun.star.sdb.DatabaseContext")
  2. nDataSource=DatabaseContext.getByName("HSQL接続(ネットワーク)")
  3. MsgBox nDataSource.Name
    End Sub





  1. データベースに接続
  2. OpenOfficeに登録してあるデータソースから[HSQL接続(ネットワーク)]を検索
  3. メッセージボックスに該当のデータソースを表示

テーブル名を取得

サンプル解説
    REM ***** BASIC *****
    Option Explicit
    Sub TableView
    Dim DatabaseContext as Object
    Dim nDataSource,nTables,nSheet,nNames,nCell,nGetColumns as Object
    Dim i,nAns as Integer
    nSheet=ThisComPonent.Sheets(0)
  1. DatabaseContext=createUnoService("com.sun.star.sdb.DatabaseContext")
  2. nDataSource=DatabaseContext.getByName("HSQL接続(ネットワーク)")
  3. With nSheet.getCellByPosition(0,0)
    .String="テーブル名"
    .CellBackColor=RGB(255,255,0) '背景色...黄色
    .CharHeightAsian=12 '文字サイズ...12pt
    .CharColor=RGB(255,0,0) '文字色...赤色
    .CharWeightAsian = com.sun.star.awt.FontWeight.BOLD ' 文字の形態...太字
    .HoriJustify = com.sun.star.table.CellHoriJustify.CENTER '配置...中央揃え
    End With
  4. nNames=nDataSource.Tables.ElementNames()
    For i = 1 to UBound(nNames())
    nCell=nSheet.getCellByPosition(0,i)
    nCell.String=nNames(i)
    nGetColumns=nCell.getColumns
    nGetColumns.OptimalWidth=true
    Next i
  5. nAns=MsgBox ("データを消去しますか",4)
    Select Case nAns
    Case 6
    nSheet.getCellRangeByName("A1:A6").ClearContents(36)
    End Select
    End Sub





  1. データベースに接続
  2. OpenOfficeに登録してあるデータソースから[HSQL接続(ネットワーク)]を検索
  3. セル[A1]に見出しを設定
  4. [HSQL接続(ネットワーク)]の中から、セル[A2からA6]にテーブル名を表示
  5. 表示したデータを削除するか確認します
Calc表示

SQL文の使用

サンプル解説
    REM ***** BASIC *****
    'セレクト命令
    Sub Main
    Dim DatabaseContext as Object
    Dim Datasource as Object
    Dim QueryDefinitions as Object
    Dim QueryDefinition as Object
    Dim I as Integer
  1. DatabaseContext=createUnoService("com.sun.star.sdb.DatabaseContext")
  2. DataSource=DatabaseContext.getByName("HSQL接続(ネットワーク)")
    QueryDefinitions=DataSource.getQueryDefinitions()
    QueryDefinition=createUnoService("com.sun.star.sdb.QueryDefinition")
  3. QueryDefinition.Command = "Select * From" & CHR(34) & "顧客名簿" & CHR(34) ' ”キャラクターコードCHR(34)=”
  4. QueryDefinitions.insertByName("新規クエリー",QueryDefinition)
    End Sub





  1. データベースに接続
  2. OpenOfficeに登録してあるデータソースから[HSQL接続(ネットワーク)]を検索
  3. SQL文を作成
  4. [HSQL接続(ネットワーク)]のクエリに[新規クエリー]として登録
Database表示
データベースに接続TOP

ダイアログの操作

ダイアログボックスを使いグラフを表示

表を元にグラフを作成します。

ダイアログボックスを使用して、グラフ作成を行います。

On〜Error命令でエラー処理をしています。

サンプル解説
    REM ***** BASIC *****
    '変数を設定
  1. Option Explicit
  2. Dim nDlg,nCtl as Object
    Dim nDoc as Object
    Dim nCharts as Object
    Dim nChart as Object
    Dim nRect as New com.sun.star.awt.Rectangle
    Dim nRangeAddress (0) as New com.sun.star.table.CellRangeAddress
    'ダイアログを表示
  3. Sub Dialog1Show
    DialogLibraries.LoadLibrary( "Standard" )
  4. nDlg = CreateUnoDialog( DialogLibraries.Standard.Dialog1 )
  5. nCtl = nDlg.GetControl("CommandButton1")
  6. nCtl.Label = "グラフの作成"
  7. nDlg.Execute()
    End Sub
    'ダイアログを閉じる
  8. Sub DialogClosed
  9. nDlg.endExecute()
    End Sub
    'グラフを表示
  10. Sub ChartsShow
  11. nDoc=ThisComponent
    nCharts=nDoc.Sheets(0).Charts
  12. nRect.X=8000
    nRect.Y=1500
  13. nRect.Width=10000
    nRect.Height=10000
  14. nRangeAddress(0).Sheet=0
    nRangeAddress(0).StartColumn=0
    nRangeAddress(0).StartRow=0
    nRangeAddress(0).EndColumn=2
    nRangeAddress(0).EndRow=12
  15. On Error Goto ErrorHandler
    nCharts.addNewByName("MyChart",nRect,nRangeAddress(),True,True)
    Exit Sub
    ErrorHandler:
    MsgBox "Error " & Err & ": " & Error$ & "(line : " & Erl & ")"
    Resume Next
    End Sub
    'グラフを閉じる
  16. Sub RemoveCharts
  17. On Error Goto ErrorHandler2
    nCharts.removeByName("MyChart")
    Exit Sub
    ErrorHandler2:
    MsgBox "Error " & Err & ": " & Error$ & "(line : " & Erl & ")"
    Resume Next
    End Sub


  1. 変数を強制します
  2. 変数をサブプロシージャの前で宣言します
  3. ダイアログ表示のプログラム
  4. ダイアログ1を指定
  5. コマンドボタン1を指定
  6. コマンドボタン1のラベルを指定
    ※プロパティで設定しても構いません。
  7. ダイアログ表示
  8. ダイアログ非表示のプログラム
  9. [閉じる]ボタンを押すと終了します。
  10. グラフ表示のプログラム
  11. シート[表1]を指定
  12. グラフ表示のポジションを指定
  13. グラフの大きさを指定
  14. [表1]のデータ[A1:C13]を指定
  15. エラー処理
    エラーが発生したらエラー番号をメッセージボックスに表示
    それ以外はグラフを表示します
  16. グラフを閉じるプログラム
  17. エラー処理
    エラーが発生したらエラー番号をメッセージボックスに表示 それ以外はグラフを閉じます
Chart表示 Dialog表示

リストボックスにデータソースを表示

サンプル解説
  1. Option Explicit
    Dim nDlg,nCtl,nLst as Object
    Dim DatabaseContext as object
    Dim Names
    Dim i,nItmcnt as Integer
  2. 'ダイアログの表示
    Sub Dialog1Show
    DialogLibraries.LoadLibrary( "Standard" )
    nDlg = CreateUnoDialog( DialogLibraries.Standard.Dialog1 )
    nCtl = nDlg.GetControl("CommandButton1")
    nLst=nDlg.GetControl("ListBox1")
    nDlg.Execute()
    End Sub
  3. 'ダイアログを閉じる
    Sub DialogClosed
    nDlg.endExecute()
    End Sub
  4. 'データソースを表示
    Sub DateBaseAccess
    DatabaseContext=createUnoService("com.sun.star.sdb.DatabaseContext")
    Names=DatabaseContext.getElementNames()
    On Error Goto ErrorHandler
    nLst.addItems(Names(),0)
    Exit Sub
    ErrorHandler:
    MsgBox "Error " & Err & ": " & Error$ & "(line : " & Erl & ")"
    Resume Next
    End Sub
  5. 'データソースを閉じる
    Sub RemoveDatabase
    nItmcnt=nLst.ItemCount
    On Error Goto ErrorHandler2
    nLst.removeItems(0,nItmcnt)
    Exit Sub
    ErrorHandler2:
    MsgBox "Error " & Err & ": " & Error$ & "(line : " & Erl & ")"
    Resume Next
    End Sub
  1. 変数を宣言
    ※nItmcnt=リストボックスのデータ数をカウントします。
  2. ダイアログボックスを表示します
    dialog1を作成
    コントロールボタン3個
    リストボックス1個
    作成しておきます
    各々プロパティで必要な項目を設定しておきます
  3. ダイアログボックスを閉じます。
  4. リストボックスにデータソース名を表示します
    ElementNameからデータを抽出します。
  5. データソースを閉じます。
    ※データ数をカウントして
    nItmcnt=nLst.ItemCount
    ※データを削除します
    nLst.removeItems(0,nItmcnt)
表示

簡易計算書の作成

 今回は、ダイアログボックスを使って、計算を行ってみます。
 その外、ダイアログボックスの外観を[Model]を使用して変更しています

サンプル解説
  1. Option Explicit
    Option Base 1
    Dim nDlg,mDlg,nFln as Object
    Dim nCtl1,nCtl2,nCtl3 as Object
    Dim nLbl(6) as Object
    Dim nTxt(13) as Object
    Dim nTsel(13) as Variant
  2. 'ダイアログの表示
    Sub DialogShow
    DialogLibraries.LoadLibrary( "Standard" )
    nDlg = CreateUnoDialog( DialogLibraries.Standard.Dialog2)
  3. 'ダイアログボックスの外観設定
    mDlg = nDlg.getModel()
    With mDlg
    .Width=300
    .height=300
    .BackgroundColor=RGB(255,255,200)
    .Title="計算"
    End With
  4. '水平線
    nFln=nDlg.getControl("FixedLine1")
    With nFln.Model
    .Width=260
    .Height=10
    .PositionX=20
    .PositionY=90
    End With
  5. '閉じるボタン
    nCtl1 = nDlg.GetControl("CommandButton1")
    nCtl1.Label="閉じる"
    With nCtl1.Model
    .Width=30
    .PositionX=250
    .PositionY=250
    End With
  6. '計算ボタン
    nCtl2 = nDlg.GetControl("CommandButton2")
    nCtl2.Label="計算"
    With nCtl2.Model
    .Width=30
    .PositionX=250
    .PositionY=50
    End With
  7. '消去ボタン
    nCtl3 = nDlg.GetControl("CommandButton3")
    nCtl3.Label="消去"
    With nCtl3.Model
    .Width=30
    .PositionX=250
    .PositionY=70
    End With
  8. 'ラベル1
    nLbl(1)=nDlg.getControl("Label1")
    nLbl(1).Text="数量"
    With nLbl(1).Model
    .Width=80
    .Height=10
    .PositionX=20
    .PositionY=110
    End With
  9. 'ラベル2
    nLbl(2)=nDlg.getControl("Label2")
    nLbl(2).Text="単価"
    With nLbl(2).Model
    .Width=80
    .Height=10
    .PositionX=100
    .PositionY=110
    End With
  10. 'ラベル3
    nLbl(3)=nDlg.getControl("Label3")
    nLbl(3).Text="金額"
    With nLbl(3).Model
    .Width=100
    .Height=10
    .PositionX=180
    .PositionY=110
    End With
  11. 'ラベル4(タイトル)
    nLbl(4)=nDlg.getControl("Label4")
    With nLbl(4).Model
    .Width=200
    .Height=30
    .PositionX=50
    .PositionY=10
    End With
  12. 'ラベル5(合計金額)
    nLbl(5)=nDlg.getControl("Label5")
    With nLbl(5).Model
    .Width=70
    .Height=30
    .PositionX=30
    .PositionY=60
    End With
  13. 'ラベル3(円)
    nLbl(6)=nDlg.getControl("Label6")
    With nLbl(6).Model
    .Width=20
    .Height=30
    .PositionX=200
    .PositionY=60
    End With
  14. 'テキストボックス1
    nTxt(1)=nDlg.getControl("TextField1")
    With nTxt(1).Model
    .Width=80
    .Height=20
    .PositionX=20
    .PositionY=120
    End With
  15. 'テキストボックス2
    nTxt(2)=nDlg.getControl("TextField2")
    With nTxt(2).Model
    .Width=80
    .Height=20
    .PositionX=100
    .PositionY=120
    End With
  16. 'テキストボックス3
    nTxt(3)=nDlg.getControl("TextField3")
    With nTxt(3).Model
    .Width=100
    .Height=20
    .PositionX=180
    .PositionY=120
    End With
  17. 'テキストボックス4
    nTxt(4)=nDlg.getControl("TextField4")
    With nTxt(4).Model
    .Width=80
    .Height=20
    .PositionX=20
    .PositionY=140
    End With
  18. 'テキストボックス5
    nTxt(5)=nDlg.getControl("TextField5")
    With nTxt(5).Model
    .Width=80
    .Height=20
    .PositionX=100
    .PositionY=140
    End With
  19. 'テキストボックス6
    nTxt(6)=nDlg.getControl("TextField6")
    With nTxt(6).Model
    .Width=100
    .Height=20
    .PositionX=180
    .PositionY=140
    End With
  20. 'テキストボックス7
    nTxt(7)=nDlg.getControl("TextField7")
    With nTxt(7).Model
    .Width=80
    .Height=20
    .PositionX=20
    .PositionY=160
    End With
  21. 'テキストボックス8
    nTxt(8)=nDlg.getControl("TextField8")
    With nTxt(8).Model
    .Width=80
    .Height=20
    .PositionX=100
    .PositionY=160
    End With
  22. 'テキストボックス9
    nTxt(9)=nDlg.getControl("TextField9")
    With nTxt(9).Model
    .Width=100
    .Height=20
    .PositionX=180
    .PositionY=160
    End With
  23. 'テキストボックス10
    nTxt(10)=nDlg.getControl("TextField10")
    With nTxt(10).Model
    .Width=80
    .Height=20
    .PositionX=20
    .PositionY=180
    End With
  24. 'テキストボックス11
    nTxt(11)=nDlg.getControl("TextField11")
    With nTxt(11).Model
    .Width=80
    .Height=20
    .PositionX=100
    .PositionY=180
    End With
  25. 'テキストボックス12
    nTxt(12)=nDlg.getControl("TextField12")
    With nTxt(12).Model
    .Width=100
    .Height=20
    .PositionX=180
    .PositionY=180
    End With
  26. 'テキストボックス13(合計金額)
    nTxt(13)=nDlg.getControl("TextField13")
    With nTxt(13).Model
    .Width=100
    .Height=30
    .PositionX=100
    .PositionY=55
    End With
    nDlg.Execute()
    End Sub
  27. 'テキストボックスからデータを参照する-計算
    Sub TextSelect
    '1段目
    nTsel(1)=nTxt(1).Text
    nTsel(2)=nTxt(2).Text
    nTsel(3)=Val(nTsel(1)) * Val(nTsel(2))
    nTxt(3).Text = nTsel(3)
    '2段目
    nTsel(4)=nTxt(4).Text
    nTsel(5)=nTxt(5).Text
    nTsel(6)=Val(nTsel(4)) * Val(nTsel(5))
    nTxt(6).Text = nTsel(6)
    '3段目
    nTsel(7)=nTxt(7).Text
    nTsel(8)=nTxt(8).Text
    nTsel(9)=Val(nTsel(7)) * Val(nTsel(8))
    nTxt(9).Text = nTsel(9)
    '4段目
    nTsel(10)=nTxt(10).Text
    nTsel(11)=nTxt(11).Text
    nTsel(12)=Val(nTsel(10)) * Val(nTsel(11))
    nTxt(12).Text = nTsel(12)
    '合計
    nTsel(13)=Val(nTsel(3)) + Val(nTsel(6)) + Val(nTsel(9)) + Val(nTsel(12))
    nTxt(13).Text = nTsel(13)
    End Sub
  28. 'テキストボックスの値をクリアーする
    Sub TextClear
    nTxt(1).Text="":nTxt(2).Text="":nTxt(3).Text="":nTxt(4).Text="":nTxt(5).Text="":nTxt(6).Text=""
    nTxt(7).Text="":nTxt(8).Text="":nTxt(9).Text="":nTxt(10).Text="":nTxt(11).Text="":nTxt(12).Text="":nTxt(13).Text=""
    End Sub
  29. 'ダイアログを閉じる
    Sub DialogClosed
    nDlg.endExecute()
    End Sub
  1. 変数を宣言します
    テキストボックスやラベルを多く使うため、配列を使います。




  2. ダイアログボックスを表示します
    ここで、必要なコントロールを配置します
    大きさや位置は、プログラムで変更します


  3. ダイアログボックスの幅、高さ、背景、タイトルを設定します






  4. 4〜26は、コントロールのプロパティを設定しています



























































































































































































  5. 段毎に、計算を行います
    合計を計算したら、合計金額欄に表示します

























  6. テキストボックスをクリアーします







  7. ダイアログボックスを閉じます
ダイアログ表示コントロール配置

リザルトセットの使い方

リザルトセットは、通常データのスクロールができない為、タイプの変更を行なう必要があります。
ステートメントのオプションで変更と書いてありますが、思うように変更にならないため「1004」を入れてみました
今のところ、とりあえず動くという状態です。

サンプルコード
    REM ***** BASIC *****
    Option Explicit
    Option Base 1
    Dim DatabaseContext as Object
    Dim Datasource as Object
    Dim Connection as Object
    Dim InteractionHadler as Object
    Dim Statement as Object
    Dim ResultSet as Object
    Dim nDlg,nCtl(6),nTxt(6),nLbl,nFln,mDlg as Object
    Dim nList() as String
    Dim count as Integer
    'ダイアログ表示
    Sub DialogShow
    DialogLibraries.LoadLibrary("Library1")
    nDlg=CreateUnoDialog(DialogLibraries.Library1.Dlg2)
    mDlg=nDlg.getModel
    With mDlg
    .width=260
    .Title="SelectSubの使い方※スタートボタンを押してから始めてください。"
    End With
    nCtl(1)=nDlg.GetControl("CommandButton1") 'スタートボタン
    With nCtl(1).Model
    .PositionX=140
    .PositionY=30
    End With
    nCtl(2)=nDlg.GetControl("CommandButton2") '<<ボタン
    With nCtl(2).Model
    .PositionX=30
    .PositionY=30
    .Width=20
    End With
    nCtl(3)=nDlg.GetControl("CommandButton3") '<ボタン
    With nCtl(3).Model
    .PositionX=51
    .PositionY=30
    .Width=20
    End With
    nCtl(4)=nDlg.GetControl("CommandButton4") '>ボタン
    With nCtl(4).Model
    .PositionX=72
    .PositionY=30
    .Width=20
    End With
    nCtl(5)=nDlg.GetControl("CommandButton5") '>>ボタン
    With nCtl(5).Model
    .PositionX= 93
    .PositionY=30
    .Width=20
    End With
    nCtl(6)=nDlg.GetControl("CommandButton6") '閉じるボタン
    With nCtl(6).Model
    .PositionX=200
    .PositionY=30
    End With
    nTxt(1)=nDlg.GetControl("TextField1") '顧客ID
    With nTxt(1).Model
    .PositionX=10
    .PositionY=60
    .Width=20
    End With
    nTxt(2)=nDlg.GetControl("TextField2") '顧客名
    With nTxt(2).Model
    .PositionX=31
    .PositionY=60
    .Width=30
    End With
    nTxt(3)=nDlg.GetControl("TextField3") '郵便番号
    With nTxt(3).Model
    .PositionX=62
    .PositionY=60
    .Width=30
    End With
    nTxt(4)=nDlg.GetControl("TextField4") '都道府県
    With nTxt(4).Model
    .PositionX=93
    .PositionY=60
    .Width=30
    End With
    nTxt(5)=nDlg.GetControl("TextField5") '住所
    With nTxt(5).Model
    .PositionX=124
    .PositionY=60
    .Width=80
    End With
    nTxt(6)=nDlg.GetControl("TextField6") '電話番号
    With nTxt(6).Model
    .PositionX=205
    .PositionY=60
    .Width=40
    End With
    nLbl=nDlg.GetControl("Label1") 'タイトル
    nLbl.Text="データのスクロール表示"
    With nLbl.Model
    .PositionX=20
    .PositionY=10
    .Width=100
    End With
    nFln=nDlg.GetControl("FixedLine1") '水平線
    With nFln.MOdel
    .PositionX=10
    .PositionY=50
    .Width=235
    End With
    nDlg.Execute()
    End Sub
    'データベースに接続
    Sub Databasesetuzoku
    DatabaseContext=createUnoService("com.sun.star.sdb.DatabaseContext")
    DataSource=DatabaseContext.getByName("HSQL接続(ネットワーク)")
    If Not DataSource.IsPasswordRequired Then
    Connection = DataSource.GetConnection("","")
    Else
    InteractionHandler = createUnoService("com.sun.star.sdb.InteractionHandler")
    Connection = DataSource.ConnectWithCompletion(InteractionHandler)
    End If
    Statement = Connection.createStatement()
    Statement.ResultSetType="1004"
    Statement.ResultSetConcurrency= "1008"
    ResultSet= Statement.executeQuery("Select * From 顧客名簿")
    End Sub
    Sub ResultSetFirst()
    ResultSet.First()
    nTxt(1).Text=ResultSet.getString(1)
    nTxt(2).Text=ResultSet.getString(2)
    nTxt(3).Text=ResultSet.getString(3)
    nTxt(4).Text=ResultSet.getString(4)
    nTxt(5).Text=ResultSet.getString(5)
    nTxt(6).Text=ResultSet.getString(6)
    End Sub
    Sub ResultSetPrevious()
    ResultSet.Previous()
    nTxt(1).Text=ResultSet.getString(1)
    nTxt(2).Text=ResultSet.getString(2)
    nTxt(3).Text=ResultSet.getString(3)
    nTxt(4).Text=ResultSet.getString(4)
    nTxt(5).Text=ResultSet.getString(5)
    nTxt(6).Text=ResultSet.getString(6)
    End Sub
    Sub ResultSetNext()
    ResultSet.Next()
    nTxt(1).Text=ResultSet.getString(1)
    nTxt(2).Text=ResultSet.getString(2)
    nTxt(3).Text=ResultSet.getString(3)
    nTxt(4).Text=ResultSet.getString(4)
    nTxt(5).Text=ResultSet.getString(5)
    nTxt(6).Text=ResultSet.getString(6)
    End Sub
    Sub ResultSetLast()
    ResultSet.Last()
    nTxt(1).Text=ResultSet.getString(1)
    nTxt(2).Text=ResultSet.getString(2)
    nTxt(3).Text=ResultSet.getString(3)
    nTxt(4).Text=ResultSet.getString(4)
    nTxt(5).Text=ResultSet.getString(5)
    nTxt(6).Text=ResultSet.getString(6)
    End Sub
    Sub DialogClosed
    nDlg.EndExecute()
    End Sub
ダイアログ表示

サンプル解説





表示
ダイアログの操作TOP
秋田パソコンステーションのロゴ 秋田パソコンステーション 秋田パソコンステーション
秋田パソコンステーション 秋田市新屋日吉町42-19 TEL:018-828-2835/FAX:018-828-6089