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をセットしています。
どなたか同様の現象をご存知の方、または解決したよ!という方いらっしゃいましたらご教授願います。
No.1ベストアンサー
- 回答日時:
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
回答ありがとうございます。
DB関連についてはWS等も含めて全てプロシージャを抜ける前にClose、Nothingしてます。
また、モジュールレベルでの変数宣言はありませんし、例外処理での抜けもないですね。
私もやっぱりその辺が怪しいと思って何度も見直したんですが該当箇所が見つからずです・・・。
No.4
- 回答日時:
>一度でもフォームを開くと発生してしまいます。
>Win2000+Office2000で最新にアップデートした状態だとこの現象は発生せず...
という事からの推測ですが、
・Form_Initialize イベントで処理してる内容
・フォーム内に特殊なOCXコントロールを配置している
のいずれかに問題があるように思います。
何だか後者のような気がするのですが、心辺りは?
、、カレンダーコントロールとか。
Form_Initializeに記入はありません。
使用コントロールはテキストボックス、ラベル、チェックボックス、
コマンドボタン、イメージボックスです。
というか、大変申し訳ないのですが自己解決しました・・・。
結果から言いますとブックが壊れていた(?)ようです。
ブックを新規作成し、シート、フォーム、モジュールを既存ブックから
単純にコピーして複製しただけで問題の現象が発生しなくなりました。
OS、Officeのバージョンを戻して試してみましたが特に問題なく動作して
ますので、ブックのみが原因だったと思われます。
こんな事もあるのですね・・・。
ブックが壊れたという表現が正しいのかどうかは疑問が残るところですが
とりあえずは解決とさせていただきます。
色々とご助言いただきありがとうございました。
No.3
- 回答日時:
#1です。
そうですか、、では、#2の方のアドバイスどおり、もしDB接続について参照設定があればそれを実行時バインド(CreateObject)に変更してみてはどうでしょうか?
ex) ADO接続の場合
Dim DB as Object
Set DB = CreateObject("ADODB.Connection")
それから、オブジェクト変数をウォッチ式に追加し、ステップインでトレースしてプロシージャの終了時にちゃんと解放されているかチェックしてみて下さい。
参照設定では接続してませんしウォッチの確認でも全てNothingになってます。
問題の現象なのですが、単純に
Excel(ブック)を開く
→ボタンクリックでフォーム表示
→何もせずにフォーム閉じる
→Excel閉じる
の手順だけでも発生してしまいます。
Excelを開いてすぐ閉じただけでは発生しません。一度でもフォームを開くと発生してしまいます。
これだけの操作だとDB接続を行うプロシージャは通っていないのでDBオブジェクト関連の
解放モレということはないと思っているのですが・・・どこかにモレがあるんですかね。
で、さらに謎を深めるようなのですが、Win2000+Office2000で最新にアップデートした状態だと
この現象は発生せず、Officeが未アップデート状態、またはWinXPだと発生するのです。
試しに、単純に上記操作だけを行うブックを新規作成してみましたが、問題の現象は発生しませんでした。
これを雛形に少しずつコードをコピーしていって、どこで発生するか探るしかないかな・・。
お手数お掛けして申し訳ないです。
もし何かもっと思い当たる部分があればご回答いただけると有難いです。
No.2
- 回答日時:
>Private変数を使用し念のためコードの最後でNothingをセットしています。
Microsoft側の文章には、Dll の設計について触れていますよね。そうなると、自家製でなければやっかいです。
「幽霊プロジェクトの怪」では、特に、Public 変数が問題だとは言っていないのじゃないかしらね。ただ、私個人は、Object 型は、グローバル化はしても、Public なんてしないような気がします。メモリ喰いで、動作を鈍らせるだけだからです。
要するに、Object型の変数の開放で、変数の開放を残したまま終了すると、パスワード・ロックしていた場合は、パスワードを要求してくるっていうことではないかしら?
そうしたら、とりあえず、DB(参照設定だったら、CreateObjectに変えてみるとか?)を含めて、Object型の変数の開放していない所を探してみたらいかがですか?
回答ありがとうございます。
言い回しはどうあれ参照サイトについてはおっしゃる通り、要はObject型の解放モレということですね。
その点については真っ先にチェックしたんですが該当箇所見つからずです・・・。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
ゆるやかでぃべーと タイムマシンを破壊すべきか。
これはディベートの論題だと仮定したうえでの回答お願いします。あなたは、その末にタイムマシンを壊してしまうのか、使い道を探すのかどうかを考えてもらいたいです。
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
Excelを閉じる際に意図せぬパスワード要求をされる
Excel(エクセル)
-
エクセル UserForm 呼び出しでフリーズしてしまいます
その他(Microsoft Office)
-
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【お題】絵本のタイトル
- ・【大喜利】世界最古のコンビニについて知ってる事を教えてください【投稿~10/10(木)】
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAでオブジェクトを小数点で位...
-
VBA エンターキーでイベントに...
-
コードでオブジェクトを最前面に
-
カッコ付けのオブジェクト名を...
-
桐V9での値の取得
-
現在アクティブになっているオ...
-
アクセスVBAのMe!と[ ]
-
Excel VBAでマウスの左クリック...
-
LoadImage関数について(VC++)
-
エクセルで、日付を入力すると...
-
「ご処理進めて頂きますようお...
-
iD
-
インタラクティブの反対語は?
-
Excelシート上のマクロを登録し...
-
メルカリのメルカードで買い物...
-
Access サブフォームに連番を...
-
Excel ラジオボタンのリセット...
-
ユーザーフォームをショートカ...
-
「PC Helpsoft Driver Updated...
-
EXCEL VBA マクロ 実行する度に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA エンターキーでイベントに...
-
アクセスVBAのMe!と[ ]
-
Excel2007 でのチェックボック...
-
Access からオブジェクトとして...
-
エクセルVBAでセル番地を指定し...
-
Excel VBAでマウスの左クリック...
-
【エクセルのマクロ】クリップ...
-
日本語の文字化けを直す方法
-
現在アクティブになっているオ...
-
Accessのフォーム上にエクセル...
-
文字列で小数点以下の0を削除し...
-
【エクセル】複数のTextBoxに共...
-
ユーザーフォームのインポート...
-
Excelを閉じるときVBAプロジェ...
-
コードでオブジェクトを最前面に
-
PowerpointVBAで指定のShapeオ...
-
Imageコントロールにグラフを表...
-
VBAで選択範囲外の図形(オブジ...
-
C#で画像をクリップボードへの...
-
WSH or VBの質問
おすすめ情報