VB6.0で作成したexeファイルが他のPCではエラーが発生して動きません

このQ&Aのポイント
  • 仕事でVB6.0でつくられたプログラムが他のPCでエラーが発生し、動作しない問題が発生しています。
  • 指定したエクセルファイルを開いてデータを参照し、照合するVB6.0のプログラムが問題の原因です。
  • 他のPCでは「不正な処理をしているため、このプログラムを終了します」というエラーメッセージが表示され、問題が発生しています。
回答を見る
  • ベストアンサー

VB6.0で作成したexeファイルが他のPCではエラーが発生して動きません

はじめまして。 色々検索してみたのですが、なかなか見つからなかったのでお力を貸していただければと思います。 仕事でVB6.0でつくられたプログラムがあります。 最初は別の方(仮にAさんとします)が作ってくださり、いつもそのexeファイルをもらって仕事をしておりました。 この度、私がそのプログラムを修正し、exeファイルを作成したところ、自分のPCでは問題なく動くのですが、他のPCで使用しようとするとエラーが発生して動きません。 プログラムはVB6.0で、指定したエクセルファイルを開いて参照し、データと照合させるものです。 AさんのPCのOSはwinXPです。 Aさんが作ってくれたexeファイルはコピーして、Win95/Win98/WinXPで問題なく動作することが出来ました。 しかし私が修正し、作成したexeファイルはOSは関係なく自分のPC以外ではエラーが発生してしまいます。ちなみに自分のPCもWinXPです。 エラーは「不正な処理をしている為、このプログラムを終了します」という様なものです。 エクセルを参照しようとすると、発生するエラーなので、そのときだとは思うのですが、デバックしようにも、自分のPCでは問題なく動いてしまうので、どうにも出来ません。 よろしくお願い申し上げます。

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.6

原因は 事前(アーリー)バインディングつまり参照設定をしているためです yuzumiya氏のパソコンにはExcel2003、ターゲットパソコンにはExcel2000 ということですね VBのアプリはExcel2003を探しているが見つからないので落ちてしまうのです As Objectになおして EXcel2003への参照設定も外して EXEを作成してください

yuzumiya
質問者

お礼

何度も何度も、回答していただき、本当に有難うございました。 参照設定の「Microsoft Excel 11.0 Object Library」のチェックは外さずに、プログラム内の全ての箇所で(関数の引数も含めて) 以下の修正を行ったところ、他のPCでもエラーが発生することなくきちんとアプリが動作することが出来ました。  As excel.Application ⇒ As Object  As excel.Workbook   ⇒ As Object  As excel.Worksheet  ⇒ As Object 本当に、ありがとうございました。

yuzumiya
質問者

補足

回答有難うございます。 >原因は 事前(アーリー)バインディングつまり参照設定をしているためです >VBのアプリはExcel2003を探しているが見つからないので落ちてしまうのです ⇒なるほど!VBでExcel2003を探しているため、エラーが発生していたのですね!! >As Objectになおして EXcel2003への参照設定も外して EXEを作成してください ⇒修正するものは、以下の2点で宜しいでしょうか? (1)参照設定の「Microsoft Excel 11.0 Object Library」のチェックを外す。 (2)プログラム内の全ての箇所で以下の修正を行う。(関数の引数も含めて) As excel.Application ⇒ As Object As excel.Workbook   ⇒ As Object As excel.Worksheet  ⇒ As Object これから、修正してみます。

その他の回答 (5)

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.5

元の質問の『不正な処理をしている為、このプログラムを終了します』のメッセージは作成したアプリで生成しているメッセージなのでしょうか、それとも Windowsが生成した物ですか? また補足などに投稿されたコードのどの部分をどのように変更なさったのでしょう excelfile_openプロシージャは機能しているのでしょうか もしかして あなたのパソコンにインストールされているExcelは複数ではありませんか その中の最新版のExcelと他のパソコンのExcelでバージョンが違うのでありませんか Dim xlApp As excel.Application といった具合で 事前(アーリー)バインディングするなら使用環境も同じExcelのバージョンである必要があります 違うバージョンが存在するなら excelfile_openの中でやっているように Excel関連のオブジェクトを As Objectで宣言して使いましょう 開発時は アーリーバインディングデングでインテリセンスを使いながら開発したほうが効率的でしょう リリース時点で As Objectに置き換え Excel.Applicationを新規に起こす場合は CreateObjectまたはGetObjectを使いましょう

