Определение нескольких объектов VBA в рамках одной функции или подпрограммы?

63
5

У меня есть следующий код 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 качестве аргументов и выплескивает значения для a(1), a(2), b(1), b(2). Это связано с тем, что я использовал приведенные выше определения для a(1), a(2), b(1), b(2) примерно в 20 функциях в моем модуле и хотел бы избежать необходимости делать следующее в каждой функции, что я используйте тезисы в:

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

спросил(а) 2021-01-19T20:39:31+03:00 5 месяцев назад
1
Решение
63

Я бы структурировал это с помощью объекта класса и свойств/методов. Попробуйте это в 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-классах здесь:

ответил(а) 2021-01-19T20:39:31+03:00 5 месяцев назад
45

Если он просто присваивает значения массиву из другой функции, вы можете создать общую процедуру и вызвать их из всех функций. См. Этот пример


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

ответил(а) 2021-01-19T20:39:31+03:00 5 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема