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

ExcelのVBAプロジェクトにパスワードを設定したところ、Excelを閉じる際に意図せぬパスワード要求をされて困っています。

■現象発生ブックの作成手順は以下の通りです。
 (1)新規ブックを作成し、VisualBasicEditorで「Microdoft DAO 3.6 Object Library」を参照設定します。
 (2)新規ユーザーフォーム「UserForm1」を作成し、以下のコードを記述します。
    Private Sub UserForm_Initialize()
     Dim db As DAO.Database
     Dim strXLSName As String
     strXLSName = ThisWorkbook.Path & "\" & ThisWorkbook.Name
     Set db = OpenDatabase(strXLSName, True, True, "EXCEL 8.0;HDR=YES;")
     db.Close
     Set db = Nothing
    End Sub
  ※上記は、原因箇所のみ残して他は割愛させていただいたので意味のないコードになっています。
 (3)ThisWorkbookに、以下のコードを記述します。
    Private Sub Workbook_Open()
    UserForm1.Show
    End Sub
 (4)VBAProjectのプロパティで、表示用にロックにチェックし、パスワードを入力します。
 (5)ブックを保存します。

■現象発生手順は以下の通りです。
 (1)上記の作成手順で作成したブックを開く(自動でUserForm1が開く)
 (2)自動で開いたUserForm1を閉じる
 (3)ブックを上書き保存して、ブックのみを閉じる
 (4)Excelを閉じる
すると、意図しないVBAプロジェクトのパスワード要求ダイアログが表示されてしまいます。
当現象は最新までUpdate済みのExcel2007およびExcel2000で発生しました。
(他のバージョンは未確認です)

以下も拝見しましたが解決せず、お手上げ状態となっています。
 http://questionbox.jp.msn.com/qa1272177.html

どなたか解決策をご存知でしたら、アドバイスいただけないでしょうか?

A 回答 (1件)

こんにちは。



コードとして、何かちょっとヘンですね。
自ブックに、DAOでアクセスするというのでは、無理がありませんか?

>Excelを閉じる際に意図せぬパスワード要求をされて困っています。

Excel が終了後に VBA プロジェクトのパスワードのプロンプトが表示されます。
http://support.microsoft.com/default.aspx?scid=k …

ここで書かれてあるとおりだと思います。

その文章の中にある、ActiveX DLL を、DAO に読み替えればよいのですが、それを解決する手段が分かりません。

「この問題のActiveX DLLのクラス設計を修正するために、そのClassが終わる前に、ワークブック関連情報はきちんと解放させなければならない。一般のシナリオには、クラスの中でTerminateイベントが発生しないように書かれているので、オブジェクト(ワークブックとActiveX DLLのクラス)間で、循環参照を持ってしまう。」(英語から、ざっと訳してみました。日本語の方は機械翻訳だから分かりにくいです。)

しかし、今のコードから、既製品のDAOは解法する手段がないのです。別のデータ・ブックにするしかないのではないかと思います。
    • good
    • 0
この回答へのお礼

回答ありがとうございます!!

>自ブックに、DAOでアクセスするというのでは、無理がありませんか?
SQL文が使えると便利なので、DAOとADOを試してみた次第です。
※ちなみにADOでも同じ現象が発生します。

DAOやADOを使わない方法で考え直してみます。
ありがとうございました。

お礼日時:2009/05/29 19:27

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