Tengo que declarar un array en VBA que será utilizado por cada función. Sin embargo, no puedo declarar como una global como yo haría en C++.

Mi código es el siguiente:

Option Explicit
 Dim test(0 to 10) as String

 test(0) = "avds"
 test(1) = "fdsafs"
 ....

La siguiente conceptualiza lo que estoy tratando de hacer.

 public function store() as boolean
  Worksheets("test").cells(1,1) = test(0)
 End Function

¿Cómo puedo conseguir esta funcionalidad?

InformationsquelleAutor CoachNono | 2011-08-17

5 Comentarios

  1. 6

    Para la declaración global, cambio Dim Público así:

    Public test(0 to 10) as String

    Usted puede llamar a esto como (asumiendo que está en el módulo 1, que otra persona cambie Module1 a lo que hemos denominado):

    Module1.test(0) = "something"

    O simplemente:

    test(0) = "something"
    • Este tipo de obras. Todavía no se puede definir los valores de la test matriz fuera de un Sub o Function.
  2. 5

    ¿Por qué no se crea todo lo que en una clase? Esa es la razón por la que las clases donde se inventó después de todo.

    Considerar la Class1 definición

    Option Explicit
    
    Private m_data() As String
    
    Private Sub Class_Initialize()
        ReDim m_data(0 To 10)
    End Sub
    Private Sub Class_Terminate()
        Erase m_data
    End Sub
    
    Public Property Get Count() As Integer
        Count = UBound(m_data) - LBound(m_data) + 1
    End Property
    
    Public Property Get Data(index As Integer) As String
        Data = m_data(index)
    End Property
    
    Public Property Let Data(index As Integer, value As String)
        m_data(index) = value
    End Property
    
    Public Function Store(rng As Range) As Boolean
        Store = (rng.value = m_data(0))
    End Function

    Puede agregar todas las funciones que desea que se pueda acceder a su matriz como Store().
    con el código de prueba en una hoja de cálculo de

    Public Sub Test()
        Dim c As New Class1
    
        c.Data(0) = "January"
    
        Debug.Print c.Store(Cells(1, 1))
    End Sub

    También puede almacenar en caché la ubicación de la celda donde se hace referencia, o utiliza un supuesto argumento con nombre y sólo el suministro de una referencia a la hoja de cálculo una vez después de la inicialización de clase.

  3. 3

    Puede utilizar el Public palabra clave para declarar una variable que usted necesita para tener acceso en cualquier módulo.

    Recordar que en vba no se pueden declarar variables o código fuera de los procedimientos.

    Ver aquí para obtener más información

  4. 1

    Tengo una recomendación que es un poco más ligero que una clase (aunque la clase es una gran recomendación)

    Opción 1

    Definir su deseado constante de matriz como una cadena delimitada constante:

    Public Const cstrTest = "String 1;String 2; String 3; String 4; String 5; String 6"

    Siguiente, siempre que la necesidad se acaba de Dividir para crear una matriz con un mínimo de código:

    Dim arrStrings
    arrStrings = Split (cstrTest, ";")

    Opción 2

    Usted podría reemplazar (o combinar con la Opción 1) una simple función pública

    Public Function constStringArray() As String()
    
        constStringArray = Split (cstrTest, ";")
    
    End Function

    Entonces, en el uso de…

    Dim arrStrings
    
    'Option 1 example
    arrStrings = Split (cstrTest, ";")
    
    'Option 2 example
    arrStrings = constStringArray()
  5. 0

    uno lo puede hacer (con inicialización global) a través de Static Property bastante recta hacia adelante sin la creación de una clase o de análisis de cadenas – como se describe en detalle y con ejemplos aquí

Dejar respuesta

Please enter your comment!
Please enter your name here