毛井さん

安部です。
下記の情報ありがとうございます。

On Tue,  3 Jul 2012 18:24:46 +0900, Hirono Moi <[email protected]> wrote:
> 例えば、以下のVBAを持つEXCElファイルがあるとします。
> 
>       Sub Main()
>           ThisWorkbook.Worksheets("Sheet3")
>       End Sub
> 
> このEXCELファイルをCALCで開き、ods形式で保存し、いったんファイルを
> 閉じます。
> ods形式に保存したファイルをcalcで開いて、このVBAマクロを実行すると、
> 以下のエラーとなります。
>       BASICランタイムエラー
>       '423'
>       Worksheets
> 
> モジュール名「ThisWorkbook」が存在し、コード中の「ThisWorkbook」と
> 衝突することが影響して発生してるようです。
> 
> モジュール「ThisWorkbook」を削除すると、元々の期待する動作:Sheet3を
> 選択します。
LibreOffice 3.5.4 で試したところ上記の振舞いが再現しました。
元の Excel ファイルをそのまま読み込んでマクロを実行するとエラーにならない
ところもポイントですね。

> 
> このモジュール「ThisWorkbook」は、LibreOfficeがVBAマクロを含むEXCEL
> ファイルを読み込むときに、VBAモジュールから自動的に生成しています。
> 
> モジュール「ThisWorkbook」があるから、この423エラーが発生する、、、
> 確かにその通りなのですが。。。
生成される ThisWorkbook モジュールは空っぽでした。
ThisWorkbook という VBA での特別な属性より、こちらの ThisWorkbook を優先
しているのが問題のようです。

> 
> bugzillaに要望として登録しようとしたのですが、そもそもどういう動きを
> することが要望として適切なのか、わかりませんでした。
VBASupport が on の場合は ThisWorkbook を予約語として優先する、あるいは
マクロを含む Excel ファイルを ods にしたときに ThisWorkbook モジュールを
作らない、という動作になればいいかなと思います。

-- Takeshi Abe

> 
> 皆様、どう思われるでしょうか?
> 
> -- 
> Hirono Moi
> 
> -- 
> Unsubscribe instructions: E-mail to [email protected]
> Posting guidelines + more: http://wiki.documentfoundation.org/Netiquette
> List archive: http://listarchives.libreoffice.org/ja/discuss/
> All messages sent to this list will be publicly archived and cannot be deleted
> 

-- 
Unsubscribe instructions: E-mail to [email protected]
Posting guidelines + more: http://wiki.documentfoundation.org/Netiquette
List archive: http://listarchives.libreoffice.org/ja/discuss/
All messages sent to this list will be publicly archived and cannot be deleted

メールによる返信