• ベストアンサー

SOP

お世話になります。 人がプログラムしたVBを解読しています。 その中で Call Sop(1)と言う記述があり、この記述は結構 出てきます。そしてこの括弧()内の数字はどうやら、モジュール の数と同じで、例えばモジュール2のプロシージャの中に出てくる 記述は、Call Sop(2)と記述されています。 しかし、分からないのは、CallのSubプロシージャがどこにも見あたら ないのです。どこか見えないところに記述!?してたりするのでしょうか? ダメもとで質問して見ます。 何かヒントになる様な事でも構いません。 ご教示頂けたら幸いです。

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

  • ベストアンサー
  • kiki_s
  • ベストアンサー率59% (147/248)
回答No.1

>どこか見えないところに記述!? は、あり得ないでしょう。 外部プログラムを呼び出しているなら別ですが。 前後のコードが分かりませんので、何とも言えませんが、 引数を渡して、同じ「Subプロシージャ」で処理を変えているのかも知れません。 「フラグ的」なものじゃないでしょうか? 参考までに、 ◎戻り値のないもの sub 関数名 (引数) public sub 関数名 (引数) private sub 関数名 (引数) ◎戻り値のあるもの function 関数名 (引数) as 戻り値 の組み合わせがあります。

miruchoko
質問者

お礼

早期なご回答ありがとうございます。 分かりやすいご説明ありがとうございます。 根気良く調べて行きたいと思います。

miruchoko
質問者

補足

補足説明させて下さい。 見つけました。 ずっとsubで探していたので分かりませんでした。 Function SOP(ByVal ModuleNumber As Byte) と言う記述が書かれてました。 今一意味が分かりませんが・・。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

回答No.3

厳しい事を言うようですが… Functionプロシージャぐらい勉強して下さい。 他人のコードを読むのは、割と難しい(面倒な)事です。 自分と違うコーディング思想(?)だったりする事も多いので余計に… ある程度 経験を積んでいても、他人のプログラムを読むのは結構苦痛です。 少なくとも私は。(そりゃ単純なプログラムなら大した事無いんですけどね…) …時間さえ何とかなるなら、VBの基礎を根本的に勉強してから 解析なり自分自身のコーディングなり、してください。 もし、解読する事自体が勉強なのであれば、 「よく分からない」で自己完結するんじゃなくて、 まずは分かるようになるまでヘルプとかネット検索で調べるなりして それでも どうしようもなければ、分からない部分を絞り込んで こういう場所で質問しましょう。 SubとFunctionの違いが分からなければ、それを質問するのも 手かもしれませんが、この手の疑問はネット上にゴロゴロ 転がっているはずなので、検索した方がたぶん早いと思います。

全文を見る
すると、全ての回答が全文表示されます。
回答No.2

コンパイルはかかるのですか? 想像だが、参照設定するタイプのOCXかDLLか? その参照設定のOCXかDLLはシステム領域内にあるとか? 参考までです。

miruchoko
質問者

お礼

ご回答頂きありがとうございます。 コンパイルは現在エラーがかからず、 動いているのでかかっていると考えてます。 参照設定するタイプのOCXやDLLがシステム 領域内にあるとしましたら、どのようにしてそれが 分かりますでしょうか。 お教え頂けたらありがたいです。

miruchoko
質問者

補足