yuzumiya
質問者

お礼

回答有難うございます。 助言頂いた箇所を、以下のように修正を行いましたが、やはり同じエラーが発生してしまいました。 -------------------------------- Private Sub Combo2_Click() Dim i As Integer Dim xlApp As Object  ← 修正後 Dim xlBook As Object  ← 修正後 Dim xlSheet As Object ← 修正後 ' Dim xlApp As excel.Application ← 修正前 ' Dim xlBook As excel.Workbook  ← 修正前 ' Dim xlSheet As excel.Worksheet ← 修正前 Dim fa As String, excelfile_path As String, terminal As String Dim Msg As String, Style As Integer, Title As String Dim terminal_Column As Integer, path_Column As Integer, path_name As String, Del_Line As Boolean 'エクセルのファイルパス名 fa = App.Path If Right(fa, 1) <> "\" Then fa = fa & "\" excelfile_path = fa & Text8.Text & Label7 '比較EXCELファイルの存在確認 If comp_excelfile_check(excelfile_path) = False Then Exit Sub Combo3.Enabled = False Combo3.Clear Combo3.Text = "(商品を選択してください)" Call excelfile_open(xlApp, xlBook, xlSheet, excelfile_path, "【参考】シート名") terminal = Combo2.Text i = xlSheet.Range("C13:C65536").Find(terminal, , , xlPart, , , , False).Row Do While xlSheet.Cells(i, 3).Text = terminal Combo3.AddItem xlSheet.Cells(i, 4).Value i = i + 1 Loop Combo3.Enabled = True Check5.Visible = False Check5.Value = 2 Check12.Visible = False Check12.Value = 2 End Sub -------------------------------- まだ、どこかおかしいのでしょうか?

yuzumiya
質問者

補足

返信が遅くなって申し訳ございません。 会社がお休みになってしまい、自宅からはアクセス出来ない為、こんなに遅れてしまい申し訳ありません。 >元の質問の『不正な処理をしている為、このプログラムを終了します』のメッセージは作成したアプリで生成しているメッセージなのでしょうか、それとも Windowsが生成した物ですか? ⇒Windowsが生成したものです。 >また補足などに投稿されたコードのどの部分をどのように変更なさったのでしょう ⇒投稿した箇所は一切修正を行っておりません。以前のままです。 >excelfile_openプロシージャは機能しているのでしょうか ⇒こちらも一切修正しておりませんし、自分のPCでは動いているので、機能していると思います。 >もしかして あなたのパソコンにインストールされているExcelは複数ではありませんか ⇒私のPCにはOffice2003しかインストールされておりません。 >その中の最新版のExcelと他のパソコンのExcelでバージョンが違うのでありませんか ⇒他のPCはOffice2000が殆どです。それよりバージョンの低いもののあります。ちなみに、以前作成していた方のPCはおそらくOffice2000と思われます。(本人がいないので確認は取れてはおりませんが) >Dim xlApp As excel.Application >といった具合で 事前(アーリー)バインディングするなら使用環境も同じExcelのバージョンである必要があります >違うバージョンが存在するならexcelfile_openの中でやっているように Excel関連のオブジェクトをAs Objectで宣言して使いましょう ⇒「excelfile_openの中でやっているように」というのは、どのコードの事を仰っているのでしょうか? 補足になるか分かりませんが、VBの[プロジェクト]-[参照設定]の「Microsoft Excel 11.0 Object Library」というものにチェックが入っております。

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.4

新しいEXEの起動時にそのエラーが発生するのでしょうか それともあるアクション(イベント)を実行した場合に起きるのでしょうか エラーになっているであろう部分に MsgBoxなどを埋め込んで 何処まで期待通りに実行されているのか確認しましょう 今回の修正は何をしたのでしょうか 具体的なコードの提示があったほうが回答がつきやすいですよ 旧OSなどで検証が必要なら 仮想PC系のアプリケーションを導入してみましょう Virtual PCや VMWareなど …

yuzumiya
質問者

お礼

