失礼します
今回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
変数 dao の型って何ですか?
編集 削除すみません
アクティブレポート上の
DAOコントロールオブジェクトです
あくまで可能性ですが・・・
該当のマシンに、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なんですが・・・
該当するドライバーのバージョンと環境に差異があるのでは
と考えます。
※ この辺のドライバーやバージョンに詳しい方、カキコ
お願いします!私も詳しくは無いもので・・・
以上。
岡田様返信ありがとうございます
JETに関してはインストールされていると思うのですが
根本的にVBのディストリビューションウィザードを使用することにより
コピーされないと困りますよね・・・
一応自分のマシンには2000とXPが入っており
その辺も問題なのでしょうかね・・・
一応設定上Connectは8.0でコネクトできています
エラーの起こるほうのマシンではいまだ不明ですが・・・
まだ試行錯誤になりそうです・・・
解決・・・ではないのですが
DAOコントロールではなくDAO.Recordsetでなら作成できるっぽいので
そこからアクセス上に一度出力して
やってみるようにします
上記の件に関しましては暇をみつつ考えるようにします
お騒がせしました
エラーの内容は、エクセルオブジェクト作成時
XLSTARTフォルダのファイルを同時に開いてしまい
そちらのファイルを参照していたためうまく動作しなかったようです
で、この時目的のブックと、XLSTARTフォルダの2つのブックが開かれているわけですが
目的のブックを対象ブックに切り替える方法を教えていただきたいと思う次第でございます
エクセル自体はバックグラウンドで動いており表示はされません
VBの参照設定でエクセルアプリケーションにはチェックを入れてあります
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
これを、応用してもらったらいいと思います。
開いたブックの名前を列挙しつつ、不必要なものをクローズ
(しなくてもいいが・・・)、該当するものをアクティブに
していく・・・
ご検討下さい。
以上。
岡田さん
ご返答ありがとうございます
今、試行錯誤の結果、オブジェクト作成時
(objXLSにエクセルオブジェクトを作成・・・)
要素 = objXLS.Parent.Windows.Count
の値が目的のブックを示す値であることに気付き
それにて解決することができました
objエクセルオブジェクト.Parent.Windows(要素).Visible = True
本当にありがとうございました