Не совсем уверен, что я понимаю, что вам нужно, но я думаю, что вы хотите создать объект «DayClass», который сохраняет значения дней и возвращает их другим функциям, когда они необходимо:
(1) в редакторе VBA, вставить CLASS модуль с
(2) в окне свойств этого модуля, измените имя на (скажем) DayClass (переопределяя имя по умолчанию «Класс 1».)
(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
Спасибо! это помогает. Однако массив mDays не является фиксированным и будет обновляться в соответствии с пользовательским вводом. Я знаю, что он будет иметь длину 5, но входы неизвестны – user793468
Нет способа сделать это, не создавая объект? например, иметь массив mDays в модуле вместо модуля Class, а затем вызвать его в другом модуле? – user793468
Вы можете сделать это и в модулях - и все будет выглядеть одинаково. Как бы то ни было, вы можете думать о каждом регулярном модуле кода как о «одноэлементном классе», который не нужно создавать перед использованием (например, статический класс в C#), и любая переменная, которую вы размещаете вверху, будет работать точно так же, как член класса переменные. Затем просто сделайте «Get Day» функцией, а не свойством, и до использования любого значения из mDays убедитесь, что он был инициализирован первым (например, тест для пустого и, если это так, вызовите процедуру инициализации). – tpascale