1

次の VBA コードがあります。

Option Explicit

Private a(2) as Double
Private b(2) as Double

Public Function Hello(X1 As Double, X2 As Double) As Double

    a(1) = X1 + X2
    a(2) = X1/X2
    b(1) = X1
    b(2) = X2^2

Hello = a(1)+a(2)+b(1)+b(2)

End Function

関数内で、、、、をHello定義a(1)しました。a(2)b(1)b(2)

X1ただし、とを引数として受け取り、 、、、X2の値を吐き出す関数またはサブルーチンを作成したいと考えています。これは、モジュール内の約 20 個の関数で 、 、 の上記の定義を使用しており、論文を使用する各関数で次のことを行う必要がないようにしたいためです。a(1)a(2)b(1)b(2)a(1)a(2)b(1)b(2)

    a(1) = X1 + X2
    a(2) = X1/X2
    b(1) = X1
    b(2) = X2^2
4

2 に答える 2

1

これをクラス オブジェクトとプロパティ/メソッドで構造化します。これを試してみてくださいClass1

Option Explicit

Private a(2) As Double, b(2) As Double

Public Sub Initialize(ByVal x1 As Double, ByVal x2 As Double)
    a(1) = x1 + x2
    a(2) = x1 / x2
    b(1) = x1
    b(2) = x2 ^ 2
End Sub

Public Property Get Hello() As Double
    Hello = a(1) + a(2) + b(1) + b(2)
End Property

Public Property Get Goodbye() As Double
    Goodbye = a(1) - a(2) + b(1) - b(2)
End Property

Public Function BusyWork(ByVal t As Double) As Double
    Dim i As Integer, x As Double
    x = 0#
    For i = 1 To 2
        x = x + (a(i) - t) * (b(i) - t)
    Next i
    BusyWork = Sqr(x)
End Function

そして、それをモジュールで次のように使用します

Public Sub UseClass()
    Dim c As New Class1

    c.Initialize 10.6, -4#

    Debug.Print c.Hello
    Debug.Print c.Goodbye
    Debug.Print c.BusyWork(-1#)
End Sub

VBA クラスの詳細については、次を参照してください。

于 2012-09-05T13:08:01.810 に答える
0

異なる関数から配列に値を代入するだけの場合は、共通のプロシージャを作成してすべての関数から呼び出すことができます。この例を参照してください

Option Explicit

Dim a(2) As Double, b(2) As Double
Dim Hello As Double

Function FOne()
    '
    '~~> Rest of the code
    '      
    Sample 1,2
End Function

Function FTwo()
    '
    '~~> Rest of the code
    '      
    Sample 2,3
End Function   
'
'~~> Rest of the functions
'   
Function FTwenty()
    '
    '~~> Rest of the code
    '     
    Sample 3.2 ,4.2
End Function

Sub Sample(X1 As Double, X2 As Double)
    a(1) = X1 + X2: a(2) = X1 / X2
    b(1) = X1: b(2) = X2 ^ 2

    Hello = a(1) + a(2) + b(1) + b(2)
End Sub
于 2012-09-05T07:56:58.237 に答える