別モジュールのSubプロシージャ呼び出し方法
を示す。
■条件
・「Module2」のSubプロシージャを
「Module1」のSubプロシージャに呼び出し実行する。
■LibreOffice-Module1-呼び出し側のマクロ
Option VBASupport 1 'ω' [Module1]
Sub sample06b() 'ω'15列目「新方式」フィルタ抽出
Worksheets("Sheet1").Activate
ActiveSheet.Cells(1, 1).AutoFilter Field:=15, Criteria1:=Array("新方式"), Operator:=xlFilterValues
フィルタ削除01
End Sub
上記7行目「フィルタ削除01」が呼び出し側の記述方法。Subプロシージャ名「フィルタ削除01()」から「()」をとる。
今回はモジュールを分けたが、
同一モジュール内でも同様の方法で呼び出し可能。
■LibreOffice-Module2-呼び出される側のマクロ
Option VBASupport 1 'ω' [Module2]
Sub フィルタ削除01()
Dim SN1 As String 'ω'以下フィルタ非該当行削除
SN1 = ActiveSheet.Name
Cells.Select
Worksheets(SN1).Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible).Copy
Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = "削除01"
Dim DM1 as object
Dim DP1 as object
DM1 = ThisComponent.CurrentController.Frame
DP1 = createUnoService("com.sun.star.frame.DispatchHelper")
DP1.executeDispatch(DM1, ".uno:Paste", "", 0, Array())
Worksheets(SN1).AutoFilterMode = False
Worksheets(SN1).Rows.Hidden = False
Sheets(SN1).Cells.Clear
Worksheets("削除01").Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible).Copy
Worksheets(SN1).Range("A1").PasteSpecial Paste:=xlPasteAll
Sheets("削除01").Delete
End Sub
上記「Module1」「Module2」は過去記事のマクロ■LibreOffice-VBA-オートフィルタで抽出した行以外を削除するマクロ
を分割したもので、
「Module1」の「sample06b」マクロを
実行すると同じ結果が得られる。
■Subプロシージャ呼び出し-効果的な使用方法
同じ動作プログラムを多用する場合。共通のSubプロシージャをModuleにまとめて
使用時に呼び出す。
上記例に出したマクロは「オートフィルタで抽出」
以下は同じなので、
「フィルタ削除01」のSubプロシージャでわけて
「Module2」に格納した。
同じコードを何度も記述する必要がなく、
「Module1」がよみやすくなる。(可読性向上)
■補足-エクセルVBA-別モジュールのSubプロシージャ呼び出し方法
エクセルVBAも方法は同じ。■あとがき
今回はブラックボックスにプログラムを効率的に詰め込む方法の話。扱うプログラムのコードは少ない方がよみやすいので、
同じ処理の部分は使いまわす。
【全体の流れ】
以前の工程については過去記事を参照。
【過去記事】
■LibreOfficeでエクセルVBAマクロを実行する方法
※実際にマクロを動かす準備。
■LibreOfficeマクロ-日付が名前に含まれるxlsxファイルをひらく
※【開始】xlsxファイルをひらく。
■LibreOffice-VBA-Sheet表示倍率指定⇒ファイル名変更保存
※【終了】xlsxファイルを保存する。
■LibreOffice-VBA-アクティブシート以外のシートを全部削除する
※【処理】シート全部削除。
■LibreOffice-VBA-オートフィルタで抽出した行以外を削除するマクロ
※【処理】オートフィルタ該当行以外のデータ削除。
■LibreOffice-VBA-別モジュールのSubプロシージャ呼び出し方法
※【プログラム記述方法】この記事。Subプロシージャ呼び出し。
以上。