try - on error resume next vba
Errores al agregar elementos a una colección VBA/VB6 (4)
Intente eliminar los parens alrededor de itm en el complemento:
bag.Add itm
o
bag.Add itm, key
Ha pasado un tiempo desde que tuve que trabajar con VBA / VB6, pero creo que al incluir los paréntesis, se pasa el valor en lugar de hacerlo por referencia. Podría estar equivocado.
Todavía estoy aprendiendo VBA y no puedo entender si tengo tantos problemas con un objeto Collections.
Tengo una función que agrega objetos personalizados (creé una clase muy simple para almacenar algunos datos) que hace el tipo típico de "leer datos, crear una representación de objetos, pegarlo en colecciones".
Si trato de agregar una "clave" a la llamada a bag.add aparece el mensaje "Error de compilación. Esperado: =".
Si no funciona, parece que funcionó cuando ejecuto el programa y dice "Compile Error. Argument not optional" y resalta la línea "getRevColumns = bag".
¡No puedo por la vida de mí descubrir qué está pasando! Sospecho que hay algo mal con la forma en que inicié mi bolsa? PD: columnMap es el nombre de mi clase personalizada.
Function getRevColumns() As Collection
Dim rng As Range
Dim i As Integer
Dim bag As Collection
Dim opManCol As Integer, siebelCol As Integer
Dim opManColName As String, siebelColName As String
Dim itm As columnMap
Set bag = New Collection
Set rng = shSiebelMap.UsedRange.Columns(5)
i = 1
For i = 1 To rng.Rows.count
If StrComp(UCase(rng.Cells(i).value), "Y") = 0 Then
opManCol = rng.Rows(i).OffSet(0, -2).value
opManColName = rng.Rows(i).OffSet(0, -4)
siebelCol = rng.Rows(i).OffSet(0, -1).value
siebelColName = rng.Rows(i).OffSet(0, -3)
Set itm = New columnMap
itm.opManColName = opManColName
itm.opManColNumber = opManCol
itm.siebelColName = siebelColName
itm.siebelColNumber = siebelCol
''WHY DOESN''T IT WORK!''''
bag.Add (itm)
''MsgBox "opMan Col: " & opManColName & " : " & opManCol & ". Siebel Col: " & siebelColName & " : " & siebelCol''
End If
Next i
getRevColumns = bag
End Function
Tienes que decir
set getRevColumns = bag
también supongo que tienes un problema con el complemento. No sé por qué es esto, pero funciona en
bag.add itm
Probé todo de una manera simple aquí está mi código de trabajo
Sub myroutine()
Dim bag As Collection
Dim itm As clsSimple
Set bag = getTheCollection()
Set itm = bag.Item(1)
MsgBox (itm.someObjectValue)
Set itm = bag.Item(2)
MsgBox (itm.someObjectValue)
End Sub
Function getTheCollection() As Collection
Dim bag As Collection
Dim itm As clsSimple
Set bag = New Collection
Set itm = New clsSimple
itm.someObjectValue = "value 1"
bag.Add itm
Set itm = New clsSimple
itm.someObjectValue = "value 2"
bag.Add itm
Set getTheCollection = bag
End Function
La clase es realmente simple:
Public someObjectValue As String
Espero eso ayude
Tuve un problema similar con una colección.
Lo reduje pero no lo configuré con Nuevo o lo inicialicé.
Básicamente tuve
Dim collection1 As Collection
...
collection1.Add item ''no compile error just empty
Agregué lo siguiente antes de agregar
Set collection1 = New Collection
Call collection1.init
luego funcionó como un amuleto ... También moví la declaración Dim desde el Sub hasta la parte superior del Módulo para convertirla en una variable de clase
la bolsa es un objeto Regla n. ° 1 para uso de objetos
Set getRevColumns = bag