• ベストアンサー

VB6で、非表示モジュール(?)の表示方法

他人様の作成したプログラムの改修をやることになりましたVB初心者です。 デザイン画面でコードを選択し、「定義」を右クリックすると 「'xxx' は非表示であるため、ここへはジャンプできません。」 と表示されます。 また、exe ファイルの実行時と比べて、プロジェクトウインドウに表示されるフォームやデザイナも少ないです。 これら非表示のモジュール(?)を表示するにはどのようにやればいいのでしょうか。 ご教示お願いいたします。 環境は Windows XP(SP3), Visual Basic 6.0 (SP6) です。

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

  • ベストアンサー
  • piroin654
  • ベストアンサー率75% (692/917)
回答No.6

(1) このプロジェクトを実行すると、exeファイルと同じように 機能しますか? (2) >プロジェクトエクスプローラ内にないフォーム・デザイナも表示されます。 このフォームデザイナをクリックするとフォームの デザインビューが表示されますか。示された フォームのヘッダには ファイル名(Form) のように 表示されていますか。 また、プロジェクトエクスプローラには ファイル名(ファイル名.frm) のように表示されていますか。 (3) (2)が違う場合、 ファイル名(ファイル名.dsr) のような名前になっていませんか。 (4) (2)、(3)も違う場合はフォルダの中にある他の ファイルの拡張子はどのようなものがありますか。

aztek
質問者

補足

(1) はい、exe と同じように動作します。 (2) はい、フォームのデザインビューが表示されます。 フォームのヘッダには frmINIT (Form), frmREPORT (Form) のように表示されます。 プロジェクトエクスプローラには frmINIT (frmINIT.frm), frmREPORT (frmREPORT.frm) のように表示されています。 (3) 「デザイナ」フォルダの中には 5 つ、repKAISEKI01 (repKAISEKI01.Dsr) のようなファイルがあります。 (4) .frm, .bas, Dsr です。

その他の回答 (14)

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.15

iniファイルもそうですが、最初から作成して おくものか、あるいは新規インストールした場合に、 いずれかのタイミングでプログラムから作成 されるものか、なければ作成されるものか、 あるいは、都度作成、削除が されるものか、そういったファイルが他に 存在するかも確認が必要です。 必要に、応じては一時ファイルとして作成する コードの追加が必要になるかもしれません。 意地悪く突然そうしたファイルが失われると どうなるか、またどう対応するかの負荷テスト も必要です。 そのためのロールプレイングとも言えますが。

aztek
質問者

お礼

ご回答、恐れ入ります。 おっしゃられることを頭に入れてテストしてみます。 ご忠告ありがとうございました。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.14

>iniファイルがあったので、それを新しいフォルダ >にコピーしたら正常動作しました。 一応、一通りロールプレイングをして、 問題がないか、確認が必要です。 他にリンクが切れているものが 出る可能性もあるので、あとの 作業は慎重にしてください。

aztek
質問者

お礼

はい、慎重に一通り動かしてみます。

  • MARU4812
  • ベストアンサー率43% (196/452)
回答No.13

>「.Show」でプロジェクト全体を検索しました。 >検索結果が(あるべき)フォーム数より少なかったです。 その方法は対象がフォームで通常のコマンドで表示している場合には 有効ですが、今は状況もよく把握できない状態です。通常の手法とは 違う可能性があるのですから、それで調査できているとは言えません。 例えば、 > C:\Program Files\AReport15\ActRpt15.dll ActiveReport を使っているのですから、レポートの表示は  ActiveReport1.Run とかになります。「.Show」では検索できません。 実際にフォームを見比べて、プロジェクトに存在しないと言っている 画面を表示させる部分のプログラムで何をしているかを確認して下さい。

aztek
質問者

補足

ActiveReport のコードを ReportStart を重点的に読みました。 プロジェクトに存在しないフォームへのコードはありませんでした。 すみません、初心者丸出しで。 お付き合いいただきありがとうございます。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.12

