はじめまして。
色々検索してみたのですが、なかなか見つからなかったのでお力を貸していただければと思います。
仕事でVB6.0でつくられたプログラムがあります。
最初は別の方(仮にAさんとします)が作ってくださり、いつもそのexeファイルをもらって仕事をしておりました。
この度、私がそのプログラムを修正し、exeファイルを作成したところ、自分のPCでは問題なく動くのですが、他のPCで使用しようとするとエラーが発生して動きません。
プログラムはVB6.0で、指定したエクセルファイルを開いて参照し、データと照合させるものです。
AさんのPCのOSはwinXPです。
Aさんが作ってくれたexeファイルはコピーして、Win95/Win98/WinXPで問題なく動作することが出来ました。
しかし私が修正し、作成したexeファイルはOSは関係なく自分のPC以外ではエラーが発生してしまいます。ちなみに自分のPCもWinXPです。
エラーは「不正な処理をしている為、このプログラムを終了します」という様なものです。
エクセルを参照しようとすると、発生するエラーなので、そのときだとは思うのですが、デバックしようにも、自分のPCでは問題なく動いてしまうので、どうにも出来ません。
よろしくお願い申し上げます。
No.6ベストアンサー
- 回答日時:
原因は 事前(アーリー)バインディングつまり参照設定をしているためです
yuzumiya氏のパソコンにはExcel2003、ターゲットパソコンにはExcel2000 ということですね
VBのアプリはExcel2003を探しているが見つからないので落ちてしまうのです
As Objectになおして EXcel2003への参照設定も外して EXEを作成してください
この回答への補足
回答有難うございます。
>原因は 事前(アーリー)バインディングつまり参照設定をしているためです
>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
これから、修正してみます。
何度も何度も、回答していただき、本当に有難うございました。
参照設定の「Microsoft Excel 11.0 Object Library」のチェックは外さずに、プログラム内の全ての箇所で(関数の引数も含めて)
以下の修正を行ったところ、他のPCでもエラーが発生することなくきちんとアプリが動作することが出来ました。
As excel.Application ⇒ As Object
As excel.Workbook ⇒ As Object
As excel.Worksheet ⇒ As Object
本当に、ありがとうございました。
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を使いましょう
この回答への補足
返信が遅くなって申し訳ございません。
会社がお休みになってしまい、自宅からはアクセス出来ない為、こんなに遅れてしまい申し訳ありません。
>元の質問の『不正な処理をしている為、このプログラムを終了します』のメッセージは作成したアプリで生成しているメッセージなのでしょうか、それとも 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」というものにチェックが入っております。
回答有難うございます。
助言頂いた箇所を、以下のように修正を行いましたが、やはり同じエラーが発生してしまいました。
--------------------------------
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
--------------------------------
まだ、どこかおかしいのでしょうか?
No.4
- 回答日時:
新しいEXEの起動時にそのエラーが発生するのでしょうか
それともあるアクション(イベント)を実行した場合に起きるのでしょうか
エラーになっているであろう部分に MsgBoxなどを埋め込んで
何処まで期待通りに実行されているのか確認しましょう
今回の修正は何をしたのでしょうか
具体的なコードの提示があったほうが回答がつきやすいですよ
旧OSなどで検証が必要なら 仮想PC系のアプリケーションを導入してみましょう
Virtual PCや VMWareなど …
この回答への補足
回答有難うございます。返信遅れてもうしわけありませんでした。
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プログラムでは、存在しないファイル名で行うと、きちんと「ファイルが存在しません」とメッセージが出力されるので、ここまでは問題なく動いていることは分かっています。
ゴメンなさい。もう一つ、エクセルファイルを開くプログラムを記載し忘れてしまいました。
以下になります。
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
よろしくお願い申し上げます。
No.3
- 回答日時:
VB6のexeはVB6用のコンポーネントが実行時に必要です。
exeだけコピーして動くのは、コンポーネントがインストール済みだからです。修正時に新しいコンポーネントを追加しませんでしたか?
いずれにしても、ディストリビューション・ウィザードでインストールキットを作成して頒布するのが正しい方法です。
これを嫌ってWebアプリケーションにしているプロジェクトが増えています。
Webアプリケーションだとクライアント側に何もインストールする必要がないですから。
この回答への補足
回答有難うございます。返信が遅れてしまい申し訳ございません。
> exeだけコピーして動くのは、コンポーネントがインストール済みだからです。
修正時に新しいコンポーネントを追加しませんでしたか?
コンポーネントがインストール済みというのは、どういう意味でしょうか?修正は、エクセルの参照セルを変更する程度のものです。
以前も、exeだけコピーして使えており、特に何かをインストールしてはおりませんでした。
webアプリケーションですか。初めて聞きました。調べてみます。
ご意見ありがとうございました。
No.2
- 回答日時:
何かのコンポーネントで使うライブラリを「実行時に動的にロードして使用」にしているのかも。
Aさんは、すべてのコンポーネントを「実行ファイルに含める」にしているので、何も入れてない、どのPCでも動く。
質問者さんが書き換えた場所で使うライブラリを「実行時に動的にロードして使用」にしていると「VBのランタイムライブラリをインストール済み」のPCでしか動かなくなる。
「VBの開発環境がインストール済み」であれば「VBのランタイムライブラリもインストール済み」なのは確実。
「VBのランタイムライブラリがインストールされてないPC」で実行すると、ライブラリを使おうとしてもライブラリのロードと初期化に失敗する。
プログラムが「ライブラリのロードと初期化に成功したか?」をチェックせずに、失敗時にも成功したつもりでライブラリの関数を呼び出すと、当然
>エラーは「不正な処理をしている為、このプログラムを終了します」という
結果になるのは明白。
つまり
>自分のPCでは問題なく動くのですが、他のPCで使用しようとするとエラーが発生して動きません。
って状態になる訳。
実行ファイルを作成する際の、ライブラリオプションを良~く確認しましょう。
この回答への補足
早速の回答ありがとうございました。
回答頂いたライプラリオプションの件確認してみたいのですが、私初心者でして、全く分かりません。
大変申し訳ございませんが、どこをどのようにしたら良いでしょうか?
実は、VBの勉強をしたことが全くなく、Aさんから引き継がれたプログラムを必死に眺めてネットで検索して独学したので、知識がほぼ0ナノです。お手数お掛けします・・・。
はじめに、きちんとお知らせしておくべきでしたね。申し訳ありません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
あるあるbotに投稿したけど採用されなかったあるある募集
あるあるbotに投稿したけど採用されなかったあるあるをこちらに投稿してください
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
exeファイルで実行できない
Visual Basic(VBA)
-
VB6のプロジェクトロードエラーについて
Visual Basic(VBA)
-
コンパイルエラー:ユーザ定義型は定義されていません、と出るのですがどのライブラリファイルかわかりません。
Visual Basic(VBA)
-
-
4
VB6.0(SP6)にて開発を行なっています。参照設定に関して教えてく
IT・エンジニアリング
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VB6(SP5)+OO4OでCreateObjectが...
-
VB.NETでSPREADの設定方法
-
[VB.net] ExcelへのQRコード出...
-
発行元:不明???
-
.Netアプリケーション配布について
-
ExcelCreatorについて
-
VB2013で作成したプログラムの...
-
Frameworkのインストール
-
OCXのレジストリ登録
-
VB5で依存ファイルが最新で...
-
VB6.0のラーニングエディション...
-
次のクラスは登録されていませ...
-
VB6(SP5) と XP について
-
VB6をWindows10にインストール...
-
■C#でブラウザを作成すること...
-
Designer.vbは直接コードをいじ...
-
vba 時間の引き算 例えば 15:00...
-
意味不明の実行時エラーで困っ...
-
Windows PowerShellでC言語を実...
-
VBSから別のVBS起動するとき変...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VB6(SP5)+OO4OでCreateObjectが...
-
VBAでArrayListを使う為の「msc...
-
VB.NETでSPREADの設定方法
-
[VB.net] ExcelへのQRコード出...
-
う~ん…。
-
Product Codeの変更法は?
-
VB6で作成したアプリを配布する...
-
OLEPRO32.DLLが見つかりません
-
発行元:不明???
-
次のクラスは登録されていませ...
-
VB6.0で作成したexeファイルが...
-
VB6のアプリケーションの配布
-
ListViewで文字化けしてしまい...
-
Excelがインストールされてない...
-
ビルドした.exeファイルは.NE...
-
accessがインストールされてい...
-
インストール不要アプリケーシ...
-
VC++ msvcrt.dllについて
-
VBの文字化け
-
ExcelCreatorについて
おすすめ情報