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で描いてみた。 »
「日記・コラム・つぶやき」カテゴリの記事
- 高周波・RFニュース 2024年12月6日 NGMNが無線パフォーマンス評価フレームワーク発行、5GAAがC-V2Xのロードマップ発行、Marvellの3nm 1.6Tbps PAM4インターコネクト、Nokiaの2.4Tbps光伝送、Silicon Labsの低消費電力モジュール、Xiaomi 14T Pro分解動画(2024.12.06)
- 高周波回路シミュレータQucsStudioがuSimmicsに名称変更し、バージョンも4.8.3から5.8にアップデートされた。Qucsと区別するためだそうだ。また、Pythonの高周波用ライブラリscikit-rfもv1.5.0にバージョンアップされていた(2024.12.04)
- 日経サイエンス2025年1月号の特集 和算再発見の佐藤賢一さんの記事「算聖 関孝和の実像」に出てきた矢高に対する円弧の2乗の近似式をカシオの高精度計算サイトkeisan.casio.jpの自作式として作った。ものすごい精度であることがよくわかる。(2024.12.03)
- MATLAB Onlineで高周波基板設計用のRF PCB Toolboxを使ってみる。Coupled line バンドパスフィルタやratraceカプラが設計できる。モーメント法(MoM)や有限要素法(FEM)でちゃんと計算してくれているようだ。(2024.12.06)
- MATLAB Onlineで高周波用のRF Toolboxを使ってみる。Touchstoneファイルの読み込み、dB表示グラフ、スミスチャートなど簡単にできるし、フィルタ合成やIEEE P370 De-embedding(ZC-2xThru)も使える(MATLABで書かれたものがオリジナル)。(2024.12.05)
« かつやで鶏ガパオダブルチキンカツ丼+とん汁(小)をいただく。非常に味が濃い! | トップページ | ax²+bx+c=0の複素解(a,b,c=-25~25)を描くと結構面白い。Pythonで描いてみた。 »
コメント