2022-01-31 VBA 条件付きコンパイル

3
リンク docs.microsoft.com Compiler constants (VBA) Office VBA reference topic 1 user
リンク docs.microsoft.com If...Then...Else ディレクティブ Office VBA reference topic
リンク docs.microsoft.com コンパイラ定数 (VBA) Office VBA reference topic 1 user
リンク えくせるちゅんちゅん VBAでパブリックなコンパイラ定数を定義して条件付きコンパイル制御を行う - えくせるちゅんちゅん VBAには、環境に応じてソースコードの使用する箇所を変える「条件付きコンパイル」という仕組みがある。 この記事では、独自のコンパイラ定数を定義し全てのモジュールのコンパイルを一括で制御する方法を解説する。 よく見かけるWindowsAPIのコンパイル制御 コンパイラ定数とは ディレクティブとは #ConstにPublicを書けない問題 パブリックなコンパイラ定数の作り方 余談: If VBA7 Then は省略表記かもしれない 複数のコンパイラ定数の書き方 条件付きコンパイル引数の限界 まとめ:コンパイラ 1 user
リンク docs.microsoft.com Project Properties dialog box Office VBA reference topic
ちゅん🐤 @KotorinChunChun

#VBA#Const は、プライベートモジュールレベルなので、 プロジェクト全体の #if #elseif に影響させることができない。 グローバルで制御したいなら、プロジェクトのプロパティから、条件付きコンパイル引数使うと良い。 なお、0=Falseなので、0以外がTrueに相当。 コロンで複数指定できる。 twitter.com/hoehoe1234/sta… pic.twitter.com/Wgb0ASsUxA

2020-12-15 01:42:43
ほえほえ@DX塾(パワクM式手組み推し) @hoehoe1234

#Const はそのモジュール内だけか。。。。。 そうか、そうだよな。。。。ショートカットもないのでしんどいな・・・・そうか、そうだよな・・・・

2020-12-15 01:22:26
拡大
ちゅん🐤 @KotorinChunChun

私がよく使う 条件付きコンパイル は ・EXCEL_MODE ・・・ エクセル用VBAであることを指定 ・ACCESS_MODE ・・・ アクセス用VBA ・DEBUG_MODE ・・・ トレースログ・メッセの出力をON ・SPECIAL_MODE ・・・ 隠し機能の有効化 など。

2020-12-15 01:47:28
ちゅん🐤 @KotorinChunChun

需要ないと思うけど、唐突に書きたくなったので一気に書いてみたよ!!! 20220130 VBAでパブリックなコンパイラ定数を宣言して条件付きコンパイル制御を行う #はてなブログ excel-chunchun.com/entry/20220130…

2022-01-30 17:24:20
ちゅん🐤 @KotorinChunChun

読み返してて気がついたのだけど、コンパイラ定数って「宣言」ではなく「定義」が正しいのではないだろうか? 以前から、この2つの言葉の使い分けが上手く出来てなくて、本文でもごっちゃになってる気がする。 定数は定義するものじゃないだろうか・・・ twitter.com/KotorinChunChu…

2022-01-30 23:39:57
ちゅん🐤 @KotorinChunChun

「変数の宣言を書く」は自然だけど 「定数の定義を書く」は違和感がある とりあえず「定数を定義する」に修正してみた。

2022-01-31 01:30:30
風柳 @furyutei

@KotorinChunChun 自分も変数は『宣言』、定数は『定義』の方が自然な気がしますけど、 docs.microsoft.com/en-us/office/v… でも > Declaring constants になっていますし…特にこだわらなくてよいのかも知れません

2022-01-31 12:08:11
風柳 @furyutei

@KotorinChunChun 条件付きコンパイル中でもTrueは-1っぽい なので、VBA7は内部的にTrueではなく1になっているのでは?疑惑が pic.twitter.com/K2GcU2yA9y

2022-01-31 12:28:15
拡大
ほえほえ@スプシマン @hoehoe1234

@KotorinChunChun これ、C++ですが、だいたいこのような違いであっているとおもいます。宣言は識別子の導入。実態はなくコンパイラが利用。定義はコンパイル後に具体的なメモリ領域に展開されるもの。みたいなイメージです。 so-zou.jp/software/tech/…

2022-01-31 12:29:34
ほえほえ@スプシマン @hoehoe1234

@KotorinChunChun では dim a as Longはどうなるかといえば、宣言と定義何だと思います。もとのディレクティブですが、これはメモリには影響しないのでディレクティブは宣言だと考えています。でも、実際はどうでもいいと思います。語感のよいほうを選びますw。

2022-01-31 12:31:54
風柳 @furyutei

@KotorinChunChun MSのドキュメントでも docs.microsoft.com/en-us/office/v… ではdefine使っているのに docs.microsoft.com/en-us/office/v… では > Lists the constant declarations となっていて統一されていませんしねぇ…

2022-01-31 12:35:52
風柳 @furyutei

@KotorinChunChun ついでに「条件付きコンパイル引数(D)」 docs.microsoft.com/en-us/office/v… だと、 ・複数の定数定義は「:」で区切る ・True/Falseといった値は使えないので-1/0と直値で指定 みたいですね

2022-01-31 12:38:56
ちゅん🐤 @KotorinChunChun

@furyutei そうなんです。 コンパイラ定数の記事に書いてあるTrue/Falseは、内部的に1/0で、ソースコードで書いたTrue/Falseは内部的に-1/0が格納されて、#if 文は0か0以外かで判断するから、1だろうが-1だろうが真として動いてるんですw

2022-01-31 13:37:52
風柳 @furyutei

@KotorinChunChun docs.microsoft.com/en-us/office/v… でValueにTrue/Falseって書いてあるの、絶対混乱の元ですよね…

2022-01-31 18:24:43
風柳 @furyutei

@KotorinChunChun あと、 docs.microsoft.com/ja-jp/office/v… とか見ると未定義のコンパイラ定数はEmptyとして評価されると書いてあるけれど、実際はちゅんさんの記事中あるように0として評価されているみたいなのがなんともあれですね… pic.twitter.com/bNUg7rEDEN

2022-01-31 21:17:44
拡大