Как преобразовать в обработку 2D / 3D массив - PullRequest
2 голосов
/ 08 ноября 2019

У меня проблема с возможностью передачи параметра в функцию для возврата определенного значения, и мне было дано решение ниже: @ ja72

Я хотел расширить его до принятия массива 2d / 3d, и он предложил мне опубликовать его как новый вопрос, чтобы найти решение.

Может кто-нибудь помочь?

Приведенный ниже код приводит к следующемувыходные данные отладки

2 values defined.
ThisWorkbook.Position(0)
First Value
ThisWorkbook.Position(1)
Second Value

В книге используется закрытый массив с именем m_position. Доступ к содержимому осуществляется глобальным свойством ThisWorkbook.Position(index).

В модуле имеется следующий код:

    Option Explicit

    Public Sub Test()    
        If ThisWorkbook.NoValues Then
            ThisWorkbook.FillValues "First Value", "Second Value"
        End If

        Debug.Print CStr(ThisWorkbook.Count) & " values defined."

        Test_Global_Var 0
        Test_Global_Var 1
    End Sub

Public Sub Test_Global_Var(ByVal index As Long)
    ' Part of a UDF
    Debug.Print "ThisWorkbook.Position(" & CStr(index) & ")"
    Debug.Print ThisWorkbook.Position(index)

End Sub

В ThisWorkbook следующий код:

Option Explicit

Private m_position() As Variant

Private Sub Workbook_Open()
    Call DefaultValues
End Sub


Public Property Get Position(ByVal index As Long) As Variant
    Position = m_position(index)
End Property

Public Sub DefaultValues()
    m_position = Array("First", "Second")
End Sub

Public Sub FillValues(ParamArray args() As Variant)
    m_position = args
End Sub

Public Property Get Count() As Long
    Count = UBound(m_position) - LBound(m_position) + 1
End Property

Public Property Get NoValues() As Boolean
    On Error GoTo ArrUndefined:
    Dim n As Long
    n = UBound(m_position)
    NoValues = False
    On Error GoTo 0
    Exit Sub
ArrUndefined:
    NoValues = True
    On Error GoTo 0
End Property

PS. В VBA никогда не используйте Integer, а вместо этого используйте Long. Integer - это 16-битный тип, тогда как Long - это стандартный 32-битный тип, который все другие языки программирования считают integer.

.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...