2014年6月30日月曜日

シートの枚数を調べる。

 寄り道をしてみた。
 左下に表示されている「シート 1/7」と表示されている「7」を拾うのだ。




 コードは以下のとおり。

Sub main
    oSheets= ThisComponent.Sheets
    oNum = oSheets.getCount()
    oDisp = "Sheet の全枚数は " & oNum & " 枚です。"
    msgbox oDisp,0,"Sheet枚数取得"
End Sub

 これでシートの追加を先頭ではなくて最後にすることが出来るな。

 ついでに変数の型を定義しなくても変数を使えるということで試してみた。
 今回のようにちょっと試していくのには便利だな。

2014年6月29日日曜日

シートを削除してみた。

今回のコードは以下のとおり。
 実際に削除するコードは oSheets.removeByName( sSheetName ) である。

Sub Main
  Dim oSheets As Object
  Dim sSheetName As String
  Dim nReturnCode As Integer

  oSheets = ThisComponent.getSheets()
  sSheetName = "NewSheet"
  If oSheets.hasByName( sSheetName ) Then
    nReturnCode=Msgbox("本当に削除しますか?",4)
      if nReturnCode=6 then
        oSheets.removeByName( sSheetName )
      Endif
  else
    msgbox("削除するsheetがありません") 
  End If
End Sub


 この NewSheet がバッサリと削除されるのである。





 当たり前のことだけど削除したシートをもう一度削除しようとしても削除対象がないので出来ない。


 こうしてシートを挿入したり削除したりすることが出来るようになると一時的な作業用シートの完成だな。

 さて次はセルの値を元にしてデータベースのレコードを取得してみようか。

 と思ったけれど先にセル範囲を指定してのデータのクリアだな。
 レコードを取得しても書き込み先がきれいになっていなければ混乱のもとだ。

2014年6月28日土曜日

新しいシートを挿入する。

 マクロの動作結果は以下のとおり。






 コードは以下のとおり。

Sub Main
Dim oSheet As Object
Dim oShtName As String
Dim oDisp as String
  oSheet = ThisComponent.getSheets()
  oShtName = "NewSheet"
  oDisp = "新規Sheet : " & oShtName '& Chr$(10)
  If NOT oSheet.hasByName( oShtName ) Then
  oSheet.insertNewByName( oShtName, 0 )
  oDisp = oDisp & "が挿入されました"
  else
  oDisp = oDisp & "は既に存在しています"
  End If
  msgbox oDisp, 0, "Sheetの挿入"
End Sub


 シートを挿入する前に同一名称のシートがあるかどうかをチェックしている。
 なければ oSheet.insertNewByName( oShtName, 0 ) でシートを先頭に挿入している。

 挿入したシートの使い方としては作業用と出力用の複数を使う予定なので同一名称のシートがある場合には削除をしておきたいので次回はシートの削除だな。

 あとは挿入したいシートを先頭ではなくて最後にするにはどうするのだろうか。
 シートを挿入する場所を指定しているからシートの総数を調べる方法があればできそうだな。

2014年6月26日木曜日

Cellから値を取得する

 いよいよ「Cellから値を取得する」
http://openoffice3.web.fc2.com/OOoBasic_Calc.html#OOoCCB02a

 これが出来るようになるとやりたいことに近づく。

 今回動かしたコードは以下のとおり。
Sub Main

Dim Doc, Sheet As Object
Dim Cell As Variant

Doc = ThisComponent
Sheet = Doc.Sheets.getByName("Sheet7")

Cell = Sheet.getCellByPosition(0, 0).Value
msgbox("Sheet.getCellByPosition(0, 0).Value = " & Cell)
Cell = Sheet.getCellByPosition(0, 0).String 
msgbox("Sheet.getCellByPosition(0, 0).String = " & Cell)
Cell = Sheet.getCellByPosition(0, 0).Formula 
msgbox("Sheet.getCellByPosition(0, 0).Formula = " & Cell)

End Sub

 実行結果は以下のとおり。




 取得する形式をきちんと指定しないと想定した値が入ってこないのには注意が必要だな。

 それはさておき。
 Value と Formula の結果が理解出来ていないのは問題だな。


Option VBASupport 1 が邪魔である。

 新しいマクロを開くと次の一文が出てきて鬱陶しい。
Option VBASupport 1


 消し方をググってみた。
 やってみた。
 OpenOffice のオプションにある VBA 属性にある Excel 関連にあるチェックボックスをすべてオフにする。


 上の設定を終えてから新しいマクロを開いてみるとすっきりした画面がでてきた。
 やっぱりこうでなくては。

2014年6月24日火曜日

OpenOffice Basic で Calc のセルに数字を入れてみる。

 おっしゃ。
 出来たついでに色々なパターンを試してみた。



Cell = Sheet.getCellByPosition(1, 20)
Cell.Value = 20
Cell = Sheet.getCellByPosition(2, 20)
Cell.Value = "21"
Cell = Sheet.getCellByPosition(3, 20)
Cell.String = 22


 数値をダブルクオーテーションでくくっても入力できた。
 制限はあるようだが文字列をダブルクオーテーションでくくらなくても入力できた。

 さて統一をしておきたいがどうすればいいのやら。

面白そうなサイトを見つけた。

 EXCEL VBAからOOo Basicへの移行について
http://freeopenoffice.jimdo.com/openoffice-org%E3%81%B8%E3%81%AE%E7%A7%BB%E8%A1%8C%E8%A7%A3%E8%AA%AC/

 ちょっと見に行ってくる。

 VBA との比較だった。
 VBA は詳しくないので残念ながら参考にならなかった。

 次に行こう。

MELSECNET/HのリモートI/O局経由のMODBUS(R)通信について

http://fa-faq.mitsubishielectric.co.jp/faq/show/13661  別ネットワークの先にぶら下げるってどういうことだろう。