Software_AppBasic

App Script Basic

┌──┐
│目次│
├──┘
☆VBA-EXCEL- vba
◆マクロの記録 vrec
◆Visual Basic Editor veditor
◆マクロの呼び出し vcall
◆VBE vbe
◆PERSONAL.XLS vpersonal
◆入力 vinput
◆MsgBox vmsgbox
◆セルの操作 vcell
◆EXCEL95ダイアローグ vdiag
◆文法 vgra
◆変数宣言 vvar
◆制御構文 vcont
◆エラー回復 verror
☆OpenOffice.org Basic o3b
◆サブルーチン osub
◆関数 ofunc
◆変数 oval
◆定数 oconst
◆モジュール omod
◆ライブラリ olib
◆ダイアローグモジュール odiag
◆Twip(トゥウィップ) otwip
◆組み込み関数 oembfunc
◆演算子 oopr
◆実行制御ステートメント ocont
◆オブジェクトの操作 oobj
◆コメント orem
◆CalcでのOOOBasicの利用 ouse


☆VBA-EXCEL-


◆マクロの記録
│ ツール⇒マクロ⇒新しいマクロの記録⇒(マクロ名は自由に設定可、説明も何でも可)
│ ⇒OKボタンを押す⇒マクロの記録が始まる⇒覚えさせたいことを実際に操作する
│ ⇒終われば⇒ツール⇒マクロ⇒記録の終了


◆Visual Basic Editor
│ ※マクロの記録先を作業中のブックにした場合、標準モジュールの中の「Module1」に記録されている。


◆マクロの呼び出し
│ ①ツール→マクロ→マクロ
│ ②Alt+F8
│ ③VBAツールバーより

※マクロを呼び出すボタンの作成
│ ①VBAツールバーよりコントロールツールボックスを呼び出しボタンなどを配置する。
│ ②配置したボタンを右クリックして「コードの表示」。コードを記述する。

※マクロを呼び出すアイコンの作成
│ ①ツール→ユーザー設定で登録するツールバーを選ぶか、
│ 新たに作りコマンドタブからマクロを選んでマクロを登録する。


◆VBE
│ ①Help
│ VBEのコード上でキーワードを選択し、F1キーによってHELPを呼び出すことができる。
│ ②イミーディエイトウインドウ
│ ^Gでイミーディエイトウインドウを表示する。
│ ⇒このウインドウはVBAのコマンドを即実行してみれる


◆PERSONAL.XLS
│ 自動的に開かれるファイル
│ ユーザ固有でファイルに共用のマクロ定義などを入れて使う。


◆入力
①セルへの単純入力

Sub セルに値を入れる()
    Range("A1").Value=1
    Range("A2").Value=2
End Sub

②インプットボックス

Sub インプットボックス()
Dim x As String
Dim y As Variant
x = Application.InputBox("座標を入力", "座標指定", "座標を入力", 100, 100, HelpFile, abc, 2)
y = Application.InputBox(prompt:="数値を入力", Title:="数値入力", Type:=1)
Range(x) = y
End Sub

xの式:フル入力。(HelpFile・abcは、仮入力)
フル入力の場合は引数の順番を間違えるとエラーになる。

yの式:必要な引数だけ入力した場合
「:=」:必要な引数に情報を入力する場合に使用。順番は関係なし。

⇒エラー処理まで行う場合

Sub test()

Dim x As String
Dim y As Variant

On Error Resume Next
x = ""
x = Application.InputBox(prompt:="座標を入力", Title:="座標指定", Type:=8).Address
If x = "" Then GoTo TheRoutine
'If x = "False" Then GoTo TheRoutine
y = Application.InputBox(prompt:="数値を入力", Title:="数値入力", Type:=1)
If y = "False" Then GoTo TheRoutine

Range(x) = y
MsgBox x & "座標の値は" & y
TheRoutine:
End Sub


◆MsgBox

MsgBox(prompt[, buttons] [, title] [, helpfile, context])

①prompt
複数行を指定する場合は、キャリッジ リターン (Chr(13))、ライン フィード (Chr(10))、またはキャリッジ リターンとライン フィードの組み合わせ (Chr(13) & Chr(10)) を改行する位置に挿入する。

②buttons
以下のグループからひとつ選び、値の和を設定する。

vbOKOnly
vbOKCancel
vbAbortRetryIgnore
vbYesNoCancel
vbYesNo
vbRetryCancel

vbCritical
vbQuestion
vbExclammation
vbInformation

vbDefaultButton1
vbDefaultButton2
vbDefaultButton3
vbDefaultButton4

