Excel VBAで、関数は参照渡し(ByRef)にデフォルトでなっているが、その引数を型キャストして呼び出すと変更されない、ということに気付かなくてバグって半日潰した!
かなり昔に作ったExcel VBAの数値計算プログラムの中の関数を別のプログラムで使いたい、と言われその部分だけ抜き出そうとした。
ああ、1時間もあればできるよ、と言ったのに半日以上かかった。どこでハマっていたかというと、、、
昔のプログラムは整数にIntegerを使っていたが、別のプログラムはLongでそのまま使うと
例の「コンパイルエラー:ByRef引数の型が一致しません」がでる。
あ、もちろん最初に
Option Explicit
をつけてますよ、、、というか、数値計算のプログラムなんで意図しない変換を避けるために
これは必須。(fortranで言うところのimplicit none)
で通常動作はこれ。
デフォルトでVBAは参照渡し(ByRef)になっているので、関数内で変数を変換すると呼び出した側も変わる。
これを防ぐには値渡し(ByVal)にすればいいが、今回はByRefで変数が変換されるような仕様にしていた。
で、呼び出し側の変数をLongにしてCIntで型変換したら、、、
あれ?参照渡しなのに変換されてない、、、
というところでハマりました。言われてみれば型が違うのに参照渡しするのは変、、、ならエラーを出してほしかったり。
皆さんもしょーもないところでハマることがあるので
気を付けて。
« かつやで鶏ガパオダブルチキンカツ丼+とん汁(小)をいただく。非常に味が濃い! | トップページ | ax²+bx+c=0の複素解(a,b,c=-25~25)を描くと結構面白い。Pythonで描いてみた。 »
「日記・コラム・つぶやき」カテゴリの記事
- 1980-2023年までノーベル物理学賞を素粒子・宇宙と物性・基礎に分けてグラフ化していた。3年連続物性系なのは1996-1998年以来のようだ。その前は1985-1988年。結構ない感じの受賞。(2023.10.04)
- 今年2023年のノーベル物理学賞、アト秒レーザーパルスについて公式サイトのScientific BackgroundのpdfをそのままMicrosoft Copilot in Windowsで要約してもらった。(2023.10.04)
- Raspberry Pi 5が発表になった。しかしややこしいのは載ってる部品のメーカーがM&Aで名前変わってたりする…Wi-FiチップのBCM43455(CYW43455)はBroadcom→Cypress→Infineon、電源IC(PMIC)はDialog→ルネサス、アンテナはProAnt AB→Abracon。(2023.09.30)
- Windows11のアップデートでMicrosoft Copilot in Windowsプレビューが使えるようになった!何に使えるか…とりあえず反重力(というか反物質の重力)のNature論文を要約して和訳してもらった。Edgeでウェブページを開いて「このウェブページを要約して」だけでOK。(2023.09.29)
- Molexから60GHz帯の非接触通信用のIC(MX60)が発表。STMicroelectronicsの同じ機能のIC(ST60)より後発だけど一回り大きい?MolexってLGの二画面スマホに使われていたKeyssaから技術買ったんだな。STMのICはApple Watchの60.5GHz隠し診断通信に使われているのでコンパチと思った…(2023.09.28)
« かつやで鶏ガパオダブルチキンカツ丼+とん汁(小)をいただく。非常に味が濃い! | トップページ | ax²+bx+c=0の複素解(a,b,c=-25~25)を描くと結構面白い。Pythonで描いてみた。 »
コメント