[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2006/05/05(Fri) 02:17
投稿者名:NM
Eメール:
URL :
タイトル:
「DLL読み込み時のエラーです。」に関して
いつもお世話になっております。
エクセルにデータ保存しようとした際に「DLL読み込み時のエラーです。(Error 48)」
が出ました。

実際のコードとして、
Private Function xlFileSave(FileName As String, FullPath As String) As String
    Dim xlApp       As excel.Application
    Dim xlBook      As excel.Workbook
    Dim xlSheet     As excel.Worksheet

     '新規ファイルの「Sheet1」に書き込む準備
    Set xlApp = CreateObject("Excel.Application")
    Set xlBook = xlApp.Workbooks.Add
    Set xlSheet = xlBook.Sheets(1)
  以下省略
において、「Set xlApp = CreateObject("Excel.Application")」を実行した
タイミングでエラーが発生します。

プログラムを作成したPC環境としては、
・Windows XP Professional Edition (VB6.0)
・Microsoft Office 2003 Professional Edition
・参照可能なライブラリファイルはMicrosoft Excel 11.0 Object Library

出来上がったプログラムを実行して、上記問題が発生したPC環境は、
・Windows Server 2003
・Microsoft Office 2003 Personal Edition
・参照可能なライブラリファイルはMicrosoft Excel 11.0 Object Library

また、下記の環境で試した際には、問題なく動作しました。
・Windows Server 2000
・Microsoft Office 2003 Personal Edition
・参照可能なライブラリファイルはMicrosoft Excel 10.0 Object Library

「DLL読み込み時のエラーです。(Error 48)」のヘルプでは、
・DLLが存在しない
・名前の衝突
・DLLの形式が正しくない
などに関する記載がありますが、CreateObject関数を使用した際に、
参照するDLLファイルとは何でしょうか。
もしくは、どのような調べ方があるのでしょうか。
ご存知の方、ご教授ください。よろしくお願いします。

投稿時間:2006/05/05(Fri) 11:42
投稿者名:Say
Eメール:
URL :
タイトル:
Re: 「DLL読み込み時のエラーです。」に関して
>     Dim xlApp       As excel.Application
>     Dim xlBook      As excel.Workbook
>     Dim xlSheet     As excel.Worksheet
>
とりあえず、参照設定せずに
     Dim xlApp       As Object
     Dim xlBook      As Object
     Dim xlSheet     As Object
としてみるとか。

投稿時間:2006/05/06(Sat) 00:00
投稿者名:NM
Eメール:
URL :
タイトル:
Re^2: 「DLL読み込み時のエラーです。」に関して
お世話になります。返事遅くなりましてすいません。
アドバイスありがとうございます。

今日もいろいろと調べていましたが、小生のPC環境で
Microsoft Eecel Professional Edtion 2003から
Microsoft Eecel Personal Edtion 2003 に変更して
試しましたが、問題なく動作しました。
Excelの問題ではなく、OSの違いによる影響かもしれません。

また、CreateObject関数をコールした際に発生するErrオブジェクト
の内容として、
Err.HelpFile : VBENLR98.CHM
Err.LastDLLError : 0
Err.number : 48
でした。
アドバイスの内容も試しながら、原因も調査してみます。
ありがとうございます。

投稿時間:2006/05/07(Sun) 00:48
投稿者名:Starfish
Eメール:
URL :
タイトル:
Re^3: 「DLL読み込み時のエラーです。」に関して
 VBのランタイムは正しくインストールされていますか。

 ディストリビューションウィザードでセットアッププログラムを
作成して、インストールして見てください。

投稿時間:2006/05/07(Sun) 23:40
投稿者名:NM
Eメール:
URL :
タイトル:
「DLL読み込み時のエラーです。」に関して現状報告
お世話になります。返事遅くなりまして、すいません。
アドバイス頂いた皆様ありがとうございます。

本件の現状を含め、報告させていただきます。

>  ディストリビューションウィザードでセットアッププログラムを
> 作成して、インストールして見てください。
 ⇒ご指摘の方法で試してみましたが、Runtime Error48が同様に発生しました。

>  VBのランタイムは正しくインストールされていますか。
 ⇒はい。正しくインストールされています。
  問題とされているPCにVB6.0をインストールしてみましたが、
  Runtime Error48が同様に発生しました。

回避策としてご指摘頂きました、Say様の事前バインディングから実行時
バインディングに変更する方法は動作可能となりました。

小生の場合、エンドユーザが生産したデータを分析し、その結果をエクセルシート
に保存する際に、CreateObject関数を用いてエクセルを操作する制御手段を過去に
採用しました。
今回も同じエンドユーザからの要望で、増設という話で仕事を受けておりましたので、
前回同様のプログラムを提供する予定でしたが、このような問題が発生しました。
同じエンドユーザのため、前回のプログラムをそのまま使いたかったので、
今回問題が発生したPCの環境設定の変更もしくはMicosoftのUpdateプログラムが
あれば、それをインストールしたいと考えてました。
(ちなみにエンドユーザ側の事情で、PCはインターネット接続をしていません。)

本件と同様の質問事項は、本URLも含め、過去に他の方々も質問されており、
また、それぞれのPC環境により有効な対策及び回避策が異なりますよね。
(IEのスクリプト実行設定で解決する場合やExcel Object Library Versionの
違いの問題であったり、「CreateObject」ではなく「NEW」による起動で回避
できる場合等も含めて。)

確かに実行時バインディングの方が、多少処理に時間がかかっても、PC環境の変化
には強いですよね。当初は処理時間の短縮とユーザがエクセルを開いている時も想定
するとコードを比較的すっきりと書き易そうという理由からCreateObject関数を使った
のですが・・・。うーん。なかなか難しいですね。
ただ、アドバイス頂いた内容で上手くいったから、はい終わりではなく、何が原因で駄目
だったのかが自身で理解しないと成長しないので、今後も原因調査は続けていきます。
参考になる資料等ありましたら、ご教授ください。
では失礼します。

投稿時間:2006/06/14(Wed) 16:13
投稿者名:kc
Eメール:
URL :
タイトル:
Re: 「DLL読み込み時のエラーです。」に関して現状報告
同じ 現象が出ました。

VB6.0 と オフィスを再セットアップで直しました。

レジストリのDLL参照設定が不正に変更されたるから見たいです。

投稿時間:2006/06/22(Thu) 14:31
投稿者名:NM
Eメール:
URL :
タイトル:
Re^2: 「DLL読み込み時のエラーです。」に関して現状報告
お世話になります。
返事が遅くなりまして、すいません。

より良い方法があるかもしれませんが、小生は以下のようにしてみました。
前提条件として、Officeは復旧などの為にインストール内容を任意ドライブに保存するかを
インストール中に聞いてくるのでドライブを指定して保存しておく必要があります。

事前バインディングですと今回のエラーが発生しましたので、初回のプログラム起動時のみに
実行時バインディングでエクセルを開いて閉じるというダミー処理を追加しました。
そうすると、実行時バインディング時に、Officeが必要な環境を整えてからエクセルファイル
を開いてくれるので楽です。
この処理を初回だけやれば、後は事前バインディングをしても問題なく動作しました。