こんにちは。
あるパソコンでは実行できるプログラムが別のパソコンでは実行できません。
要約コードは
Sub Main()
CHK1 = INIT_RTN
If CHK1 = 1 Then
KANRI_ADOCNN.Close
End
End If
MENU1.Show
End Sub
Function INIT_RTN()
INIT_RTN = 0
On Error GoTo STPERR
FIL_NAME = App.Path & "\CONTROL.mdb"
FILNO = FreeFile
Open FIL_NAME For Input As #FILNO
Input #FILNO, FOLNAME, DATAMDB
Close #FILNO
Set KANRI_ADOCNN = New ADODB.Connection
Exit Function
STPERR:
INIT_RTN = 1
MsgBox "プログラムを終了します。"
End Function
で、Set ・・・のところでエラー処理して終了してしまいます。
CONTROL.mdbはaccess2000ファイルでどちらのパソコンでも単独で起動します。
環境の問題と思いますがどこをみればいいのしょうか?
教えて下さい。よろしくお願いします。
エラーが出る場合、Err.Number,Err.Descriptionの値を示すのが常識です。
最も重要な情報を提示しなくては、第三者に原因のわかるはずもありません。
今回に関してはおそらく、
原因を直にみたければ、その「別のパソコン」に開発環境をいれて、
問題のソースを読み込み、参照設定を見てみればいいでしょう。
回避方法については、(原因が予想通りなら)
アーリーバインドをせず、レイトバインドすればいい、とだけ言っておきます。
回答ありがとうございます。
>エラーが出る場合、Err.Number,Err.Descriptionの値を示すのが常識です。
>最も重要な情報を提示しなくては、第三者に原因のわかるはずもありません。
失礼しました。
MsgBox "プログラムを終了します。" を表示した後、
KANRI_ADOCNN.Close のところで
「実行時エラー91 オブジェクト変数またはwithブロックが設定されていません。」
と出て終わりになります。MENU1.Show 側に進めません。
>原因を直にみたければ、その「別のパソコン」に開発環境をいれて、
>問題のソースを読み込み、参照設定を見てみればいいでしょう。
開発環境が不明(開発したパソコンも不明)なのですが、動作するパソコンを見ればわかるのでしょうか。
>回避方法については、(原因が予想通りなら)
>アーリーバインドをせず、レイトバインドすればいい、とだけ言っておきます。
アーリーバインドをせずレイトバインドするとはどうすればいいのでしょうか?
難しいことはわからないながらも、ともかくなんとかしたいのですが、
素人の手には負えないものなのでしょうか・・・(-_-メ)
よろしくお願いします。
>素人の手には負えないものなのでしょうか・・・(-_-メ)
素人、という意識があるのなら手をださないほうが無難では?
>アーリーバインドをせずレイトバインドするとはどうすればいいのでしょうか?
自分で調べてみましたか?
今回の場合、
ADOを参照設定せずにAs Objectで宣言して、
NewせずCreateObjectするだけです。
こうやって見返してみると、微妙に不適切だな。
「アーリーバインドをせずレイトバインドする」より
「参照設定をせずレイトバインドする」のほうが適切。
現時点では、Sub Main()側の
> KANRI_ADOCNN.Close のところで
> 「実行時エラー91 オブジェクト変数またはwithブロックが設定されていません。」
などといったエラーを追跡してみても、何も進展しません。
こういう時はまず、「エラー発生時に中断」モードで実行するか、
もしくは、On Error を外すなどして、Function INIT_RTN() の
どの行で、どのようなエラーになっているかを調査しましょう。
[F8]キーによるステップ実行中などに、コードウィンドウを
右クリックして、[設定/解除]を選択すると、エラー処理モードを
簡単に変更できます。
で。想定されるエラーの理由ですが——
たとえば、
> Open FIL_NAME For Input As #FILNO
の行でエラーになっているなら、恐らくは存在しないファイル名を
開こうとしているのが原因です。
実在するファイル名を指定しているかを再確認してみてください。
> Input #FILNO, FOLNAME, DATAMDB
の行でエラーになっているなら、空のファイルを読み込もうとして
読み込みエラーになっているのでしょう。
ファイルの内容に問題が無いか、調べてみてください。
> Set KANRI_ADOCNN = New ADODB.Connection
この行でエラーになっている可能性があるとすれば、
DAOすなわち「Microsoft DAO x.x Object Library」と
ADOすなわち「Microsoft ActiveX Data Objects x.x Library」の
両方が『参照設定』されていて、型の不一致をひきおこしている
場合が想定されます。
具体的には、KANRI_ADOCNN という変数が、Dim/Private/Public等で、
Public KANRI_ADOCNN As Recordset
などとして、どこかで「As Recordset」と宣言されており、かつ、
DAOの方が、ADOよりも、参照設定の上位に配置されている場合です。
この場合は、ADOの方の優先順位を上げるか、もしくは、
Public KANRI_ADOCNN As ADODB.Recordset
のように変更する事で解決できるでしょう。
他にも、提示されたコードには、
・変数宣言が一切見当たらないが、Option Explicit は宣言しているのか?
・なぜ、mdbファイルをOpenステートメントで開こうとしているのか?
・Function INIT_RTN() の戻り値を明記した方が良い。
などなど、いろいろと問題はありますが、いずれにしても、まずは
『どの行で、どのようなエラーになっているかを調査』するのが最優先です。