2012-02-08 8 views
0

サブルーチンに「Days」という変数があります。私は値を渡したいなどの場合は別のサブルーチン「GetDays」に複数のサブルーチン間で可変値を渡す

をその日の変数を形成:

サブデイ() 薄暗い日()バリアント 日=アレイ(1,3,5,7など、10,11) End Sub

Sub GetDay() 'ここでDaysの値を取得するにはどうすればよいですか? End Sub

答えて

1

私はあなたが何をしているか理解していませんが、私の最高の推測は、DayClassオブジェクトを設定して曜日の値を保持し、必要に応じて:VBAエディタで

(1)、

CLASSモジュールを挿入します(2)このモジュールのプロパティウィンドウで、 DayClass(例えば)に名前を変更するには(デフォルト名をオーバーライド"Class1")

(3)DayClassモジュールにこのコードを配置:

Private mDays As Variant ' member variable to hold the days array 

' initialization method to populate the array 
Private Sub Class_Initialize() 
    mDays = Array(1, 3, 5, 7, 10, 11) 
End Sub 

' little function to return a particular value from the array 
Public Property Get Day(i As Long) 
    Day = mDays(i) 
End Property 

(4)、アクションに上記のコードを参照して定期的なモジュールを挿入し、数式バーから起動することができる、その中にこの小さな機能を置くために(あなたがしたい場合):

Public Function GetDays(i As Long) 
    Dim DC As New DayClass ' DC is dim'd of type DayClass 
          ' so via DC you can get at whatever is in there 
    GetDays = DC.Day(i)  ' this function returns the i'th value of the 
          ' array in DayClass, via DayClass's "Get Day" property    
End Function 

(5)「GetDays」は、通常のコードモジュールでのパブリック関数であるので、あなたが任意のスプレッドシートのセルに次の数式を入力して、これをテストすることができます。

=GetDays(3) 

cell result = 7 
+0

ありがとう!これは役に立ちます。ただし、mDays配列は固定されておらず、ユーザー入力ごとに更新されます。私はその長さが5になることを知っていますが、入力は知られていません – user793468

+0

オブジェクトを作成せずにそれを行う方法はありませんか? Classモジュールの代わりにモジュールにmDays配列を持っていて、それを別のモジュールで呼び出すのが好きですか? – user793468

+0

モジュールでもこれを行うことができます。大まかに言えば、各正規のコードモジュールは、使用前にインスタンス化する必要がない(C#の静的クラスのような) "シングルトンクラス"と考えることができ、上に置く変数はすべてクラスメンバー変数。次に、Get Dayをプロパティではなく関数にしてから、mDaysの値を使用する前に、最初に初期化されていることを確認してください(空の場合はテスト、そうであれば初期化ルーチンを呼び出します)。 – tpascale