ゴメンなさい。もう一つ、エクセルファイルを開くプログラムを記載し忘れてしまいました。 以下になります。 Sub excelfile_open(xlApp As excel.Application, xlBook As excel.Workbook, xlSheet As excel.Worksheet, ByVal excelfile_path As String, ByVal sheet_name As String) 'エクセルファイルの取得 Dim excelfile_name As String excelfile_name = Mid(excelfile_path, InStrRev(excelfile_path, "\") + 1) On Error Resume Next 'エクセルを起動して、ファイルを開く 'Set xlApp = CreateObject("Excel.Application") 'Set xlBook = xlApp.Workbooks.Open(ExcelFile_path) Set xlApp = GetObject(, "Excel.Application") If Err.Number <> 0 Then Set xlApp = CreateObject("Excel.Application") Err.Clear End If Set xlBook = xlApp.Workbooks(excelfile_name) If Err.Number <> 0 Then '保存確認のメッセージを非表示にする。 xlApp.DisplayAlerts = False Set xlBook = xlApp.Workbooks.Open(excelfile_path) xlApp.DisplayAlerts = True End If Set xlSheet = xlBook.Worksheets(sheet_name) On Error GoTo 0 'エクセルを表示します。(表示しなくてもOK) 'xlApp.Visible = True End Sub よろしくお願い申し上げます。

yuzumiya
質問者

補足

回答有難うございます。返信遅れてもうしわけありませんでした。 exeは起動します。 イベント実行時にエラーが発生してしまいます。 exeを起動させると、ファイル名を入れるtextboxやアイテムを入れるcomboboxが表示されます。 イメージとしては、エクセルファイルにA社~D社で扱っている商品が表で纏めてあります。 そして、1つめのcombo.boxをクリックするとA社,B社,C社,D社と選べるようになり、これを選択すると、2つめのcombo.boxに、選んだ会社で扱っている商品が選べるようにcombo.boxのプルダウンに設定されるというものになります。 エラーが発生するのは、このcombo.boxでA社~D社を選択した時です。 エクセルファイルを開くプログラムで何かおかしな事になっている可能性があるのですが、この辺りは全く私は手を出していません。 いじる必要がありませんので、いじっていないのですが・・・。 その辺りのプログラムは以下の通りです。 Private Sub Combo2_Click() Dim i As Integer Dim xlApp As excel.Application Dim xlBook As excel.Workbook Dim xlSheet As excel.Worksheet Dim fa As String, excelfile_path As String, terminal As String Dim Msg As String, Style As Integer, Title As String Dim terminal_Column As Integer, path_Column As Integer, path_name As String, Del_Line As Boolean 'エクセルのファイルパス名 fa = App.Path If Right(fa, 1) <> "\" Then fa = fa & "\" excelfile_path = fa & Text8.Text & Label7 '比較EXCELファイルの存在確認 If comp_excelfile_check(excelfile_path) = False Then Exit Sub Combo3.Enabled = False Combo3.Clear Combo3.Text = "(商品を選択してください)" Call excelfile_open(xlApp, xlBook, xlSheet, excelfile_path, "【参考】シート名") 'エクセルを表示します。(表示しなくてもOK) 'xlApp.Visible = True terminal = Combo2.Text i = xlSheet.Range("C13:C65536").Find(terminal, , , xlPart, , , , False).Row Do While xlSheet.Cells(i, 3).Text = terminal Combo3.AddItem xlSheet.Cells(i, 4).Value i = i + 1 Loop Combo3.Enabled = True Check5.Visible = False Check5.Value = 2 Check12.Visible = False Check12.Value = 2 End Sub Function comp_excelfile_check(ByVal excelfile_path As String) As Boolean '比較EXCELファイルの存在確認 Dim Msg As String, Style As Integer, Title As String Dim excelfile_name As String excelfile_name = Mid(excelfile_path, InStrRev(excelfile_path, "\") + 1) If Dir(excelfile_path, vbNormal) = "" Then Msg = "比較ファイル『" & excelfile_name & "』が見つかりません。" ' メッセージを定義します。 Style = vbExclamation ' ボタンを定義します。 Title = "注意" ' タイトルを定義します。 MsgBox Msg, Style, Title comp_excelfile_check = False Else comp_excelfile_check = True End If End Function ちなみに、EXCELファイルの存在確認である、comp_excelfile_checkプログラムでは、存在しないファイル名で行うと、きちんと「ファイルが存在しません」とメッセージが出力されるので、ここまでは問題なく動いていることは分かっています。

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.3

VB6のexeはVB6用のコンポーネントが実行時に必要です。exeだけコピーして動くのは、コンポーネントがインストール済みだからです。 修正時に新しいコンポーネントを追加しませんでしたか? いずれにしても、ディストリビューション・ウィザードでインストールキットを作成して頒布するのが正しい方法です。 これを嫌ってWebアプリケーションにしているプロジェクトが増えています。 Webアプリケーションだとクライアント側に何もインストールする必要がないですから。

