こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

他人様の作成したプログラムの改修をやることになりましたVB初心者です。

デザイン画面でコードを選択し、「定義」を右クリックすると
「'xxx' は非表示であるため、ここへはジャンプできません。」
と表示されます。
また、exe ファイルの実行時と比べて、プロジェクトウインドウに表示されるフォームやデザイナも少ないです。

これら非表示のモジュール(?)を表示するにはどのようにやればいいのでしょうか。
ご教示お願いいたします。

環境は Windows XP(SP3), Visual Basic 6.0 (SP6) です。

投稿日時 - 2011-07-27 13:03:55

QNo.6902765

困ってます

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

(1)
このプロジェクトを実行すると、exeファイルと同じように
機能しますか?


(2)
>プロジェクトエクスプローラ内にないフォーム・デザイナも表示されます。
このフォームデザイナをクリックするとフォームの
デザインビューが表示されますか。示された
フォームのヘッダには ファイル名(Form) のように
表示されていますか。
また、プロジェクトエクスプローラには
ファイル名(ファイル名.frm)
のように表示されていますか。


(3)
(2)が違う場合、
ファイル名(ファイル名.dsr)
のような名前になっていませんか。


(4)
(2)、(3)も違う場合はフォルダの中にある他の
ファイルの拡張子はどのようなものがありますか。

投稿日時 - 2011-07-28 16:30:49

補足

(1) はい、exe と同じように動作します。

(2) はい、フォームのデザインビューが表示されます。
フォームのヘッダには frmINIT (Form), frmREPORT (Form) のように表示されます。
プロジェクトエクスプローラには frmINIT (frmINIT.frm), frmREPORT (frmREPORT.frm) のように表示されています。

(3) 「デザイナ」フォルダの中には 5 つ、repKAISEKI01 (repKAISEKI01.Dsr) のようなファイルがあります。

(4) .frm, .bas, Dsr です。

投稿日時 - 2011-07-28 18:04:52

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(15)

ANo.15

iniファイルもそうですが、最初から作成して
おくものか、あるいは新規インストールした場合に、
いずれかのタイミングでプログラムから作成
されるものか、なければ作成されるものか、
あるいは、都度作成、削除が
されるものか、そういったファイルが他に
存在するかも確認が必要です。

必要に、応じては一時ファイルとして作成する
コードの追加が必要になるかもしれません。

意地悪く突然そうしたファイルが失われると
どうなるか、またどう対応するかの負荷テスト
も必要です。


そのためのロールプレイングとも言えますが。

投稿日時 - 2011-07-29 16:22:00

お礼

ご回答、恐れ入ります。
おっしゃられることを頭に入れてテストしてみます。

ご忠告ありがとうございました。

投稿日時 - 2011-07-29 16:29:19

ANo.14

>iniファイルがあったので、それを新しいフォルダ
>にコピーしたら正常動作しました。

一応、一通りロールプレイングをして、
問題がないか、確認が必要です。
他にリンクが切れているものが
出る可能性もあるので、あとの
作業は慎重にしてください。

投稿日時 - 2011-07-29 15:31:32

お礼

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

投稿日時 - 2011-07-29 15:35:10

ANo.13

>「.Show」でプロジェクト全体を検索しました。
>検索結果が(あるべき)フォーム数より少なかったです。
その方法は対象がフォームで通常のコマンドで表示している場合には
有効ですが、今は状況もよく把握できない状態です。通常の手法とは
違う可能性があるのですから、それで調査できているとは言えません。

例えば、
> C:\Program Files\AReport15\ActRpt15.dll
ActiveReport を使っているのですから、レポートの表示は
 ActiveReport1.Run
とかになります。「.Show」では検索できません。
実際にフォームを見比べて、プロジェクトに存在しないと言っている
画面を表示させる部分のプログラムで何をしているかを確認して下さい。

投稿日時 - 2011-07-29 14:15:04

補足

ActiveReport のコードを ReportStart を重点的に読みました。
プロジェクトに存在しないフォームへのコードはありませんでした。

すみません、初心者丸出しで。
お付き合いいただきありがとうございます。

投稿日時 - 2011-07-29 14:52:32

ANo.12

確認のため:

元のプロジェクトと比べて、入れなおしたプロジェクト
のプロジェクトエクスプローラとフォルダにあるファイル数は
変化していますか。


元のプロジェクトにあるフォルダのファイルで、Excel、テキスト、
CSV、フォルダなど他のファイルは存在していませんか。





>「実行時エラー '9': インデックスが有効範囲内にありません。」
変数uvlng_AnaLCDataPriを取得する参照先がプロジェクトに存在
するか検索で確認してみてください。

投稿日時 - 2011-07-29 13:11:39

補足

> 元のプロジェクトと比べて、入れなおしたプロジェクト
> のプロジェクトエクスプローラとフォルダにあるファイル数は
> 変化していますか。

