DAOオブジェクトのリフレッシュを行うには?

解決


葉月  URL  2004-02-13 12:10:28  No: 82016  IP: [192.*.*.*]

失礼します
今回VB6.0SP5を使ってエクセルのデータを読み込み
アクティブレポート上に印刷を行おうと思いました

開発環境では何事も無く動作するのですが
ディストリビューションウィザードにてインストーラを作成し
相手方マシンにインストールするとアクティブレポートのDAOオブジェクトの
Refreshメソッドを実行した際に
「"~"メソッドは失敗しました"~:"オブジェクト」
というエラーメッセージで落ちてしまいます

マシン依存のエラー?かと思い調べているのですが
なかなか解決の糸口が見つからず質問させていただきました
ちなみに自分のマシンにインストーラからインストールすると無事動きます
なにとぞご教授お願いします
================エラーと思わしきソース===================
    strSQL = ""
    strSQL = strSQL & " SELECT * FROM [" & strシート名 & "$]"
    strSQL = strSQL & " WHERE " & mstr列名(mcon所属) & " <> ''"
    strSQL = strSQL & " ORDER BY " & mstr列名(mcon所属) & ", " & mstr列名(mcon従業員番号) & ", " & mstr列名(mcon区分)
   
    dao.Connect = "Excel 8.0;"
    dao.DatabaseName = strファイル名
    dao.RecordSource = strSQL
    dao.RecordsetType = ddDAOSnapShot
    dao.Refresh
==========================開発環境=================================
WIndowsXpProSp1
VisualStudio6.0(visualBasic6.0)
Access2000/2002
Excel2000/2002
レポートにはActiveReport2.0を使用

エラーの起きたマシンのOS
WIndowsXpProSp1
OfficeXp

編集 削除
ぽう  2004-02-13 12:46:46  No: 82017  IP: [192.*.*.*]

変数 dao の型って何ですか?

編集 削除
葉月  2004-02-13 13:22:04  No: 82018  IP: [192.*.*.*]

すみません
アクティブレポート上の
DAOコントロールオブジェクトです

編集 削除
岡田 之仁  2004-02-13 14:08:42  No: 82019  IP: [192.*.*.*]

あくまで可能性ですが・・・

該当のマシンに、DAO3.6 もしくは、JET 4.0 の
ドライバーが無いとか・・・

また、バージョン確認ですが・・・
Excel 8.0   Office 97           DAO 3.51
Excel 9.0   Office 2000         DAO 3.6 or ADO 2.x
Excel 10.0  Office XP (2002)    ADO 2.x
Excel 11.0  Office System 2003  ADO 2.x

※  ADO の場合、JET 4.0 が必要です。
    JET 4.0 って、結果的にDAO 3.6なんですが・・・

該当するドライバーのバージョンと環境に差異があるのでは
と考えます。

※  この辺のドライバーやバージョンに詳しい方、カキコ
    お願いします!私も詳しくは無いもので・・・

以上。

編集 削除
葉月  2004-02-13 15:38:43  No: 82020  IP: [192.*.*.*]

岡田様返信ありがとうございます
JETに関してはインストールされていると思うのですが
根本的にVBのディストリビューションウィザードを使用することにより
コピーされないと困りますよね・・・
一応自分のマシンには2000とXPが入っており
その辺も問題なのでしょうかね・・・
一応設定上Connectは8.0でコネクトできています
エラーの起こるほうのマシンではいまだ不明ですが・・・
まだ試行錯誤になりそうです・・・

編集 削除
葉月  2004-02-13 18:02:17  No: 82021  IP: [192.*.*.*]

解決・・・ではないのですが
DAOコントロールではなくDAO.Recordsetでなら作成できるっぽいので
そこからアクセス上に一度出力して
やってみるようにします

上記の件に関しましては暇をみつつ考えるようにします

編集 削除
葉月  2004-02-13 20:16:09  No: 82022  IP: [192.*.*.*]

お騒がせしました
エラーの内容は、エクセルオブジェクト作成時
XLSTARTフォルダのファイルを同時に開いてしまい
そちらのファイルを参照していたためうまく動作しなかったようです

で、この時目的のブックと、XLSTARTフォルダの2つのブックが開かれているわけですが
目的のブックを対象ブックに切り替える方法を教えていただきたいと思う次第でございます
エクセル自体はバックグラウンドで動いており表示はされません
VBの参照設定でエクセルアプリケーションにはチェックを入れてあります

編集 削除
岡田 之仁  2004-02-13 21:20:48  No: 82023  IP: [192.*.*.*]

Dim objExcel As Excel.Application
    Dim objWorkbook As Excel.Workbook
    
    Set objExcel = New Excel.Application
    objExcel.Visible = False
    
    ' *** 略 ***
    
    For Each objWorkbook In objExcel.Workbooks
        Debug.Print objWorkbook.Name
        If objWorkbook.Name = "該当のブック名" Then
            objWorkbook.Activate
            Exit For
        Else
            objWorkbook.Close
        End If
    Next

これを、応用してもらったらいいと思います。
開いたブックの名前を列挙しつつ、不必要なものをクローズ
(しなくてもいいが・・・)、該当するものをアクティブに
していく・・・

ご検討下さい。

以上。

編集 削除
葉月  2004-02-13 21:30:26  No: 82024  IP: [192.*.*.*]

岡田さん
ご返答ありがとうございます
今、試行錯誤の結果、オブジェクト作成時
(objXLSにエクセルオブジェクトを作成・・・)

要素 = objXLS.Parent.Windows.Count

の値が目的のブックを示す値であることに気付き
それにて解決することができました

objエクセルオブジェクト.Parent.Windows(要素).Visible = True

本当にありがとうございました

編集 削除