確認のため: 元のプロジェクトと比べて、入れなおしたプロジェクト のプロジェクトエクスプローラとフォルダにあるファイル数は 変化していますか。 元のプロジェクトにあるフォルダのファイルで、Excel、テキスト、 CSV、フォルダなど他のファイルは存在していませんか。 >「実行時エラー '9': インデックスが有効範囲内にありません。」 変数uvlng_AnaLCDataPriを取得する参照先がプロジェクトに存在 するか検索で確認してみてください。

aztek
質問者

お礼

> > 変数uvlng_AnaLCDataPriを取得する参照先がプロジェクトに存在 > > するか検索で確認してみてください。 > > 取得時の値が、元の版と新しいフォルダ版で違っておりました。 > 同じデータを解析しているのに、なぜ・・・。 iniファイルがあったので、それを新しいフォルダにコピーしたら正常動作しました。 お騒がせしました。

aztek
質問者

補足

> 元のプロジェクトと比べて、入れなおしたプロジェクト > のプロジェクトエクスプローラとフォルダにあるファイル数は > 変化していますか。 はい、.DCA, .dsx, .frx, MSSCCPRJ.SRC, VB2(~7).tmp ファイルが増えました。 > 元のプロジェクトにあるフォルダのファイルで、Excel、テキスト、 > CSV、フォルダなど他のファイルは存在していませんか。 存在していません。 > 変数uvlng_AnaLCDataPriを取得する参照先がプロジェクトに存在 > するか検索で確認してみてください。 取得時の値が、元の版と新しいフォルダ版で違っておりました。 同じデータを解析しているのに、なぜ・・・。

  • MARU4812
  • ベストアンサー率43% (196/452)
回答No.11

>ActiveXファイルが存在しているはずですが。 参照設定してると思うんだけど、そうであれば参照設定画面で表示 される物理パスで確認できるのでは? >> 同じフォームを使いまわすだけでもそんな動きを作れるわけで、 >コードを見たところ、動的にコントロールを作成するようなコードはありませんでした。 コントロール?画面はフォームですよね? exe ファイルの実行時に表示される画面は、ボタンをクリックとか で表示されるものですよね?それがプロジェクトに見つからないと 言っているように解釈したのですが、フォームを起動する場所も 見つからないのですか?(フォームを起動するイベントも書かれていない?) それは無いと思うのですが。。。 そこに書かれているオブジェクト名でオブジェクトブラウザを検索 (定義へ移動ではなく、手入力で検索)した結果を見れば、何か分かる 気がしますが。

aztek
質問者

補足

> >ActiveXファイルが存在しているはずですが。 > 参照設定してると思うんだけど、そうであれば参照設定画面で表示 > される物理パスで確認できるのでは? C:\Program Files\AReport15\ActRpt15.dll です。 > exe ファイルの実行時に表示される画面は、ボタンをクリックとか > で表示されるものですよね? はい。 > それがプロジェクトに見つからないと > 言っているように解釈したのですが、フォームを起動する場所も > 見つからないのですか? 「.Show」でプロジェクト全体を検索しました。 検索結果が(あるべき)フォーム数より少なかったです。 いろいろ惑わせてすみません。もう少しお付き合いお願いいたします。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.10

dca  ActiveX デザイナ キャッシュ dsx  Active デザイナ バイナリ ファイル frx  バイナリ フォーム ファイル vbw  Visual Basic プロジェクト ワークスペース ファイル したがて、ActiveXファイルが存在しているはずですが。 No8の要領で、プロジェクトから追加できるファイルはすべて 追加してみてください。

aztek
質問者

補足

なんども回答ありがとうございます。 はい、ActiveX を使っております。 プロジェクトエクスプローラー内のファイルを全て解放して、追加しなおしました。 今度は動作中に「実行時エラー '9': インデックスが有効範囲内にありません。」が表示されます。 rvtyp_NowAnaRec.mdat_AEday = uatyp_AnaLCData(uvlng_AnaLCDataPri - 1).K_DSOKUTEIBI のuvlng_AnaLCDataPri が 0 のままで初期化されていないです。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.9

