エクセル(32bit)で使用していた自作関数のマクロを、リブレオフィス(32bit)で使用しようとしていて、壁にあたっています。完全な初心者です。JavaScriptなども書けません。(会社が一斉にリブレオフィスに移行したから)
ネットで何処を探しても該当する情報が得られずヤフー知恵袋でも質問していますが解決に至りません。情報を探しているうちにこのページと出会いました。
3つ悩んでいるのですが、別々のスレッドで質問させていただきます。
ここでは***「セル内の文章を分割する自作関数」***に関する質問です。
以下の自作関数が、エクセルでは問題なく動いていました。
単純に、住所の文字列(区切るべき場所に#が入ってる)を分割します。
これが動かないのです。
'最初の2行はリブレ側で追加ここでの質問に至るまでの経緯も記載します。
Rem Attribute VBA_ModuleType=VBADocumentModule
Option VBASupport 1
Option Explicit
'包丁で住所を切り刻む
Function 住所分割(元々のん As Range, 包丁 As String) As Variant
住所分割 = VBA.Split(元々のん.Value, 包丁)
End Function
***<Step1>***
リブレオフィスではオブジェクトの先頭に、
Rem Attribute VBA_ModuleType=VBAModuleを追記すれば VBAProject が出現してエクセルマクロが動かせるとわかりました。
Option VBASupport 1
ゆえにそうしたのですが、
住所分割 = VBA.Split(元々のん.Value, 包丁)
のところで、
BASIC ランタイムエラー.と出てしまいました。
'12'
VBA
ランタイムがどういうものかよく理解できていないのですが、
バージョンがあわないのかな?と思ったりしていました。
どう書き直しせばよいうのかわからずにヤフー知恵袋で質問しました。
まず最初に、以下の回答が得られました。
Option ExplicitなのにVBAという変数が定義されていないよというエラーです。***<Step2>***
もともとSplitはVBA上の関数でありVBA.という記述は不要でした。
またLibre側はVBA.の記法をサポートしていないようです。
よってVBA.を記述から削ってください。
ヤフー知恵袋での回答に従って以下のように変えました。
Rem Attribute VBA_ModuleType=VBADocumentModuleもしかしたらリブレではエクセルと違って
Option VBASupport 1
Option Explicit
Function 住所分割(元々のん As Range, 包丁 As String) As Variant
住所分割 = Split(元々のん.Value, 包丁)
End Function
2バイトの日本語記述は駄目なのかも?とも思い、
以下も試しました。
Rem Attribute VBA_ModuleType=VBADocumentModule結果的に、このどちらでも以下の警告が出てしまいました。
Option VBASupport 1
Option Explicit
Function JBunkatsu(MotoMoto As Range, Houcyou As String) As Variant
JBunkatsu = Split(MotoMoto.Value, Houcyou)
End Function
BASIC ランタイムエラー.
'91'
オブジェクト変数は設定できていません。
そこで再び、ヤフー知恵袋で質問しました。
以下の返信が得られました。
Functionの中でオブジェクトは使ってないので、となると、これの場合の"Subプロシージャ"とは、
Functionを呼び出したSubプロシージャ側の問題と思われます。
リブレが呼び出すライブラリ(←と呼べば呼べば良いのでしょうか)のことですか?
つまり、
Rem Attribute VBA_ModuleType=VBAModule
Option VBASupport 1
における、
"VBAModule"の中にあるプロシージャ、あるいは
"VBASupport 1"の中にあるプロシージャの事なのでしょうか?
もしそうであれば「互換性の問題で使えない」という解釈をすれば良いのでしょうか?
となれば。上記のコードは、たぶんJavaScriptで書かねばならないのでしょうが。
その場合、自作関数として、どう書けばよいのかがまるでわかりません。
よろしくご指導を願えれば幸いです。