補足説明させて下さい。 見つけました。 ずっとsubで探していたので分かりませんでした。 Function SOP(ByVal ModuleNumber As Byte) と言う記述が書かれてました。 今一意味が分かりませんが・・。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • ユーザーフォームから

    お世話になります。 ユーザーフォームにて、 オプションボタンでどれかを選択出来るようにし、 コマンドボタンで決定する様にしてあります。 選択した内容によりcallで別の標準モジュールに あるsubプロシージャに飛ばしたいのですが、 その記述方法が分かりません。 良くByvalの記述方法は見つかるのですが、 単純にsubプロシージャを実行したいだけなのです。 フォームの中に記述しても良いのですが、結構長くなって しまうので・・。 こういうやり方はおかしいのでしょうか。

  • vbaについて。

    お世話になっております。 AccessVBAの初心者です。 subプロシージャのボタンクリックイベントから共通モジュール(Public)の動作を呼び、変数の加減乗除の計算をさせたいです。 共通モジュールの中をif文にする時、if「(subプロシージャの)ボタンが押された」時という記述はどのようにすれば良いでしょうか。 よろしくお願いします。

  • VBとVBAのコードの違い プロシージャー呼び出し方法

    何度かお世話になっておりおります 毎回アドバイスありがとうございます 早速なのですがまた躓いてしまいアドバイスお願いします。 ~質問内容~ 標準モジュールからフォームのプロシージャーを呼び出す エラー内容 オブジェクトが必要である       オブジェクト修飾が必要など 出てきました オブジェクト修飾 というのが もう理解出来ず 本当にスタートの時点ではありますが アドバイスお願いします VBのコード 標準モジュール Sub Main() MainForm.Initialize End Sub フォームのコード Public Sub initialize()  ”コード内容”  End Sub ↑上記で記入しました フォームで宣言されているInitialize を呼び出したいのですが VBでは このままで出来るはずなのですが VBAでは オブジェクト修飾が必要です CALL をつけても エラーのままでした 少し質問がわかりにくくなってしまいましたが 標準モジュールから フォームのプロシージャーを呼び出すには なんと入れれば宜しいでしょうか? アドバイスお願いします

  • VBからモジュールでなくワークシートに書かれたマクロをCALL

    はじめまして。 VB初心者です。 VBからExcelVBAで記述したマクロを呼び出したいのですが、 標準モジュールであれば、「Call xlApp.Run」でいけるのですが、 標準モジュールでなくワークシートに書かれたマクロをCALLするにはどうしたらよいのでしょうか? ご教授ください。よろしくお願いします。

  • 変数を複数のモジュール間で共有する方法

    VBAで大きなプログラムを書いた際に、 後から修正したりしやすくするために、機能ごとにモジュールに分けて保存しておきたいと考えています。 例えば、 sub call start(a, b, c, d, e, f, ,・・・・・) call first(a, b, c, d, e, f, ,・・・・・) call second(a, b, c, d, e, f, ,・・・・・) ・・・・・ end sub のようにcallで繋いでいけば、複数のモジュールに機能を分散させることができるのですが、 変数をいちいち、括弧内に入れる必要があり、 後から修正するのが大変です。 sub call start() call first() call second() ・・・・・ end sub のように変数を書かずにcallを使いたいのですが、 複数のモジュール間で変数を共有することってできないのでしょうか? また、Excelのデータシートには、データ→グループ化という機能がついていますが こういうような機能はVBAにはないのでしょうか?

  • VBAのクラスのインスタンス化のタイミングについて

    こんにちはvbaのクラスのインスタンス化について質問があります。 私は普段使えないイベントを使用するときにクラスモジュールに WithEventsを使ってイベントを作成し それをプロシージャからインスタンス化して 作成したイベントを有効にするという手法をよく使います。 Excelのように最初からワークブックにイベントがある場合は、 ワークブックを開いたと同時にWorkbook_Openプロシージャから クラスをインスタンス化して作成したイベントを有効にするということが可能なのですが、 CATIAやInventorなど、一部のアプリケーションでは、 最初から使えるイベントが見つからず、 Subプロシージャでインスタンス化する方法しかみつかりません。 しかし、Subプロシージャを実行させるためには、 ボタンなどユーザー側に何らかのアクションとってもらうしかなく、 自動化するために作成したイベントなのに、そのイベントを有効にするために ユーザーにボタンを押してもらうという矛盾した構成になってしまいます。 クラスをインスタンス化する方法はSubプロシージャに記述するしかないのでしょうか? 自分がよく使っているコードを下に記述します。 下の例は、Excelで新しくブックを開いたときにメッセージを出すプログラムです。 アプリケーションレベルのイベントをクラスモジュールで作成しています。 これを有効にするためには標準モジュール内の Event_ONプロシージャを実行しなければなりません。 モジュールを実行する前まではいくら新しいブックを開いてもメッセージは出ません これをどのうようにしたらいいかご教授ください。 Excelの例 Classモジュール「Class1」に記述 -------------------------------------------------------------------- Private WithEvents APP As Application Private Sub APP_NewWorkbook(ByVal Wb As Workbook) MsgBox "新しいブックが開かれました" End Sub Private Sub Class_Initialize() Set APP = Application End Sub -------------------------------------------------------------------- 標準モジュール「Module1」に記述 -------------------------------------------------------------------- Dim CLS As class1 Public Sub Event_ON() Set CLS = New class1 End Sub --------------------------------------------------------------------

  • VBAのプロシージャのことで

    TEST1のプロシージャ内に使用している readfileという変数の中にテストという文字列を代入し、 文字列が代入された状態で Callによって別のプロシージャを読みにいったとき TEST(変数)に入った文字列ごと持っていくには どの様に記述すればよいかどなたか教えていただけませんでしょうか・・・。。 ----------------------------------------------------------- Sub TEST () Dim readfile As String readfile = "テスト" Call TEST2 End Sub ----------------------------------------------------------- Sub TEST2() readfile ←テストという文字列をTESTプロシージャから持ってきたい End Sub ----------------------------------------------------------- 単純に書いてみたコードですが、この様なことは可能なのでしょうか? すいませんがいただけないでしょうか><;

  • 【VBA】値の引渡しについて

    VBA初心者です。 VBAの勉強もかねて、今、【 標準モジュール 】と【 UserForm 】を用いて あるプログラムを作っています。 その中で、プロシージャ間をまたいで 『 値の受け渡し 』をしたいと思っています。 今回、質問をさせていただいたのは、その『 値の受け渡し 』が 「できる場合」と「できない場合」があるので、常にできるように その対応方法を教えていただきたく、今回投稿させていただきました。 ---------------------------------------------------------------- 今困っているパターンを例にあげると、 ユーザフォームの中に2つのボタン 「OK」ボタンと「キャンセル」ボタンが あるとします。 【 「キャンセル」ボタンがおされた場合には「終了する」 】という 仕組みにしたいと思っています。 そこで以下のようなプログラムを作ろうとしました。 ---------------------------------------------------------------- ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 1) General部にPublic変数(以下「P変数」)を宣言する。      Public cancel as byte 2) 【標準モジュール】のプロシージャから【フォーム】の「Userform1」を表示させる。          Sub A処理()           Userform1.show           End sub   3) 【フォーム】のUserform1._CommandButton2に以下のように記述する。    (キャンセルボタンがクリックされた場合)          Private Sub CommandButton2_Click()       cancel = False       Unload Me       Exit Sub      End Sub 4) 【標準モジュール】のプロシージャの、一連の処理の最後に    以下のようにプログラムを記述する。          Sub A処理()           Userform1.show      ↓      ↓           if cancel = false then                exit sub           end if      End sub ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 1)~4)のようにして 「キャンセルがクリックされた場合、すべての処理を終了する。」 というようなプログラムを記述してみました。 すると、デバッグを使って、変数「cancel」の中身を見てみると 3)の段階で、その変数「cancel」に「false」値を格納したはずなのに、 プロシージャ間をまたいだことで 4)の段階では、変数「cancel」の中身が必ず「""」と 値が空値になってしまいます。 4)の段階でも、変数「cancel」の値が保持できる、 何かしらの方法はないでしょうか。 回答をよろしくお願いします。

  • エクセルからアクセスのプロシージャーを実行させるには?

    エクセルの標準モジュールには→エクセル側のプロシージャー アクセスの標準モジュールには→アクセス側のプロシージャー と言う名前のプロシージャーが作成されています。 これをどちらもエクセル側で実行させることは出来ないでしょうか? 「アクセス側のプロシージャー」ではアクセス側の処理が実行されます。 でもできればエクセル側のコマンドボタンを一回押すだけで エクセルとアクセスの両方の処理を実行させたいです。 エクセルの標準モジュールには Sub エクセル側のプロシージャー() Call アクセス側のプロシージャー End Sub これを実行すると コンパイルエラーになります。 どうすれば一度で二つのアプリケーションのプロシージャーを実行させることが可能でしょうか? よろしくお願い致します。

  • 標準モジュールとイベントの質問

    初めて質問します。 ビジュアルベーシックで標準モジュールで ボタンのクリックイベントを実行したいのですが どうやってプログラムすればいいんでしょうか? 今の会社に入っていきなりVBの仕事させられて とっても困っています。 Private Sub Frm1Command1_Click() Call Module1.Frm1Command1_Click End Sub こんな書き方じゃなくて、標準モジュール内で Public Sub Command1_Click() MsgBox "sine" End Sub って書いて実行できるようにしなくてはダメなんです。 どうすればいいんでしょうか? もしかして無理なんでしょうか? これ、上司の嫌がらせだったらイヤですね・・・。