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.2
- 回答日時:
>Private変数を使用し念のためコードの最後でNothingをセットしています。
Microsoft側の文章には、Dll の設計について触れていますよね。そうなると、自家製でなければやっかいです。
「幽霊プロジェクトの怪」では、特に、Public 変数が問題だとは言っていないのじゃないかしらね。ただ、私個人は、Object 型は、グローバル化はしても、Public なんてしないような気がします。メモリ喰いで、動作を鈍らせるだけだからです。
要するに、Object型の変数の開放で、変数の開放を残したまま終了すると、パスワード・ロックしていた場合は、パスワードを要求してくるっていうことではないかしら?
そうしたら、とりあえず、DB(参照設定だったら、CreateObjectに変えてみるとか?)を含めて、Object型の変数の開放していない所を探してみたらいかがですか?
回答ありがとうございます。
言い回しはどうあれ参照サイトについてはおっしゃる通り、要はObject型の解放モレということですね。
その点については真っ先にチェックしたんですが該当箇所見つからずです・・・。
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.4
- 回答日時:
>一度でもフォームを開くと発生してしまいます。
>Win2000+Office2000で最新にアップデートした状態だとこの現象は発生せず...
という事からの推測ですが、
・Form_Initialize イベントで処理してる内容
・フォーム内に特殊なOCXコントロールを配置している
のいずれかに問題があるように思います。
何だか後者のような気がするのですが、心辺りは?
、、カレンダーコントロールとか。
Form_Initializeに記入はありません。
使用コントロールはテキストボックス、ラベル、チェックボックス、
コマンドボタン、イメージボックスです。
というか、大変申し訳ないのですが自己解決しました・・・。
結果から言いますとブックが壊れていた(?)ようです。
ブックを新規作成し、シート、フォーム、モジュールを既存ブックから
単純にコピーして複製しただけで問題の現象が発生しなくなりました。
OS、Officeのバージョンを戻して試してみましたが特に問題なく動作して
ますので、ブックのみが原因だったと思われます。
こんな事もあるのですね・・・。
ブックが壊れたという表現が正しいのかどうかは疑問が残るところですが
とりあえずは解決とさせていただきます。
色々とご助言いただきありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(ブラウザ) Excel VBA seleniumのedge操作について 業務上、分からないことがございまして、先 1 2022/06/20 16:59
- Visual Basic(VBA) VBA アドインについて お詳しい方 ご教授をお願いします。 相談事項 現在以下の対応を実施した所、 1 2022/11/02 16:53
- Visual Basic(VBA) VBAコードを張り付け後のエクセルの進め方 2 2023/02/07 18:24
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- Visual Basic(VBA) Excelのマクロコードについて教えてください。 1 2022/03/27 13:25
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2022/04/01 12:11
- Excel(エクセル) エクセル・スプレッドシートで、一定数を超えたらゼロから再累計する方法 8 2022/05/28 03:52
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- PowerPoint(パワーポイント) ExcelのVBAコードについて教えてください。 3 2022/05/25 14:32
- PowerPoint(パワーポイント) エクセルのマクロについて教えてください。 1 2022/03/25 17:03
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
アクセスVBAのMe!と[ ]
-
VBA エンターキーでイベントに...
-
【エクセルのマクロ】クリップ...
-
エクセルVBAでセル番地を指定し...
-
PowerpointVBAで指定のShapeオ...
-
Excelでの図形の描画
-
Excel VBAでマウスの左クリック...
-
アクセスで説明の欄の隠しオブ...
-
現在アクティブになっているオ...
-
VBでExcelの表形式の様なデザイ...
-
Imageコントロールにグラフを表...
-
日本語の文字化けを直す方法
-
「ご処理進めて頂きますようお...
-
エクセルで、日付を入力すると...
-
Excelシート上のマクロを登録し...
-
EXCEL VBA マクロ 実行する度に...
-
switch の範囲指定
-
【Excel】特定の文字を含むセル...
-
CloseとDisposeの違い
-
VBAでループ内で使う変数名を可...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
アクセスVBAのMe!と[ ]
-
VBA エンターキーでイベントに...
-
Excel VBAでマウスの左クリック...
-
文字列で小数点以下の0を削除し...
-
【エクセルのマクロ】クリップ...
-
エクセルVBAでセル番地を指定し...
-
Excel2007 でのチェックボック...
-
Accessのフォーム上にエクセル...
-
日本語の文字化けを直す方法
-
エクセルのデータをwebフォーム...
-
現在アクティブになっているオ...
-
PowerpointVBAで指定のShapeオ...
-
コードでオブジェクトを最前面に
-
【エクセル】複数のTextBoxに共...
-
Imageコントロールにグラフを表...
-
ユーザーフォームのインポート...
-
Access からオブジェクトとして...
-
構造体の静的な初期化
-
Excel VBA でPictureBoxオブジ...
-
「SHDocVw」の意味
おすすめ情報