もし、単にフォルダオプションで 隠しファイルおよび隠しフォルダを表示しない、 などにチェックが入っている、ということは ないでしょうね?

aztek
質問者

補足

それは大丈夫です。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.8

もし、No7の操作で新しいフォルダに ファイルが今までよりも増えていたら、 No7の最後、 >(1)、(2)を実行してフォルダの中身と、プロジェクトを >立ち上げてプロジェクトエクスプローラの中身を >比較してみてください。 ではなく、一度あたらしいフォルダのプロジェクトの プロジェクトエクスプローラのオブファイルをを一度 すべて解放して、あたらしいフォルダにあるファイルを 追加してみてください。

aztek
質問者

補足

今日は時間がきましたので、明日実行してみます。 いろいろお付き合いいただいて恐縮です。 明日もよろしくお願いいたします。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.7

一度、 (1) 新規に他のフォルダを作っておき、 ファイルから「名前をつけてプロジェクトの保存」 を選択し、そのままの名前で保存。 (2) プロジェクトエクスプローラにあるオブジェクトの 上で右リックから「名前をつけてxxの保存」を選択し、 (1)と同じフォルダにすべて保存。 (1)、(2)を実行してフォルダの中身と、プロジェクトを 立ち上げてプロジェクトエクスプローラの中身を 比較してみてください。

aztek
質問者

補足

フォルダの中には、.DCA, .dsx, .frx, ,vbw ファイルができましたが、これは違いますよね?

  • MARU4812
  • ベストアンサー率43% (196/452)
回答No.5

一応、VBを10年やってるから VB6 が現役の頃から知ってるけど、 インスタンスは VB が勝手に内部で用意する部分だから表に出て くることは無いと思うよ。(それでプログラムに困った事もないし) > 試しに、left や mid などの関数の「定義」をクリックしても >「'Left' は非表示であるため、ここへはジャンプできません。」 >とダイアログが出てきました。 それは問題点を切り分けるべきでは?新規プロジェクトで確認 した限り、 ・フォーム上のオブジェクトのインスタンスは定義からは表示できない。 (オブジェクトブラウザではProject1とかの下に表示) ・インスタンスのメンバは、クラスのメンバが定義から表示される。 ・Left Mid といった関数は定義が表示される。 です。名前空間を辿ると VBA.Strings.Mid のようなので、それを 書いてみるとか。それで上手くいくようになるんだったら、 VB が用意している Mid じゃない Mid が存在しているのかも。 > ファイルが分割 やった事ないのでどのような操作か分かりません。DLL(OCXなど) にして 外部参照とは違いますよね?そもそも EXE としてコンパイル可能なら プロジェクトに追加する必要のあるものは無いと思っていましたが。 > exe ファイルの実行時と比べて、プロジェクトウインドウに > 表示されるフォームやデザイナも少ないです。 これもよく分からない表現です。同じフォームを使いまわすだけでも そんな動きを作れるわけで、だから何が問題なの?といった気も します。ちゃんとコードで呼び出されているフォームがどこに 存在するものか1つ1つ確認すべきでは?

aztek
質問者

補足

> DLL(OCXなど) にして外部参照とは違いますよね? はい、違います。 > そもそも EXE としてコンパイル可能なら > プロジェクトに追加する必要のあるものは無いと思っていましたが。 はい、私の認識もそうでしたが、私の見る限りフォームの数が足りないです。 > 同じフォームを使いまわすだけでもそんな動きを作れるわけで、 コードを見たところ、動的にコントロールを作成するようなコードはありませんでした。 詳しい解説ありがとうございました。もう少しお付き合いお願いいたします。

関連するQ&A

専門家に質問してみよう