vbApplicationModal
vbSystemModal

vbMsgBoxHelpButton
vbMsgBoxSetForeground
vbMsgBoxRight
vbMsgBoxRtlReading

③戻り値
vbOK 1 [OK]
vbCancel 2 [キャンセル]
vbAbort 3 [中止]
vbRetry 4 [再試行]
vbIgnore 5 [無視]
vbYes 6 [はい]
vbNo 7 [いいえ]


◆セルの操作
※Cells表記とRange表記がある。
│ Cells(3,2).select
│ Range(“B3”).Select
→どちらもB3セルを選択する
→ForループなどではCells表記の方が扱いやすい。

①セルの値の参照
│ Cells(1,1).Value
│ Worksheets(“Sheet2”).Cells(1,1).Value

②セルへの値の代入
│ Cells(1,1).Value = 1

③選択されているセル全てに同様な操作を施す
例)

For Each c In ActiveWindow.RangeSelection.Cells
  If Abs(c.Value) < a_lim Then c.Value = 0
Next

Cells(i,1).Value = xxx
Worksheets("Page1").Cells(i, j).Value

ActiveCell.FormulaR1C1 = 1
ActiveCell.FormulaR1C1 = "=TIMEVALUE(RC[-1])"

ActiveCell.Offset(0,-4).Range("A1").Value=xxx

For Each c In ActiveCell.CurrentRegion.Cells
  C.Value = xxx
Next

For Each myObject In Range("MYC")
  myObject.Value = xxx
Next


◆EXCEL95ダイアローグ
│ シートタブを右クリックして挿入
│ EXCEL95ダイアローグを選択することでダイアローグシートが作られる。