yuzumiya
質問者

補足

回答有難うございます。返信が遅れてしまい申し訳ございません。 > exeだけコピーして動くのは、コンポーネントがインストール済みだからです。 修正時に新しいコンポーネントを追加しませんでしたか? コンポーネントがインストール済みというのは、どういう意味でしょうか?修正は、エクセルの参照セルを変更する程度のものです。 以前も、exeだけコピーして使えており、特に何かをインストールしてはおりませんでした。 webアプリケーションですか。初めて聞きました。調べてみます。 ご意見ありがとうございました。

  • chie65536
  • ベストアンサー率41% (2512/6032)
回答No.2

何かのコンポーネントで使うライブラリを「実行時に動的にロードして使用」にしているのかも。 Aさんは、すべてのコンポーネントを「実行ファイルに含める」にしているので、何も入れてない、どのPCでも動く。 質問者さんが書き換えた場所で使うライブラリを「実行時に動的にロードして使用」にしていると「VBのランタイムライブラリをインストール済み」のPCでしか動かなくなる。 「VBの開発環境がインストール済み」であれば「VBのランタイムライブラリもインストール済み」なのは確実。 「VBのランタイムライブラリがインストールされてないPC」で実行すると、ライブラリを使おうとしてもライブラリのロードと初期化に失敗する。 プログラムが「ライブラリのロードと初期化に成功したか?」をチェックせずに、失敗時にも成功したつもりでライブラリの関数を呼び出すと、当然 >エラーは「不正な処理をしている為、このプログラムを終了します」という 結果になるのは明白。 つまり >自分のPCでは問題なく動くのですが、他のPCで使用しようとするとエラーが発生して動きません。 って状態になる訳。 実行ファイルを作成する際の、ライブラリオプションを良~く確認しましょう。

yuzumiya
質問者

補足

早速の回答ありがとうございました。 回答頂いたライプラリオプションの件確認してみたいのですが、私初心者でして、全く分かりません。 大変申し訳ございませんが、どこをどのようにしたら良いでしょうか? 実は、VBの勉強をしたことが全くなく、Aさんから引き継がれたプログラムを必死に眺めてネットで検索して独学したので、知識がほぼ0ナノです。お手数お掛けします・・・。 はじめに、きちんとお知らせしておくべきでしたね。申し訳ありません。

noname#140971
noname#140971
回答No.1

最下位のOSで動くようにコーディングすることです。 最上位のOSでのみ動くように書いたらダメです。 ですから、Win95で開発してWin98やWinXPで動作確認したが手っ取り早いと思います。

yuzumiya
質問者

補足

早速の回答ありがとうございました。 95/98でexeファイルを作成すれば良いという事でしょうか? 最初にプログラムを開発したときのOSが既にXPで、win95/98でも動いていたのですが・・・。 ちなみに、他のXPでも同じエラーが発生してしまうのです。