はい、.DCA, .dsx, .frx, MSSCCPRJ.SRC, VB2(~7).tmp ファイルが増えました。

> 元のプロジェクトにあるフォルダのファイルで、Excel、テキスト、
> CSV、フォルダなど他のファイルは存在していませんか。

存在していません。

> 変数uvlng_AnaLCDataPriを取得する参照先がプロジェクトに存在
> するか検索で確認してみてください。

取得時の値が、元の版と新しいフォルダ版で違っておりました。
同じデータを解析しているのに、なぜ・・・。

投稿日時 - 2011-07-29 13:39:44

お礼

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

iniファイルがあったので、それを新しいフォルダにコピーしたら正常動作しました。
お騒がせしました。

投稿日時 - 2011-07-29 13:50:32

ANo.11

>ActiveXファイルが存在しているはずですが。
参照設定してると思うんだけど、そうであれば参照設定画面で表示
される物理パスで確認できるのでは?

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

投稿日時 - 2011-07-29 10:57:04

補足

> >ActiveXファイルが存在しているはずですが。
> 参照設定してると思うんだけど、そうであれば参照設定画面で表示
> される物理パスで確認できるのでは?

C:\Program Files\AReport15\ActRpt15.dll
です。

> exe ファイルの実行時に表示される画面は、ボタンをクリックとか
> で表示されるものですよね?

はい。

> それがプロジェクトに見つからないと
> 言っているように解釈したのですが、フォームを起動する場所も
> 見つからないのですか?

「.Show」でプロジェクト全体を検索しました。
検索結果が(あるべき)フォーム数より少なかったです。

いろいろ惑わせてすみません。もう少しお付き合いお願いいたします。

投稿日時 - 2011-07-29 13:12:49

ANo.10

dca  ActiveX デザイナ キャッシュ
dsx  Active デザイナ バイナリ ファイル
frx  バイナリ フォーム ファイル
vbw  Visual Basic プロジェクト ワークスペース ファイル


したがて、ActiveXファイルが存在しているはずですが。

No8の要領で、プロジェクトから追加できるファイルはすべて
追加してみてください。

投稿日時 - 2011-07-28 19:44:36

補足

なんども回答ありがとうございます。

はい、ActiveX を使っております。

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

投稿日時 - 2011-07-29 11:21:34

ANo.9

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

投稿日時 - 2011-07-28 18:54:41

補足

それは大丈夫です。

投稿日時 - 2011-07-28 19:21:18

ANo.8

もし、No7の操作で新しいフォルダに
ファイルが今までよりも増えていたら、

No7の最後、

>(1)、(2)を実行してフォルダの中身と、プロジェクトを
>立ち上げてプロジェクトエクスプローラの中身を
>比較してみてください。

ではなく、一度あたらしいフォルダのプロジェクトの
プロジェクトエクスプローラのオブファイルをを一度
すべて解放して、あたらしいフォルダにあるファイルを
追加してみてください。

投稿日時 - 2011-07-28 18:49:33

補足

今日は時間がきましたので、明日実行してみます。

いろいろお付き合いいただいて恐縮です。
明日もよろしくお願いいたします。

投稿日時 - 2011-07-28 19:29:20

ANo.7

一度、

(1)
新規に他のフォルダを作っておき、
ファイルから「名前をつけてプロジェクトの保存」
を選択し、そのままの名前で保存。

(2)
プロジェクトエクスプローラにあるオブジェクトの
上で右リックから「名前をつけてxxの保存」を選択し、
(1)と同じフォルダにすべて保存。


(1)、(2)を実行してフォルダの中身と、プロジェクトを
立ち上げてプロジェクトエクスプローラの中身を
比較してみてください。

投稿日時 - 2011-07-28 18:40:23

補足

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

投稿日時 - 2011-07-28 19:19:06

ANo.5

一応、VBを10年やってるから VB6 が現役の頃から知ってるけど、
インスタンスは VB が勝手に内部で用意する部分だから表に出て
くることは無いと思うよ。(それでプログラムに困った事もないし)

> 試しに、left や mid などの関数の「定義」をクリックしても
>「'Left' は非表示であるため、ここへはジャンプできません。」
>とダイアログが出てきました。
それは問題点を切り分けるべきでは?新規プロジェクトで確認
した限り、
・フォーム上のオブジェクトのインスタンスは定義からは表示できない。
(オブジェクトブラウザではProject1とかの下に表示)
・インスタンスのメンバは、クラスのメンバが定義から表示される。
・Left Mid といった関数は定義が表示される。
です。名前空間を辿ると VBA.Strings.Mid のようなので、それを
書いてみるとか。それで上手くいくようになるんだったら、
VB が用意している Mid じゃない Mid が存在しているのかも。