①ドロップBOX
コントロールの書式設定よりコントロールの入力範囲を決定する。
│ 例)Sheet2のA1からA2にメニューItemリストをおく
│ Sheet2!$A$1:$A$4
※呼び出し
│ If DialogSheets(“Dialog1”).Show Then
│  a = DialogSheets(“Dialog1”.DropDowns(“ドロップ 4”).ListIndex
│ End If
「ドロップ 4」はダイアローグシートの名前BOXで定義されている名前。ListIndexにより、何番目のItemが選択されたかがaに代入される。


◆文法

①継続行
文末に_を入力。


◆変数宣言

Dim 変数名 As 変数型

①バイト型 (Byte)
│ 0 ~ 255
②ブール型 (Boolean)(2バイト)
│  真 (True) または偽 (False)
③整数型 (Integer)
│ -32,768 ~ 32,767
④長整数型 (Long)
│ -2,147,483,648 ~ 2,147,483,647
⑤単精度浮動小数点数型 (Single)
│ -3.402823E38 ~ -1.401298E-45 (負の値)。
│ 1.401298E-45 ~ 3.402823E38 (正の値)。
⑥倍精度浮動小数点数型 (Double)
│ -1.79769313486231E308 ~ -4.94065645841247E-324 (負の値)。
│ 4.94065645841247E-324 ~ 1.79769313486232E308 (正の値)。
⑦通貨型 (Currency)
│ -922,337,203,685,477.5808 ~ 922,337,203,685,477.5807
⑧10 進型 (Decimal)
│ -79,228,162,514,264,337,593,543,950,335 ~ 79,228,162,514,264,337,593,543,950,335
│  小数点以下 28 桁の数値の場合、-7.9228162514264337593543950335 ~ 7.9228162514264337593543950335 の範囲の値
│  絶対値の最小値は 0 を除いた場合、0.0000000000000000000000000001
⑨日付型 (Date)
│ 西暦 100 年 1 月 1 日~西暦 9999 年 12 月 31 日
⑩オブジェクト型 (Object)
│  オブジェクトを参照するデータ型
⑪文字列型 (String) (可変長)
│ 最大2GB
⑫文字列型 (固定長)
│ 1 ~ 2GB
⑬バリアント型 (Variant)
│ 倍精度浮動小数点数型もしくは可変長の文字列型
⑭ユーザー定義型
│ それぞれの要素の範囲はそのデータ型の範囲と同じ。


◆制御構文

①if

If condition1 Then
    「実行1」
  ElseIf condition2 Then
    「実行2」
  Else
    「実行n」
  End If


◆エラー回復

①On Error GoTo line
│ エラーが発生したら、line: の後の命令を実行。

②On Error Resume Next
│ 実行時エラーが発生してもプログラムを中断しない
│ エラーが発生したステートメントの次のステートメントから実行

③On Error GoTo 0
│ 現在のプロシージャに含まれる使用可能なエラー処理ルーチンを無効化

☆OpenOffice.org Basic

コードは、サブルーチンおよび関数からなる。


◆サブルーチン
│ サブルーチンにはパラメータとして引数を渡せる
│ 呼び出し元のサブルーチンや関数に戻り値を返せない。
│ ⇒関数は戻り値を戻せる

_◇サブルーチン定義

SUB SubName(Parameter1 As Type, Parameter2 As Type,...)
    Program code
END SUB

_◇呼び出し
SubName(Value1, Value2,…)

※完全修飾名
│ Library. Module. Macro()

※引数は通常参照渡し
※値渡しにするためには、「ByVal」キーワードをパラメータの直前に指定。
│ SubName(ByVal Parameter)


◆関数
│ 基本的な機能はサブルーチンと同じだが戻り値を返せる

_◇関数定義

FUNCTION FunctionName(Parameter1 As Type, Parameter2 As Type,...)As Type
    Program code
    FunctionName=Result
End Function

_◇呼び出し
Variable=FunctionName(Parameter1, Parameter2,…)


◆変数

_◇大域変数
│ モジュール内のすべてのサブルーチンや関数より前に記述する

※スコープ
DIM GLOBAL VarName As TYPENAME
│ OpenOffice.org セッションの終了時まで有効
DIM PUBLIC VarName As TYPENAME
│ すべてのモジュールで有効
DIM PRIVATE VarName As TYPENAME
│ 該当モジュールの内部だけで有効
DIM VarName As TYPENAME
│ 該当モジュールの内部だけで有効

_◇局所変数
│ 個々のサブルーチンや関数の中で宣言した変数は、該当するサブルーチンや関数の内部でのみ使用できる

※スコープ
DIM STATIC VarName As TYPENAME
│ ローカルだがスタティックな変数

_◇命名規則
│ 最大255文字。英文字先頭英数字とアンダースコア。
│ 大文字小文字の区別なし。
│ []で囲うことでのみスペースキャラクタを変数名に含められる。

_◇変数宣言
│ Dimステートメント。型宣言が省略された場合はデフォルトで単精度型。

Dim a As String
Dim b As Integer
Dim c As Boolean

_◇変数型
①数値
│ 整数
│  変数名% もしくは as Integer. 16bit.
│ ロング整数
│  変数名& もしくは as Long. 32bit.
│ 単精度
│  変数名! もしくは as Single. 32bit.
│ 倍精度
│  変数名# もしくは as Double. 64bit.
│ 通貨
│  変数名@ もしくは as Currency. 64bit. 整数15,小数4の固定小数
②文字列
│ 変数名$ もしくは as String 最大64KバイトのUnicode文字列
③ブール型
│ as Boolean
│ TRUE, FALSE(0)
│ ※0はFALSE,他はTRUE
④オブジェクト型
│ テーブルやドキュメントなど、各種のオプジェクト

_◇配列
│ Dim 配列名(最大インデックス)
│ ※インデックスは0から始まるので、最大インデックス+1個確保される。
│ Dim 配列名(最小インデックス to 最大インデックス)
│ ※この形式の場合、負のインデックスも使える。


◆定数
│ CONST 定数名=式


◆モジュール
│ SUB や FUNCTION を個別にグループ化したもの。
│ 変数宣言部も含む。最大64KBまで。
│ ※モジュールを新規作成すると、自動的に「Main」という名前のプロシージャが作成される。


◆ライブラリ
│ モジュールを分類して管理するためのツール。
│ ドキュメントやテンプレートに添付できる。
│ 1ライブラリには最大16000モジュールを格納できる。

_◇ライブラリを追加するオブジェクト
①soffice
│ ライブラリの登録先はOpenOffice.orgアプリケーションとなり全てのドキュメントで利用できる。
②ドキュメント
│ 単独のドキュメント内でのみ使用できる。
※デフォルトライブラリ。。。Standard


◆ダイアローグモジュール
│ 1つのダイアログボックスの構造、プロパティ、イベントを、単一のモジュールとして格納したもの。


◆Twip(トゥウィップ)
│ 画面上の表示要素のサイズと位置を指定するための単位。
│ 1/1440 インチ、1/20 ポイント、1 センチは約 567 twip。


◆組み込み関数

_◇表示関数
│ MsgBox
│ Print
│  ダイアログBOXを作り、その中にプリントする。
│  ;でバッファし、;の無いプリント文で一気に表示する。
_◇ファイル
│ Open
│ Close
│ FreeFile
│ Reset
_◇日付時刻関数
_◇エラー処理関数
_◇数値関数
_◇変換関数
_◇文字列関数
_◇環境、外部アプリ制御など


◆演算子

_◇論理
│ And
│ Eqv
│ Imp
│ Not
│ Or
│ Xor

_◇算術
│ -
│ *
│ +
│ /
│ ^ べき乗
│ Mod

_◇比較演算子
│ =
│ <
│ >
│ <=
│ >=
│ <>


◆実行制御ステートメント

_◇If

If condition=true 
    Then Statement block 
    [ElseIf condition=true Then] Statement block 
    [Else] Statement block
End If

_◇select

Select Case condition 
    Case expression Statement Block
    [Case expression2 Statement Block]
    [Case Else] Statement Block
End Select

_◇IIf
IIf (Expression, ExpressionTrue, ExpressionFalse)
│ 評価論理値に基づいて、選択肢の 1 つを結果として返す

_◇Doループ

Do [{While | Until} condition = True]
    ステートメントブロック
    [Exit Do]
    ステートメントブロック
Loop

Do
    ステートメントブロック
    [Exit Do]
    ステートメントブロック
Loop [{While | Until} condition = True]

_◇Forループ

For counter=start To end [Step step]
    ステートメントブロック
    [Exit For]
    ステートメントブロック
Next [counter]

_◇Whileループ

While Condition
    [Statement]
Wend

│ ※WhileはExitできず、Gotoもエラーを引き起こす可能性ある

_◇Gosub
│ GoSubは、ラベルで指定するローカルサブルーチンを、サブルーチンや関数内で呼び出す。

    ラベル:
        ステートメントブロック
    return

_◇GoTo
│ ブロック内でラベルにジャンプする。

_◇On … GoSub, On .. Goto
ブロック内で、数値によりラベルに分岐する。数値0なら実行されず、数値1から255で各ラベル。

_◇Call
│ サブルーチン、関数も呼び出せるが、Declare宣言されたDLL内のルーチンも呼び出せる。

_◇Stop
│ プログラムの実行を中止する


◆オブジェクトの操作

_◇デフォルトオブジェクト

With Object
    Statement block
End With

│ ブロック内で明示されないオブジェクトは、With宣言されたオブジェクトであるとみなす。


◆コメント
Rem
もしくは
シングルクオート


◆CalcでのOOOBasicの利用

_◇関数としての呼び出し
│ Basic-IDE で Function VOL(a, b, c) として定義した関数は、
│ セル内で =VOL(a; b; c) として他の組み込み関数と同じ方法で使用できる。

_◇マクロとしての呼び出し

_◇Sample: Cellの参照、書き換え

Sub Main
    Dim Doc As Object
    Dim Sheet As Object
    Dim CellRange As Object
    Dim Cell As Object
    Dim Dat As String

    Doc = StarDesktop.CurrentComponent
    Sheet = Doc.Sheets.getByName("TEMP")
    CellRange = Sheet.getCellRangeByName("A1:D4")
    Cell = CellRange.GetCellByPosition(0, 0)
    Dat = Cell.getFormula()
    Cell.setValue(1.234567)
    Print Dat
End Sub

※セルの参照
│ =表.A1
※絶対参照は$がつく

※相対参照、絶対参照の切り替えキー。。。Shift+F4

_◇カーソル移動、CELL入力

sub Main
    enterCell("AHO")
    MD(2)
    MR(2)
end sub

sub enterCell(a as String)
rem -----------------------
rem define variables
dim document   as object
dim dispatcher as object
rem -----------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem -----------------------
dim args1(0) as new com.sun.star.beans.PropertyValueargs1(0).Name = "StringName"
args1(0).Value = a
dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args1())
rem -----------------------
dispatcher.executeDispatch(document, ".uno:JumpToNextCell", "", 0, Array())
end sub

sub MD(a as Integer)
rem -----------------------
rem define variables
dim document   as object
dim dispatcher as object
rem -----------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem -----------------------
dim args1(1) as new com.sun.star.beans.PropertyValueargs1(0).Name = "By"
args1(0).Value = a
args1(1).Name = "Sel"
args1(1).Value = false
dispatcher.executeDispatch(document, ".uno:GoDown", "", 0, args1())
end sub

sub MR(a as Integer)
rem -----------------------
rem define variables
dim document   as object
dim dispatcher as object
rem -----------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem -----------------------
dim args1(1) as new com.sun.star.beans.PropertyValueargs1(0).Name = "By"
args1(0).Value = a
args1(1).Name = "Sel"
args1(1).Value = false
dispatcher.executeDispatch(document, ".uno:GoRight", "", 0, args1())
end sub