2016-07-23 7 views
0

Excel 2007ワークブックには、3つのExcelモジュールがあり、それぞれに1つのサブルーチンが含まれています。 Driverサブ(UpdateDataFromOracle)は、サブUpdateResponseとUpdateSchedを呼び出します。コードは正常に動作していますが、呼び出される各サブシステムの「戻りコード」を確認したいと思います。私は、ドライバサブがユーザに見えるようにしたいので、私はモジュール1と2のプライベートをプライベートにしました。 モジュール1プライベートサブUpdateResponse モジュール2プライベートサブはUpdateSched モジュール3公共サブUpdateDataFromOracleチェックプライベートサブの戻り値

はここでここで呼び出されたサブ

Option Explicit 
Private Sub UpdateResponse() 
'DECLARE VARIABLES 
'... 
If Sheets(strTempSheet).UsedRange.Rows.Count > 10 Then 
    UpdateResponse = 0 
Else UpdateResponse = 90 
End If 
End Sub 

からコードを呼び出すにはのドライバサブ

Sub UpdateDataFromOracle() 
'DECLARE VARIABLES 
Dim varSchedReturn as variant 
'... 
Call UpdateResponse 
Call UpdateSched 
'I Would like to insert the "return code" check here 
End Sub 

からのコードですプライベートサブシステム私は "コール"を放棄して "

Application.Run "Module1.UpdateResponse" 

しかし、私はそのようなリターンコードを取得する方法を理解できません。 私はUpdateResponseとUpdateSched Private Functionsも作成しましたが、私はまだ戻りコードを取得する方法を理解できませんでした。問題は、私は公共の機能を残す場合は呼び出されたサブルーチンがユーザーに表示されていることである

Else UpdateResponse = 90 

:私はUpdateResponseを作って、パブリック関数をUpdateSchedとき 、私のようなと呼ばれる潜水艦の最後に文を使用することができます。

私の目標は、ドライバサブのみをユーザに見せ、ドライバサブの呼び出されたサブシステムから何らかの「リターンコード」を評価できるようにすることです。 これを見ていただきありがとうございます。

+1

ユーザーに見せたくない機能を持つモジュールで 'Option Explicit'の下に' Option Private Module'を使用してください:http://stackoverflow.com/q/296696/293078 –

+0

注: Subと同じ名前の戻り値が必要な場合は、Subの代わりにFunctionを使用してください。 – user3598756

+0

Hello Doug。 Option Explicitの下にあるOption Private Moduleがこのトリックを行いました。私は呼び出されたサブルーチンを関数に変えました。ドライバプログラムでは、varModule1Return = UpdateResponseと別のステートメントを使用していました。varModule2Return = UpdateSchedあなたが認識していると思いますが、等号の右側に関数名を配置すると、実行される。あなたのすべての協力に感謝します。 – user3138025

答えて

-1

私が使用したWindows Excelのオプションの1つは、後のプロセスで取得できるユーザーのマシン上の値を設定することです。 https://msdn.microsoft.com/en-us/library/z46c489x(v=vs.110).aspx?cs-save-lang=1&cs-lang=vb#code-snippet-1

Excelワークブックの一部のプロパティを設定することも、Excelに名前や値を関連付けることもできます。 (名前付き範囲の一部)。

最後に、Windowsレジストリに値を追加したり変更することができます。

+0

これはあまりにも複雑です。 –

1

私は完全に質問を読んで、しかしその後

Private Function UpdateResponse() As Integer 
    'DECLARE VARIABLES 
    '... 
    If Sheets(strTempSheet).UsedRange.Rows.Count > 10 Then 
     UpdateResponse = 0 
    Else 
     UpdateResponse = 90 
    End If 
End Function 

を機能するためにそれらを変更していない。また

Dim response   ' As Variant or Integer 
response = Application.Run("Module1.UpdateResponse") 

Option Private ModuleまたはModule1の中にパブリック変数を持つ2つのより良い方法があります

3 Ways to Call a Private Sub from Another Module

+0

こんにちはスライ、それは私のために働いていないようでした。呼び出された関数の中の "Option Private Module"を使うことはやっかいなことでした。その提案は上記のDoug Glancyからのものです。 – user3138025

0

回答@Douグランシーがうまくいった。それは私の元の質問にコメントとして記載されているので、私は彼の答えが正しいことを示すためにこの回答を追加しています。