質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

1回答

10132閲覧

VBAで定数値が読み込めない

kasotama

総合スコア35

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2018/01/23 01:12

元々は動いていたExcelVBAのソースに修正を加えたところ、突然Constで定義した定数値が読み込めずにエラーとなってしまいました。

ネットで調べてみたところ他にも何人か同じようになっている方がいたようで、その人たちに習って
Constの定数の値を変更→保存→変更箇所を戻す→保存
としたところ、一応その現象は発生しなくなりました。

しかし根本的な原因がわからずに困っています。
修正を行ったところは本当に全くその定数とは関係のないところです。
修正箇所でその定数を使用したりもしていません。

もしかしたらVBAの不具合なのでは?とも思えてしまいます。
どなたか原因がわかる方がいたらお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

コンパイルエラーや、DLL・・・等のエラーはたまに起こりますね。。。

投稿2018/01/23 01:27

ExcelVBAer

総合スコア1175

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ExcelVBAer

2018/01/23 01:30

補足ですが、上記の不明な状況になった時は、該当の関数があるモジュール内で、以下の手順で正しくコンパイルされるようになります。 Ctrl+A(全選択)→Ctrl+X(切り取り)→コンパイル→Ctrl+Z(元に戻す)→コンパイル
kasotama

2018/01/23 01:35

たまに起こるとありますが、同じソースでも起こるときと起こらないときがあるということでしょうか? SVNで更新を管理しているのですが、このConstが読みこめないリビジョンのファイルを使うと必ずコンパイルエラーになります。 そのため何か明確な原因があるのではないか?と思ったのですが…
ExcelVBAer

2018/01/23 01:49

同じソースでも、起こる時と起こらない時があります。 上記状態は、恐らく、VBEの内部でコンパイルが正常にできていない状態なのだと推測しています。 「Constが読み込めないリビジョンのファイル」というのは、 ExcelのBook、ということでしょうか? 先述の不明なエラー状態で、 コンパイルエラーはBookを開き直すと、コンパイルが通るようになった気がしますが、 処理中に「DLL・・・」と出るエラーは、先述の対応等をしないと再現し続けたと思います。 Constをあまり使用しないので、Constが読み込めない状態というのに遭遇した事がないのですが、後学のために詳細(どんなConstで、どういうタイミングで、どんなエラーメッセージが出るか)をご教授頂けませんでしょうか?
sousuke

2018/01/23 01:58

横からすみません。Accessだとdecompileオプションでコンパイル前に持っていけるんですけどExcelってコマンドで<Excelファイルパス>/decompileはできないんですか?
kasotama

2018/01/23 02:12

>ExcelのBook、ということでしょうか? はい、そのとおりです。 ボタンを押すとファイルを作成するという機能があり、ファイルを作成するにあたっていくつかの関数を使用しています。 それらの関数の戻り値がConstで定義してあります。 (例: '定数 '正常 Private Const NORMAL = 0 '異常 Private Const ERROR = 1 みたいなかんじです) エラーが出るタイミングは 関数の戻り値にConstの値を設定しているところです。 (例: Public Function FuncA() As Integer 〜処理〜 If 処理失敗 Then FuncA = ERROR End If ) のFuncA = ERRORのところでコンパイルエラーが起こります。 エラーメッセージは コンパイルエラー: 定数式が必要です。 です。
sousuke

2018/01/23 02:14

Errorって関数になかったでしたっけ?定数の名前が少し良くないと思います…
kasotama

2018/01/23 02:19

>Errorって関数になかったでしたっけ?定数の名前が少し良くないと思います… すみません。 仕事で使うものなので本物のは貼らないほうがいいかと思い適当な定数名をここではつけてしまいました。 実際のソースではもう少しちゃんとした名前なのでその辺も原因ではないと思われます。
ExcelVBAer

2018/01/23 02:20 編集

余談ながら、VBEのコンパイルは信用度が低いです。。。 というのも、コードが多い時?等に、明らかにエラーになるべき箇所が素通りされて、実行時にエラーになるという。。。orz
sousuke

2018/01/23 02:24

実際は違うんならいいんじゃないですかね。「ソースに修正を加えたところ」がどういう行為なのかわかりませんがモジュールを追加した場合、モジュール名が他の名前と重なると意味不明なエラーになったと思います。ファイル名と同じモジュール名もダメです。 あとはデコンパイルしか無いと思います。それでもダメならファイルを複製してモジュールを一つずつ消していくといいと思います。
kasotama

2018/01/23 02:35

>余談ながら、VBEのコンパイルは信用度が低いです。 そうなんですね。。。VBAって使ったことなかったので知らなかったです。 でもエラーとなった原因をお客さんに説明しなければいけないので、それでは乗り越えられなさそうです笑 コンパイルエラーが稀によく起こるなど何処かで明示的に記載してあったりはしないですかね?もし知ったいたら教えて下さい!
kasotama

2018/01/23 02:39

>sousukeさん モジュール名が重なったりということはありません。。 コンパイルエラーになるソースがあるモジュールを全選択→切り取り→貼り付け→保存 とすると今度はコンパイルエラーが起こらずに正常に動作しますので一応事態の解決はできています。 が、原因を明確にする必要があり困窮してます。 他にも何か情報があればぜひぜひ教えてください!
sousuke

2018/01/23 02:50

原因は究明は正直言って時間のリソース的な観点で無意味だと思います。対症療法的なことだけでいいと思います。Accessでもさっきまで動いていたのに突然「ファイルがありません」とか言ってきます。 「VBEのコンパイルは信用度が低い」というのはそういうことです。割り切って定期的にデコンパイル、バックアップ等するしかないと思っています。そもそもですが自分はコンパイルしないほうがいいと思っています。オプションの順次コンパイルを外したいくらいです。中間コードを生み出して実行が多少早くなる程度の話だったと認識しています。 最後にExcelVBAer氏、横から色々口出してすみませんでしたm(_ _;)m
ExcelVBAer

2018/01/23 04:01

いえいえ。貴重な意見をありがとうございました!!(^^)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問