> ファイルが分割
やった事ないのでどのような操作か分かりません。DLL(OCXなど) にして
外部参照とは違いますよね?そもそも EXE としてコンパイル可能なら
プロジェクトに追加する必要のあるものは無いと思っていましたが。

> exe ファイルの実行時と比べて、プロジェクトウインドウに
> 表示されるフォームやデザイナも少ないです。
これもよく分からない表現です。同じフォームを使いまわすだけでも
そんな動きを作れるわけで、だから何が問題なの?といった気も
します。ちゃんとコードで呼び出されているフォームがどこに
存在するものか1つ1つ確認すべきでは?

投稿日時 - 2011-07-28 15:51:23

補足

> DLL(OCXなど) にして外部参照とは違いますよね?

はい、違います。

> そもそも EXE としてコンパイル可能なら
> プロジェクトに追加する必要のあるものは無いと思っていましたが。

はい、私の認識もそうでしたが、私の見る限りフォームの数が足りないです。

> 同じフォームを使いまわすだけでもそんな動きを作れるわけで、

コードを見たところ、動的にコントロールを作成するようなコードはありませんでした。

詳しい解説ありがとうございました。もう少しお付き合いお願いいたします。

投稿日時 - 2011-07-28 17:55:53

ANo.4

>確認しましたところ、プロジェクトエクスプローラ上に表示
>されているフォームは4つ、フォルダ内に表示されているフォームも4つです。

ということであれば、

>exe ファイルの実行時と比べて、プロジェクトウインドウに
>表示されるフォームやデザイナも少ないです。

このことと合わせて考えるとファイルが分割されている
可能性が一番高いように思われます。

ほかに関連するフォルダやファイルがあるならば、
プロジェクトエクスプローラのプロジェクト名の
ところで右クリックして、「追加」から「ファイルの追加」
を選択して必要なファイルをプロジェクトに追加
すればいいのですが。

投稿日時 - 2011-07-28 11:48:03

補足

何度もご回答ありがとうございます。

.vbp ファイルのあるフォルダのファイルは全てプロジェクトエクスプローラーに表示されています。
ほかに関連するファイルは支給されていません。
なのにデザイナ画面から実行すると、プロジェクトエクスプローラ内にないフォーム・デザイナも表示されます。

何度もすみません。
ほかに考えられる原因はあるでしょうか?

投稿日時 - 2011-07-28 13:14:07

ANo.3

確認ですが、プロジェクトは一つのフォルダにまとめて
収められているとして、そのフォルダにはプロジェクト
エクスプローラに表示されているフォーム以外のフォームが
ありますか?

投稿日時 - 2011-07-28 10:51:36

補足

ご回答ありがとうございます。

確認しましたところ、プロジェクトエクスプローラ上に表示されているフォームは4つ、フォルダ内に表示されているフォームも4つです。

初心者でうまく説明できていなくてすみませんです。

投稿日時 - 2011-07-28 11:11:52

ANo.2

画像から、

Call Render_PerPrintReport(Me.arxxxxx

のように見えますが、たぶん Me.arxxxx とあることから、
コード表のヘッダー部分にfrmREPORTとありますから、
このフォームのテキストボックスか何かをさしているのでは
と思われます。したがって、定義を指定してもオブジェクト
ブラウザには表示できない、ということになります。

試しに、オブジェクトブラウザを起動して、arxxxxを
コンボボックスに貼り付け、検索ボタンを押してみて
ください。多分、検索結果にライブラリはUnKnown1、
クラスはForm、メンバはarxxxx、と表示されると
思います。

定義を選択して表示されるのはオブジェクトライブラリ
にコード定義されるていることが最低条件です。
たとえば、関数、プロシージャ、プロパティ、
などです。

投稿日時 - 2011-07-27 22:25:27

補足

回答ありがとうございます。

試しに、left や mid などの関数の「定義」をクリックしても「'Left' は非表示であるため、ここへはジャンプできません。」とダイアログが出てきました。

ありがとうございます。

ただ、まだ実行ファイルの画面と比べるとプロジェクトエクスプローラーに表示されるフォーム数、デザイナ数が足りません。
これら非表示のモジュールを表示させる方法を教えてください。

よろしくお願いします。

投稿日時 - 2011-07-28 10:08:20

ANo.1

情報が少ないので、適当な回答が出せません。

もう少し状況を詳しく書いたら他の方からも多く助言が
得られると思いますよ。

投稿日時 - 2011-07-27 14:28:33

補足

回答ありがとうございます。

どこをどう詳しく書けばもわからないので、画像を追加しました。

「arXXXX」を右クリックして「定義」をクリックすると、
「'arXXXX' は非表示であるため、ここへはジャンプできません。」というエラーダイアログがでます。

投稿日時 - 2011-07-27 15:46:37

あなたにオススメの質問