関連するQ&A

  • vb6.exe - アプリケーションエラー

    VBで作成したEXEを終了させた時、プロジェクトからプログラムを実行して、 プロジェクトを終了させた時に、下記エラーが発生します。 (プロジェクトを開いて閉じるだけではエラーは発生しない。) -------------------------------------------------------- "0x7c950a19"の命令が"0xffffffff"のメモリを参照しました。 メモリが"read"になることはできませんでした。 -------------------------------------------------------- 自分のPCで実行した時のみ発生します。 (他のPCで実行してもエラーは発生しません。) 何かわかる方がいらっしゃいましたらアドバイス頂けたらと思います。 宜しくお願い致します。 <環境> XP SP3 メモリ4G VB6.0 SP6

  • VB6.0で作ったSetup.exeにてエラー

    VB6.0のディストリビューションウィザードで作成した Setup.exeにてソフトのインストールができなくて困っています。 セットアップの途中で「予期せぬエラーが発生しました」 「¥¥@~ファイルが見つかりません」と表示されます。 どうもファイルを参照するときに¥マークのあたりが 文字化けしているようなのですが、原因が分かりません。 なんとかセットアップができるようにしたいのですが・・・ 環境はWin98、VB6SP5です。 誰かご教授願えませんか。 よろしくお願いします。

  • VB4.EXE で 実行時エラー '31037'

    WIN2000 で VB4.EXE を 動かそうとすると 実行時エラー '31037' ファイルの読み込み中にエラーが発生しました。 とエラーが出ます。 どうやらグリッド部分の読み込みで エラーが出てるみたいです。 VB6.EXE を 設定した人間が 環境を変えたらしく 今までのように最低限のDLL,OCXで 動かなくなりました。 VB4.EXE と VB6.EXE を 共存させるには どうすればいいでしょうか?

  • ひとつの「OOO.exe」のファイルにまとめる方法

    VBで簡単なプログラムを作ってみました。 できかがってから 「OOO.exe」ファイルだけをまったくの別PCに移して実行したらエラーが発生します。 開発元(プログラムを作ったPC)で実行すると問題なく動くのに・・・どうしてだろう? なにか方法があるに違いない! デバッグも終わってどのPCでも使えるように、しかもひとつのファイルにまとめる方法ってどうするのですか?

  • VB6.0から起動したexeファイルを終了するとエラーが発生して困っています

    VB6.0(OSはWindowsXP)中からShell関数を利用してexeファイルを起動したのですが、そのexeファイルを終了すると決まってアプリケーションエラーが発生します。これを直接かショートカットで実行して終了するとエラーは出ません。どなたか考えられる原因や解決策をご存じの方、教えて頂けませんでしょうか?よろしくお願い致します。

  • VB6.0 exeファイルを作成すると動かなくなってしまいます。。。

    VB6.0で、RS232CのRTS、CTSを使用して、ONOFFスイッチを作成しました。 ONでデータ送信するプログラムを作成したのですが、VB開発環境上で 実行すると正常に作動するのですが、EXEファイルを作成して実行すると、232CのONOFFスイッチのところがうまく動かなくなってしまいます。 他のところはEXEファイルでも正常に動きます。 使用PCは同じPC上です。 何か解消法はありますでしょうか。 アドバイスをよろしくお願いいたします。

  • VB作成のEXEファイルの起動時に

    私の記憶ですとVBで作られたEXEファイルを作成したPC以外で起動する場合「ランタイムファイル」なる物が必要だと思ったのですがVB6.0で作成したEXEファイルを別のPCにて問題なく起動したのですが、もしかしてVB6.0からは「ランタイムファイル」が必要無くなったのでしょうか?

  • VBでExe作成時に「C2.exeが見つかりません」エラー

    お世話になります。 VB6.0で作成したプロジェクトのEXEファイルを作ろうとすると、「C2.exeファイルが見つかりません」といったエラーが表示されて作成することができません。 以降、別のプロジェクトのEXEを作ろうとしても同様のエラーが出てしまいます。 VBを再インストールすると直るのですが、理由がわかりません。 どなたか対処法などご存知の方がいらっしゃいましたらご回答宜しくお願いします。

  • 作ったEXEファイルを他PCで実行できません

    VB.NET2008でEXCEL2007のファイルを作成するEXEを作りました。開発環境OSはXPです。コンパイル後にできるReleaseフォルダを他PC(OSはWindows2003サーバー、EXCEL2007インストール済み)にコピーして実行したのですが、何事もなく終わってしまいます。このEXEを実行すると最初にメッセージボックスを表示し、テキストファイルにログを書き込むようにプログラムしていますが、サーバー機ではメッセージボックスは表示されず、ログファイルも作成されません。同じ開発機で作成した別のEXEは正常に実行してExcelファイルも作成されます。 よろしくお願いします。

  • VB2005でエクセルファイル作成時のエラー

    現在、VB2005ExpressEditionを使って、データグリッドビューに表示されている値を、エクセル出力するアプリを作成しています。 デバッグでは問題がなかったので、ビルドをし、出来上がった実行ファイルをデスクトップなどに移動させ、そこからアプリを起動したところ、エクセル出力のところでプログラムが異常終了してしまいました。 Releaseフォルダから直接実行ファイルを動かした場合は、正常に動作しました。 そこで、try~catchを使ってエラー箇所を判別しようとしたところ、処理開始以前の宣言のところで、エラーが発生しているようなんです。 以下がその宣言部です。 Dim app As New Excel.Application Dim wb As Excel.Workbook Dim ws As Excel.Worksheet VBでのエクセルファイル出力はこれが初めてで、VB自体も独学で勉強しているため、かなり的外れな質問になってしまっているかもしれませんが、どうしてもわからないので、どうか教えて下さい。 長文、乱文で失礼いたしました。

専門家に質問してみよう