アプリ版:「スタンプのみでお礼する」機能のリリースについて

VBAでコードを記述しプロジェクトにはパスワードをかけております。
マクロ有効にてシート上で作業をし、作業終了後にExcelを閉じるとVBAプロジェクトのパスワードを
要求する画面が表示されてしまいます。ちなみにバグ等でエラーが発生しているわけではありません。

幽霊プロジェクトの怪
http://hp.vector.co.jp/authors/VA016119/kitan01. …
PRB: Excel が終了した後、 VBA プロジェクトのパスワード プロンプトが表示されます。
http://support.microsoft.com/default.aspx?scid=k …


上記サイト様を参照しましたが、オブジェクト変数をPublicで使用したりはしてませんし、DBアクセスを
している部分はあるもののPrivate変数を使用し念のためコードの最後でNothingをセットしています。

どなたか同様の現象をご存知の方、または解決したよ!という方いらっしゃいましたらご教授願います。

A 回答 (4件)

DBアクセスの内容が不明な点と、この現象に出会ったことが無いので全く自信なしですが、、、



DB接続を行うプロシージャーの終了前にコネクションをちゃんと閉じていますか?
例えば、

Dim DB as Object

'ADO接続
Set DB = CreateObject("ADODB.Connection")
DB.Open (strConnect)

(略)

DB.Close '<-- ココ
Set DB = Nothing

また、エラーが発生した場合、例外処理でコネクションを閉じる前にプロシージャーが終了、オブジェクト変数が解放されないようになってませんか?


あと、大丈夫だと思いますが、

>オブジェクト変数をPublicで使用したりはしてませんし

Dim DB as Object

Private Sub DB_Connection()
(略)
End Sub

だとオブジェクト変数DBはモジュールレベル変数であり、各プロシージャーが終了した後もメモリ上に確保されたままです。

上記内容は間違ってるかもしれません。ご参考まで。
詳しい方フォローお願いしますm(_ _)m
    • good
    • 1
この回答へのお礼

回答ありがとうございます。
DB関連についてはWS等も含めて全てプロシージャを抜ける前にClose、Nothingしてます。
また、モジュールレベルでの変数宣言はありませんし、例外処理での抜けもないですね。
私もやっぱりその辺が怪しいと思って何度も見直したんですが該当箇所が見つからずです・・・。

お礼日時:2005/03/16 13:14

>一度でもフォームを開くと発生してしまいます。


>Win2000+Office2000で最新にアップデートした状態だとこの現象は発生せず...

という事からの推測ですが、

・Form_Initialize イベントで処理してる内容
・フォーム内に特殊なOCXコントロールを配置している

のいずれかに問題があるように思います。
何だか後者のような気がするのですが、心辺りは?

、、カレンダーコントロールとか。
    • good
    • 0
この回答へのお礼

Form_Initializeに記入はありません。
使用コントロールはテキストボックス、ラベル、チェックボックス、
コマンドボタン、イメージボックスです。

というか、大変申し訳ないのですが自己解決しました・・・。

結果から言いますとブックが壊れていた(?)ようです。
ブックを新規作成し、シート、フォーム、モジュールを既存ブックから
単純にコピーして複製しただけで問題の現象が発生しなくなりました。
OS、Officeのバージョンを戻して試してみましたが特に問題なく動作して
ますので、ブックのみが原因だったと思われます。
こんな事もあるのですね・・・。

ブックが壊れたという表現が正しいのかどうかは疑問が残るところですが
とりあえずは解決とさせていただきます。

色々とご助言いただきありがとうございました。

お礼日時:2005/03/16 17:06

#1です。

そうですか、、

では、#2の方のアドバイスどおり、もしDB接続について参照設定があればそれを実行時バインド(CreateObject)に変更してみてはどうでしょうか?

ex) ADO接続の場合
Dim DB as Object
Set DB = CreateObject("ADODB.Connection")

それから、オブジェクト変数をウォッチ式に追加し、ステップインでトレースしてプロシージャの終了時にちゃんと解放されているかチェックしてみて下さい。
    • good
    • 0
この回答へのお礼

参照設定では接続してませんしウォッチの確認でも全てNothingになってます。
問題の現象なのですが、単純に

Excel(ブック)を開く
 →ボタンクリックでフォーム表示
  →何もせずにフォーム閉じる
   →Excel閉じる

の手順だけでも発生してしまいます。
Excelを開いてすぐ閉じただけでは発生しません。一度でもフォームを開くと発生してしまいます。
これだけの操作だとDB接続を行うプロシージャは通っていないのでDBオブジェクト関連の
解放モレということはないと思っているのですが・・・どこかにモレがあるんですかね。

で、さらに謎を深めるようなのですが、Win2000+Office2000で最新にアップデートした状態だと
この現象は発生せず、Officeが未アップデート状態、またはWinXPだと発生するのです。

試しに、単純に上記操作だけを行うブックを新規作成してみましたが、問題の現象は発生しませんでした。
これを雛形に少しずつコードをコピーしていって、どこで発生するか探るしかないかな・・。

お手数お掛けして申し訳ないです。
もし何かもっと思い当たる部分があればご回答いただけると有難いです。

お礼日時:2005/03/16 15:20

>Private変数を使用し念のためコードの最後でNothingをセットしています。


Microsoft側の文章には、Dll の設計について触れていますよね。そうなると、自家製でなければやっかいです。

「幽霊プロジェクトの怪」では、特に、Public 変数が問題だとは言っていないのじゃないかしらね。ただ、私個人は、Object 型は、グローバル化はしても、Public なんてしないような気がします。メモリ喰いで、動作を鈍らせるだけだからです。

要するに、Object型の変数の開放で、変数の開放を残したまま終了すると、パスワード・ロックしていた場合は、パスワードを要求してくるっていうことではないかしら?

そうしたら、とりあえず、DB(参照設定だったら、CreateObjectに変えてみるとか?)を含めて、Object型の変数の開放していない所を探してみたらいかがですか?
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
言い回しはどうあれ参照サイトについてはおっしゃる通り、要はObject型の解放モレということですね。
その点については真っ先にチェックしたんですが該当箇所見つからずです・・・。

お礼日時:2005/03/16 13:27

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!