- LibreOffice5 または 6 Basic (WINDOWS-10 バージョン 1909)
アクティブシート名を取得するユーザー関数を組み込んで
シートにあるセル範囲を名前定義した時に
そのデータをBASIC で取り込むには?
(問題例)
◆シート名 = 「経費2019」「経費2020」「経費2021」・・・
で各シートの X1:Z2に 2行3列のデータがある。
◆アクティブシート名を取得する関数
Function GetSheet() As String
dim document as Object
set document = iif(GetSolarVersion < 60000 ,StarDesktop.CurrentComponent, ThisComponent)
dim oSheet as Object
oSheet = document.CurrentController.Activesheet
GetSheet = oSheet.Name
End Function
◆名前定義の管理ウインドウ
(シート(S)―名前付きの範囲または式(N)―管理(M) で開き
「dttb」と定義した
dttb = GetSheet()&"."&$X$1:$Z$2
上記のように設定して以下のテストプログラム(VRTEST6)の シンングルステップ(F8キー)で進めた
Sub VRTEST6()
dim VR as object
VR = ThisComponent.CurrentController.Activesheet
W = VR.getCellByPosition(30,3)
a = "C_2"
b = "G"
ReferredCells = ThisComponent.NamedRanges.getByName("dttb").getReferredCells() ’・・・(A)
tb = ReferredCells.DataArray
for j = 0 to ubound(tb)
if tb(j)(0) = a then exit for
next
boe = tb(j)(1)
eoe = tb(j)(2)
adrs = b + boe + ":" + b + eoe
W.SetFormula("=" & a)
c = W.String & adrs
End sub
セル範囲 X1:Z2 には 画像(上)=略のように定義されてます。
ステップ(A)の次行まで進めた処で
オブザーバーウインドウに「ReferredCells」と入力し
変数「ReferredCells」を確認すると、
値=Null, 種類=Variant/Object としか,返ってきません。
比較として (A)行の「dttb」の代わりに
正しい名前定義である “dtb” (=$経費2020.$X$1:$Z$2)で定義すると
ReferredCells.DataArrayには、画像(下)=記述 のような
階層のテーブルデータが返ります。
X1="HI-YO"
Y1=596
Z1=685
X2="CREDIT"
Y2=264
Z2=457
X1,X2のデータはそれぞれ文字列です。
どこが、どのように間違いなのでしょうか?、
GetSheetルーチンか?
名前定義の仕方か?
直接の名前定義しか受容されてなく、間接指定はダメなのか?
など
一応、任意セルに「=GetSheet()」 とすると
シート名は 返ります