---
title: "Colecciones de objetos con VBA Access"
date: 2024-03-22
author: "Alex Borrás"
source: https://alexborras.com/colecciones-de-objetos-con-vba-access/
site: "El Blog de Alex Borrás"
---

# Colecciones de objetos con VBA Access

\[vc\_row\]\[vc\_column\]\[vc\_column\_text\]En este artículo te voy a ofrecer un ejemplo de sencillo de como manejar colecciones de objetos en Visual Basic para Access (VBA). Incluyo todas las líneas de código y una interesante conversación con [ChatGPT](https://alexborras.com/diccionario-de-inteligencia-artificial/#chatgpt) para solucionar un error que se producía en el bucle **For Each**.

Usar la programación orientada a objetos (OOP) te puede ahorrar cientos de horas de trabajo, es una de las mejores técnicas que existen y la más lógica. Espero que estos ejemplos de VBA sean de ayuda y si te interesan más ejemplos te recomiendo este artículo: [Trucos y ejemplos de VBA para Microsoft Access](https://alexborras.com/trucos-y-ejemplo-de-vba-para-microsoft-access/).\[/vc\_column\_text\]\[/vc\_column\]\[/vc\_row\]\[vc\_row\]\[vc\_column\]\[vc\_column\_text\]

Índice de contenidos

- [1 Ejemplo: Lista de ciudades de una Comunidad Autónoma](#Ejemplo_Lista_de_ciudades_de_una_Comunidad_Autonoma)
- [2 Bucle principal](#Bucle_principal)
- [3 Objetos](#Objetos)
    - [3.1 Region](#Region)
    - [3.2 State](#State)
    - [3.3 City](#City)
- [4 Colecciones](#Colecciones)
    - [4.1 States](#States)
    - [4.2 Cities](#Cities)
- [5 Error en bucle For Each y ChatGPT](#Error_en_bucle_For_Each_y_ChatGPT)

## Ejemplo: Lista de ciudades de una Comunidad Autónoma

El ejemplo que vamos a ver usa 3 objetos y dos colecciones. El objetivo es listar todas las ciudades de una Comunidad Autónoma agrupadas por provincias.

\[/vc\_column\_text\]\[/vc\_column\]\[/vc\_row\]\[vc\_row\]\[vc\_column\]\[vc\_column\_text\]

## Bucle principal

Se inicia un objeto Region y se recorre la colección States (Provincias). Para cada provincia se recorre su colección de ciudades. En el código original se genera una tabla HTML en el fichero de salida. En este ejemplo he simplificado la salida de datos.\[/vc\_column\_text\]\[vc\_raw\_html\]JTNDcHJlJTNFJTBBUHVibGljJTIwU3ViJTIwRXhwb3J0YXJNdW5pY2lwaW9zSFRNTCUyOCUyOSUwQSUyMCUyMCUyMCUyMERpbSUyMG9ialJlZ2lvbiUyMEFzJTIwTmV3JTIwY2xzUmVnaW9uJTBBJTIwJTIwJTIwJTIwRGltJTIwb2JqU3RhdGUlMjBBcyUyME5ldyUyMGNsc1N0YXRlJTBBJTIwJTIwJTIwJTIwRGltJTIwb2JqQ2l0eSUyMEFzJTIwY2xzQ2l0eSUwQSUyMCUyMCUyMCUyMERpbSUyMHR4dEZpbGUlMjBBcyUyMFN0cmluZyUwQSUyMCUyMCUyMCUyMERpbSUyMGluZCUyMEFzJTIwTG9uZyUwQSUyNyUyMEZpY2hlcm8lMjBkZSUyMHNhbGlkYSUwQSUyMCUyMCUyMCUyMHR4dEZpbGUlMjAlM0QlMjBDdXJyZW50UHJvamVjdC5QYXRoJTIwJTI2JTIwJTIyJTVDY2l0aWVzLmh0bWwlMjIlMEElMjAlMjAlMjAlMjBJZiUyMERpciUyOHR4dEZpbGUlMjklMjAlM0MlM0UlMjAlMjIlMjIlMjBUaGVuJTIwS2lsbCUyMHR4dEZpbGUlMEElMjAlMjAlMjAlMjBPcGVuJTIwdHh0RmlsZSUyMEZvciUyME91dHB1dCUyMEFzJTIwJTIzMSUyMCUyNyUyMFBhcmElMjBleHBvcnRhciUyMG11bmljaXBpb3MlMjBlbiUyMEhUTUwlMEElMjAlMjAlMjAlMjBQcmludCUyMCUyMzElMkMlMjAlMjJNdW5pY2lwaW9zJTIyJTBBJTI3JTIwQnVjbGUlMEElMjAlMjAlMjAlMjBvYmpSZWdpb24uSW5pY2lhbGl6YXIlMjAxJTIwJTI3JTIwJTI4cmVnaW9uX2lkJTNEMSUyOSUwQSUyMCUyMCUyMCUyMEZvciUyMEVhY2glMjBvYmpTdGF0ZSUyMEluJTIwb2JqUmVnaW9uLlN0YXRlc0luUmVnaW9ucyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMFByaW50JTIwJTIzMSUyQyUyMCUyMG9ialN0YXRlLnN0YXRlX3R4dCUyMCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMEZvciUyMEVhY2glMjBvYmpDaXR5JTIwSW4lMjBvYmpTdGF0ZS5DaXRpZXNJblN0YXRlJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwUHJpbnQlMjAlMjMxJTJDJTIwb2JqQ2l0eS5jaXR5X3R4dCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyME5leHQlMEElMjAlMjAlMjAlMjBOZXh0JTBBJTIwJTIwJTIwJTIwQ2xvc2UlMjAlMjMxJTBBJTIwJTIwJTIwJTIwU2V0JTIwb2JqQ2l0eSUyMCUzRCUyME5vdGhpbmclMEElMjAlMjAlMjAlMjBTZXQlMjBvYmpTdGF0ZSUyMCUzRCUyME5vdGhpbmclMEElMjAlMjAlMjAlMjBNc2dCb3glMjAlMjJQcm9jZXNvJTIwRmluYWxpemFkbyUyMiUwQUVuZCUyMFN1YiUwQSUzQyUyRnByZSUzRQ==\[/vc\_raw\_html\]\[/vc\_column\]\[/vc\_row\]\[vc\_row\]\[vc\_column\]\[vc\_column\_text\]

## Objetos

En esta sección se detalla el código de los 3 objetos utilizados: Region, State y City\[/vc\_column\_text\]\[vc\_row\_inner\]\[vc\_column\_inner\]\[vc\_column\_text\]

### Region

El objeto de la Comunidad Autónoma. Contiene la colección States (provincias) como propiedad.\[/vc\_column\_text\]\[vc\_raw\_html\]JTNDcHJlJTNFJTBBT3B0aW9uJTIwQ29tcGFyZSUyMERhdGFiYXNlJTBBT3B0aW9uJTIwRXhwbGljaXQlMEElMjAlMjAlMjAlMjBEaW0lMjByc3QlMjBBcyUyMFJlY29yZHNldCUwQSUyMCUyMCUyMCUyMERpbSUyMHN0clNRTCUyMCUyMCUyMEFzJTIwU3RyaW5nJTBBJTIwJTIwJTIwJTIwRGltJTIwY29sU3RhdGVzJTIwQXMlMjBjbHNTdGF0ZXMlMEFQdWJsaWMlMjByZWdpb25faWQlMjBBcyUyMExvbmclMEFQdWJsaWMlMjByZWdpb25fdHh0JTIwQXMlMjBTdHJpbmclMEFQdWJsaWMlMjBFeGlzdGUlMjAlMjAlMjAlMjAlMjBBcyUyMEJvb2xlYW4lMEFQdWJsaWMlMjBQcm9wZXJ0eSUyMEdldCUyMFN0YXRlc0luUmVnaW9ucyUyOCUyOSUyMEFzJTIwY2xzU3RhdGVzJTBBJTIwJTIwJTIwJTIwT24lMjBFcnJvciUyMEdvVG8lMjBFcnJvclN1YiUwQSUyMCUyMCUyMCUyMElmJTIwY29sU3RhdGVzJTIwSXMlMjBOb3RoaW5nJTIwVGhlbiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMFNldCUyMGNvbFN0YXRlcyUyMCUzRCUyME5ldyUyMGNsc1N0YXRlcyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMEdvU3ViJTIwSW5pY2lhbGl6YXJTdGF0ZXMlMEElMjAlMjAlMjAlMjBFbmQlMjBJZiUwQSUyMCUyMCUyMCUyMFNldCUyMFN0YXRlc0luUmVnaW9ucyUyMCUzRCUyMGNvbFN0YXRlcyUwQSUyMCUyMCUyMCUyMEV4aXQlMjBQcm9wZXJ0eSUwQUluaWNpYWxpemFyU3RhdGVzJTNBJTBBJTIwJTIwJTIwJTIwc3RyU1FMJTIwJTNEJTIwJTIyU0VMRUNUJTIwc3RhdGVfaWQlMjBGcm9tJTIwd3BfZGF0YXN0YXRfc3RhdGVzJTIwV2hlcmUlMjByZWdpb25faWQlM0QlMjIlMjAlMjYlMjByZWdpb25faWQlMEElMjAlMjAlMjAlMjBTZXQlMjByc3QlMjAlM0QlMjBDdXJyZW50RGIuT3BlblJlY29yZHNldCUyOHN0clNRTCUyOSUwQSUyMCUyMCUyMCUyMERvJTIwV2hpbGUlMjByc3QuRU9GJTIwJTNEJTIwRmFsc2UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBjb2xTdGF0ZXMuQWRkJTIwcnN0JTIxc3RhdGVfaWQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjByc3QuTW92ZU5leHQlMEElMjAlMjAlMjAlMjBMb29wJTBBJTIwJTIwJTIwJTIwcnN0LkNsb3NlJTBBJTIwJTIwJTIwJTIwUmV0dXJuJTBBRXJyb3JTdWIlM0ElMEElMjAlMjAlMjAlMjBEZWJ1Zy5QcmludCUyMEVyci5EZXNjcmlwdGlvbiUwQUVuZCUyMFByb3BlcnR5JTBBUHVibGljJTIwU3ViJTIwSW5pY2lhbGl6YXIlMjhDb2RpZ28lMjBBcyUyMExvbmclMjklMEElMjAlMjAlMjAlMjBPbiUyMEVycm9yJTIwR29UbyUyMEVycm9yU3ViJTBBJTIwJTIwJTIwJTIwcmVnaW9uX2lkJTIwJTNEJTIwQ29kaWdvJTBBJTIwJTIwJTIwJTIwc3RyU1FMJTIwJTNEJTIwJTIyU0VMRUNUJTIwJTJBJTIwRlJPTSUyMHdwX2RhdGFzdGF0X3JlZ2lvbnMlMjBXSEVSRSUyMHJlZ2lvbl9pZCUzRCUyMiUyMCUyNiUyMHJlZ2lvbl9pZCUwQSUyMCUyMCUyMCUyMFNldCUyMHJzdCUyMCUzRCUyMEN1cnJlbnREYi5PcGVuUmVjb3Jkc2V0JTI4c3RyU1FMJTI5JTBBJTIwJTIwJTIwJTIwRXhpc3RlJTIwJTNEJTIwTm90JTIwcnN0LkVPRiUwQSUyMCUyMCUyMCUyMElmJTIwTm90JTIwRXhpc3RlJTIwVGhlbiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMEV4aXN0ZSUyMCUzRCUyMEZhbHNlJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwR29UbyUyMEluaWNpYWxpemFyRmluJTBBJTIwJTIwJTIwJTIwRW5kJTIwSWYlMEElMjAlMjAlMjAlMjByZWdpb25fdHh0JTIwJTNEJTIwVmFsaWRhclN0cmluZyUyOHJzdCUyMXJlZ2lvbl90eHQlMjklMEFJbmljaWFsaXphckZpbiUzQSUwQSUyMCUyMCUyMCUyMHJzdC5DbG9zZSUwQSUyMCUyMCUyMCUyMEV4aXQlMjBTdWIlMEFFcnJvclN1YiUzQSUwQSUyMCUyMCUyMCUyME1zZ0JveCUyMEVyci5EZXNjcmlwdGlvbiUyQyUyMHZiQ3JpdGljYWwlMkMlMjBBcHBsaWNhdGlvbi5OYW1lJTBBRW5kJTIwU3ViJTBBJTNDJTJGcHJlJTNF\[/vc\_raw\_html\]\[/vc\_column\_inner\]\[/vc\_row\_inner\]\[vc\_row\_inner\]\[vc\_column\_inner\]\[vc\_column\_text\]

### State

El objeto de la Provincia. Contiene la colección Cities (ciudades o municipios) como propiedad.\[/vc\_column\_text\]\[vc\_raw\_html\]JTNDcHJlJTNFJTBBT3B0aW9uJTIwQ29tcGFyZSUyMERhdGFiYXNlJTBBT3B0aW9uJTIwRXhwbGljaXQlMEElMjAlMjAlMjAlMjBEaW0lMjByc3QlMjBBcyUyMFJlY29yZHNldCUwQSUyMCUyMCUyMCUyMERpbSUyMHN0clNRTCUyMCUyMCUyMEFzJTIwU3RyaW5nJTBBJTIwJTIwJTIwJTIwRGltJTIwY29sQ2l0aWVzJTIwQXMlMjBjbHNDaXRpZXMlMEFQdWJsaWMlMjBzdGF0ZV9pZCUyMEFzJTIwTG9uZyUwQVB1YmxpYyUyMHN0YXRlX3R4dCUyMEFzJTIwU3RyaW5nJTBBUHVibGljJTIwRXhpc3RlJTIwJTIwJTIwJTIwJTIwQXMlMjBCb29sZWFuJTBBUHVibGljJTIwUHJvcGVydHklMjBHZXQlMjBDaXRpZXNJblN0YXRlJTI4JTI5JTIwQXMlMjBjbHNDaXRpZXMlMEElMjAlMjAlMjAlMjBPbiUyMEVycm9yJTIwR29UbyUyMEVycm9yU3ViJTBBJTIwJTIwJTIwJTIwSWYlMjBjb2xDaXRpZXMlMjBJcyUyME5vdGhpbmclMjBUaGVuJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwU2V0JTIwY29sQ2l0aWVzJTIwJTNEJTIwTmV3JTIwY2xzQ2l0aWVzJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwR29TdWIlMjBJbmljaWFsaXphckNpdGllcyUwQSUyMCUyMCUyMCUyMEVuZCUyMElmJTBBJTIwJTIwJTIwJTIwU2V0JTIwQ2l0aWVzSW5TdGF0ZSUyMCUzRCUyMGNvbENpdGllcyUwQSUyMCUyMCUyMCUyMEV4aXQlMjBQcm9wZXJ0eSUwQUluaWNpYWxpemFyQ2l0aWVzJTNBJTBBJTIwJTIwJTIwJTIwc3RyU1FMJTIwJTNEJTIwJTIyU0VMRUNUJTIwY2l0eV9pZCUyMEZyb20lMjB3cF9kYXRhc3RhdF9jaXRpZXMlMjBXaGVyZSUyMHN0YXRlX2lkJTNEJTIyJTIwJTI2JTIwc3RhdGVfaWQlMEElMjAlMjAlMjAlMjBTZXQlMjByc3QlMjAlM0QlMjBDdXJyZW50RGIuT3BlblJlY29yZHNldCUyOHN0clNRTCUyOSUwQSUyMCUyMCUyMCUyMERvJTIwV2hpbGUlMjByc3QuRU9GJTIwJTNEJTIwRmFsc2UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBjb2xDaXRpZXMuQWRkJTIwcnN0JTIxY2l0eV9pZCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHJzdC5Nb3ZlTmV4dCUwQSUyMCUyMCUyMCUyMExvb3AlMEElMjAlMjAlMjAlMjByc3QuQ2xvc2UlMEElMjAlMjAlMjAlMjBSZXR1cm4lMEFFcnJvclN1YiUzQSUwQSUyMCUyMCUyMCUyMERlYnVnLlByaW50JTIwRXJyLkRlc2NyaXB0aW9uJTBBRW5kJTIwUHJvcGVydHklMEFQdWJsaWMlMjBTdWIlMjBJbmljaWFsaXphciUyOENvZGlnbyUyMEFzJTIwTG9uZyUyOSUwQSUyMCUyMCUyMCUyME9uJTIwRXJyb3IlMjBHb1RvJTIwRXJyb3JTdWIlMEElMjAlMjAlMjAlMjBzdGF0ZV9pZCUyMCUzRCUyMENvZGlnbyUwQSUyMCUyMCUyMCUyMHN0clNRTCUyMCUzRCUyMCUyMlNFTEVDVCUyMCUyQSUyMEZST00lMjB3cF9kYXRhc3RhdF9zdGF0ZXMlMjBXSEVSRSUyMHN0YXRlX2lkJTNEJTIyJTIwJTI2JTIwc3RhdGVfaWQlMEElMjAlMjAlMjAlMjBTZXQlMjByc3QlMjAlM0QlMjBDdXJyZW50RGIuT3BlblJlY29yZHNldCUyOHN0clNRTCUyOSUwQSUyMCUyMCUyMCUyMEV4aXN0ZSUyMCUzRCUyME5vdCUyMHJzdC5FT0YlMEElMjAlMjAlMjAlMjBJZiUyME5vdCUyMEV4aXN0ZSUyMFRoZW4lMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBFeGlzdGUlMjAlM0QlMjBGYWxzZSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMEdvVG8lMjBJbmljaWFsaXphckZpbiUwQSUyMCUyMCUyMCUyMEVuZCUyMElmJTBBJTIwJTIwJTIwJTIwc3RhdGVfdHh0JTIwJTNEJTIwVmFsaWRhclN0cmluZyUyOHJzdCUyMXN0YXRlX3R4dCUyOSUwQUluaWNpYWxpemFyRmluJTNBJTBBJTIwJTIwJTIwJTIwcnN0LkNsb3NlJTBBJTIwJTIwJTIwJTIwRXhpdCUyMFN1YiUwQUVycm9yU3ViJTNBJTBBJTIwJTIwJTIwJTIwTXNnQm94JTIwRXJyLkRlc2NyaXB0aW9uJTJDJTIwdmJDcml0aWNhbCUyQyUyMEFwcGxpY2F0aW9uLk5hbWUlMEFFbmQlMjBTdWIlMEElM0MlMkZwcmUlM0U=\[/vc\_raw\_html\]\[/vc\_column\_inner\]\[/vc\_row\_inner\]\[vc\_row\_inner\]\[vc\_column\_inner\]\[vc\_column\_text\]

### City

El objeto de la ciudad o municipio. Es el objeto final a procesar. Es clase usa el objeto State como objeto heredado.\[/vc\_column\_text\]\[vc\_raw\_html\]JTNDcHJlJTNFJTBBT3B0aW9uJTIwQ29tcGFyZSUyMERhdGFiYXNlJTBBT3B0aW9uJTIwRXhwbGljaXQlMEElMjAlMjAlMjAlMjBEaW0lMjByc3QlMjBBcyUyMFJlY29yZHNldCUwQSUyMCUyMCUyMCUyMERpbSUyMHN0clNRTCUyMCUyMCUyMEFzJTIwU3RyaW5nJTBBUHVibGljJTIwY2l0eV9pZCUyMEFzJTIwTG9uZyUwQVB1YmxpYyUyMGNpdHlfdHh0JTIwQXMlMjBTdHJpbmclMEFQdWJsaWMlMjBjb2RlX2lkJTIwQXMlMjBTdHJpbmclMEFQdWJsaWMlMjBzdGF0ZV9pZCUyMEFzJTIwTG9uZyUwQVB1YmxpYyUyMEV4aXN0ZSUyMCUyMCUyMCUyMCUyMEFzJTIwQm9vbGVhbiUwQVB1YmxpYyUyMFByb3BlcnR5JTIwR2V0JTIwU3RhdGUlMjglMjklMjBBcyUyMGNsc1N0YXRlJTBBJTIwJTIwJTIwJTIwU2V0JTIwU3RhdGUlMjAlM0QlMjBOZXclMjBjbHNTdGF0ZSUwQSUyMCUyMCUyMCUyMFN0YXRlLkluaWNpYWxpemFyJTIwc3RhdGVfaWQlMEFFbmQlMjBQcm9wZXJ0eSUwQVB1YmxpYyUyMFN1YiUyMEluaWNpYWxpemFyJTI4Q29kaWdvJTIwQXMlMjBMb25nJTI5JTBBJTIwJTIwJTIwJTIwT24lMjBFcnJvciUyMEdvVG8lMjBFcnJvclN1YiUwQSUyMCUyMCUyMCUyMGNpdHlfaWQlMjAlM0QlMjBDb2RpZ28lMEElMjAlMjAlMjAlMjBzdHJTUUwlMjAlM0QlMjAlMjJTRUxFQ1QlMjAlMkElMjBGUk9NJTIwd3BfZGF0YXN0YXRfY2l0aWVzJTIwV0hFUkUlMjBjaXR5X2lkJTNEJTIyJTIwJTI2JTIwY2l0eV9pZCUwQSUyMCUyMCUyMCUyMFNldCUyMHJzdCUyMCUzRCUyMEN1cnJlbnREYi5PcGVuUmVjb3Jkc2V0JTI4c3RyU1FMJTI5JTBBJTIwJTIwJTIwJTIwRXhpc3RlJTIwJTNEJTIwTm90JTIwcnN0LkVPRiUwQSUyMCUyMCUyMCUyMElmJTIwTm90JTIwRXhpc3RlJTIwVGhlbiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMEV4aXN0ZSUyMCUzRCUyMEZhbHNlJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwR29UbyUyMEluaWNpYWxpemFyRmluJTBBJTIwJTIwJTIwJTIwRW5kJTIwSWYlMEElMjAlMjAlMjAlMjBjaXR5X3R4dCUyMCUzRCUyMFZhbGlkYXJTdHJpbmclMjhyc3QlMjFjaXR5X3R4dCUyOSUwQSUyMCUyMCUyMCUyMGNvZGVfaWQlMjAlM0QlMjBGb3JtYXQlMjhyc3QlMjFjaXR5X2lkJTJDJTIwJTIyMDAwMDAlMjIlMjklMEFJbmljaWFsaXphckZpbiUzQSUwQSUyMCUyMCUyMCUyMHJzdC5DbG9zZSUwQSUyMCUyMCUyMCUyMEV4aXQlMjBTdWIlMEFFcnJvclN1YiUzQSUwQSUyMCUyMCUyMCUyME1zZ0JveCUyMEVyci5EZXNjcmlwdGlvbiUyQyUyMHZiQ3JpdGljYWwlMkMlMjBBcHBsaWNhdGlvbi5OYW1lJTBBRW5kJTIwU3ViJTBBJTNDJTJGcHJlJTNF\[/vc\_raw\_html\]\[/vc\_column\_inner\]\[/vc\_row\_inner\]\[/vc\_column\]\[/vc\_row\]\[vc\_row\]\[vc\_column\]\[vc\_column\_text\]

## Colecciones

Las colecciones son lo que permite recorrer los elementos asociados a un objeto, provincias de la región y ciudades de la provincia.\[/vc\_column\_text\]\[vc\_row\_inner\]\[vc\_column\_inner\]\[vc\_column\_text\]

### States

La colección de provincias que permite definirla en el objeto Region.\[/vc\_column\_text\]\[vc\_raw\_html\]JTNDcHJlJTNFJTBBT3B0aW9uJTIwQ29tcGFyZSUyMERhdGFiYXNlJTBBT3B0aW9uJTIwRXhwbGljaXQlMEFQcml2YXRlJTIwbWNvbFN0YXRlcyUyMEFzJTIwTmV3JTIwQ29sbGVjdGlvbiUwQVB1YmxpYyUyMEZ1bmN0aW9uJTIwQWRkJTI4QnlWYWwlMjBzdGF0ZV9pZCUyMEFzJTIwTG9uZyUyQyUyME9wdGlvbmFsJTIwQ29udHJvbEVycm9yZXMlMjBBcyUyMEJvb2xlYW4lMjAlM0QlMjBUcnVlJTI5JTIwQXMlMjBTdHJpbmclMEElMjAlMjAlMjAlMjBPbiUyMEVycm9yJTIwR29UbyUyMEVycm9yU3ViJTBBJTIwJTIwJTIwJTIwRGltJTIwY2xzU3RhdGUlMjBBcyUyME5ldyUyMGNsc1N0YXRlJTBBJTIwJTIwJTIwJTIwY2xzU3RhdGUuSW5pY2lhbGl6YXIlMjBzdGF0ZV9pZCUwQSUyMCUyMCUyMCUyMG1jb2xTdGF0ZXMuQWRkJTIwY2xzU3RhdGUlMkMlMjBDU3RyJTI4c3RhdGVfaWQlMjklMEElMjAlMjAlMjAlMjBBZGQlMjAlM0QlMjBzdGF0ZV9pZCUyMCUyNyUyMERldnVlbHZlJTIwbGElMjByZWZlcmVuY2lhJTIwYWwlMjBvYmpldG8lMjBjcmVhZG8lMEElMjAlMjAlMjAlMjBTZXQlMjBjbHNTdGF0ZSUyMCUzRCUyME5vdGhpbmclMEElMjAlMjAlMjAlMjBFeGl0JTIwRnVuY3Rpb24lMEFFcnJvclN1YiUzQSUwQSUyMCUyMCUyMCUyMERlYnVnLlByaW50JTIwRXJyLkRlc2NyaXB0aW9uJTBBRW5kJTIwRnVuY3Rpb24lMEFQdWJsaWMlMjBGdW5jdGlvbiUyMEFkZFN0YXRlJTI4QnlWYWwlMjBvYmpTdGF0ZSUyMEFzJTIwY2xzU3RhdGUlMjklMjBBcyUyMGNsc1N0YXRlJTBBJTIwJTIwJTIwJTIwT24lMjBFcnJvciUyMEdvVG8lMjBFcnJvclN1YiUwQSUyMCUyMCUyMCUyMG1jb2xTdGF0ZXMuQWRkJTIwb2JqU3RhdGUlMkMlMjBvYmpTdGF0ZS5zdGF0ZV9pZCUwQSUyMCUyMCUyMCUyMFNldCUyMEFkZFN0YXRlJTIwJTNEJTIwb2JqU3RhdGUlMjAlMjclMjBEZXZ1ZWx2ZSUyMGxhJTIwcmVmZXJlbmNpYSUyMGFsJTIwb2JqZXRvJTIwY3JlYWRvJTBBJTIwJTIwJTIwJTIwRXhpdCUyMEZ1bmN0aW9uJTBBRXJyb3JTdWIlM0ElMEElMjAlMjAlMjAlMjBEZWJ1Zy5QcmludCUyMEVyci5EZXNjcmlwdGlvbiUwQUVuZCUyMEZ1bmN0aW9uJTBBUHVibGljJTIwRnVuY3Rpb24lMjBDb3VudCUyOCUyOSUyMEFzJTIwTG9uZyUwQSUyMCUyMCUyMENvdW50JTIwJTNEJTIwbWNvbFN0YXRlcy5Db3VudCUwQUVuZCUyMEZ1bmN0aW9uJTBBUHVibGljJTIwRnVuY3Rpb24lMjBJdGVtJTI4QnlWYWwlMjBJbmRleCUyMEFzJTIwVmFyaWFudCUyOSUyMEFzJTIwY2xzU3RhdGUlMEElMjAlMjAlMjAlMjBPbiUyMEVycm9yJTIwUmVzdW1lJTIwTmV4dCUwQSUyMCUyMCUyMCUyMFNldCUyMEl0ZW0lMjAlM0QlMjBtY29sU3RhdGVzLkl0ZW0lMjhJbmRleCUyOSUwQUVuZCUyMEZ1bmN0aW9uJTBBUHVibGljJTIwRnVuY3Rpb24lMjBSZW1vdmUlMjhCeVZhbCUyMEluZGV4JTIwQXMlMjBWYXJpYW50JTI5JTBBJTIwJTIwJTIwJTIwbWNvbFN0YXRlcy5SZW1vdmUlMjBJbmRleCUwQUVuZCUyMEZ1bmN0aW9uJTBBJTI3JTIwTmV3RW51bSUyMHRpZW5lJTIwcXVlJTIwZGV2b2x2ZXIlMjBsYSUyMGludGVyZmF6JTIwSVVua25vd24lMjBkZWwlMjBlbnVtZXJhZG9yJTIwZGUlMjB1bmElMjBjb2xlY2NpJUMzJUIzbi4lMEFQdWJsaWMlMjBGdW5jdGlvbiUyME5ld0VudW0lMjglMjklMjBBcyUyMElVbmtub3duJTBBJTIwJTIwJTIwU2V0JTIwTmV3RW51bSUyMCUzRCUyMG1jb2xTdGF0ZXMuJTVCX05ld0VudW0lNUQlMEFFbmQlMjBGdW5jdGlvbiUwQSUzQyUyRnByZSUzRQ==\[/vc\_raw\_html\]\[/vc\_column\_inner\]\[/vc\_row\_inner\]\[vc\_row\_inner\]\[vc\_column\_inner\]\[vc\_column\_text\]

### Cities

La colección de ciudades (municipios) que permite definirla en el objeto State.\[/vc\_column\_text\]\[vc\_raw\_html\]JTNDcHJlJTNFJTBBT3B0aW9uJTIwQ29tcGFyZSUyMERhdGFiYXNlJTBBT3B0aW9uJTIwRXhwbGljaXQlMEFQcml2YXRlJTIwbWNvbENpdGllcyUyMEFzJTIwTmV3JTIwQ29sbGVjdGlvbiUwQVB1YmxpYyUyMEZ1bmN0aW9uJTIwQWRkJTI4QnlWYWwlMjBjaXR5X2lkJTIwQXMlMjBMb25nJTJDJTIwT3B0aW9uYWwlMjBDb250cm9sRXJyb3JlcyUyMEFzJTIwQm9vbGVhbiUyMCUzRCUyMFRydWUlMjklMjBBcyUyMFN0cmluZyUwQSUyMCUyMCUyMCUyME9uJTIwRXJyb3IlMjBHb1RvJTIwRXJyb3JTdWIlMEElMjAlMjAlMjAlMjBEaW0lMjBvYmpDaXR5JTIwQXMlMjBOZXclMjBjbHNDaXR5JTBBJTIwJTIwJTIwJTIwb2JqQ2l0eS5JbmljaWFsaXphciUyMGNpdHlfaWQlMEElMjAlMjAlMjAlMjBtY29sQ2l0aWVzLkFkZCUyMG9iakNpdHklMkMlMjBDU3RyJTI4Y2l0eV9pZCUyOSUwQSUyMCUyMCUyMCUyMEFkZCUyMCUzRCUyMENTdHIlMjhjaXR5X2lkJTI5JTIwJTI3JTIwRGV2dWVsdmUlMjBsYSUyMHJlZmVyZW5jaWElMjBhbCUyMG9iamV0byUyMGNyZWFkbyUwQSUyMCUyMCUyMCUyMFNldCUyMG9iakNpdHklMjAlM0QlMjBOb3RoaW5nJTBBJTIwJTIwJTIwJTIwRXhpdCUyMEZ1bmN0aW9uJTBBRXJyb3JTdWIlM0ElMEElMjAlMjAlMjAlMjBEZWJ1Zy5QcmludCUyMEVyci5EZXNjcmlwdGlvbiUwQUVuZCUyMEZ1bmN0aW9uJTBBUHVibGljJTIwRnVuY3Rpb24lMjBBZGRDaXR5JTI4QnlWYWwlMjBvYmpDaXR5JTIwQXMlMjBjbHNDaXR5JTI5JTIwQXMlMjBjbHNDaXR5JTBBJTIwJTIwJTIwJTIwT24lMjBFcnJvciUyMEdvVG8lMjBFcnJvclN1YiUwQSUyMCUyMCUyMCUyMG1jb2xDaXRpZXMuQWRkJTIwb2JqQ2l0eSUyQyUyMG9iakNpdHkuY2l0eV9pZCUwQSUyMCUyMCUyMCUyMFNldCUyMEFkZENpdHklMjAlM0QlMjBvYmpDaXR5JTIwJTI3JTIwRGV2dWVsdmUlMjBsYSUyMHJlZmVyZW5jaWElMjBhbCUyMG9iamV0byUyMGNyZWFkbyUwQSUyMCUyMCUyMCUyMEV4aXQlMjBGdW5jdGlvbiUwQUVycm9yU3ViJTNBJTBBJTIwJTIwJTIwJTIwRGVidWcuUHJpbnQlMjBFcnIuRGVzY3JpcHRpb24lMEFFbmQlMjBGdW5jdGlvbiUwQVB1YmxpYyUyMEZ1bmN0aW9uJTIwQ291bnQlMjglMjklMjBBcyUyMExvbmclMEElMjAlMjAlMjBDb3VudCUyMCUzRCUyMG1jb2xDaXRpZXMuQ291bnQlMEFFbmQlMjBGdW5jdGlvbiUwQVB1YmxpYyUyMEZ1bmN0aW9uJTIwSXRlbSUyOEJ5VmFsJTIwSW5kZXglMjBBcyUyMFZhcmlhbnQlMjklMjBBcyUyMGNsc0NpdHklMEElMjAlMjAlMjAlMjBPbiUyMEVycm9yJTIwUmVzdW1lJTIwTmV4dCUwQSUyMCUyMCUyMCUyMFNldCUyMEl0ZW0lMjAlM0QlMjBtY29sQ2l0aWVzLkl0ZW0lMjhJbmRleCUyOSUwQUVuZCUyMEZ1bmN0aW9uJTBBUHVibGljJTIwRnVuY3Rpb24lMjBSZW1vdmUlMjhCeVZhbCUyMEluZGV4JTIwQXMlMjBWYXJpYW50JTI5JTBBJTIwJTIwJTIwJTIwbWNvbENpdGllcy5SZW1vdmUlMjBJbmRleCUwQUVuZCUyMEZ1bmN0aW9uJTBBJTI3JTIwTmV3RW51bSUyMHRpZW5lJTIwcXVlJTIwZGV2b2x2ZXIlMjBsYSUyMGludGVyZmF6JTIwSVVua25vd24lMjBkZWwlMjBlbnVtZXJhZG9yJTIwZGUlMjB1bmElMjBjb2xlY2NpJUMzJUIzbi4lMEFQdWJsaWMlMjBGdW5jdGlvbiUyME5ld0VudW0lMjglMjklMjBBcyUyMElVbmtub3duJTBBJTIwJTIwJTIwU2V0JTIwTmV3RW51bSUyMCUzRCUyMG1jb2xDaXRpZXMuJTVCX05ld0VudW0lNUQlMEFFbmQlMjBGdW5jdGlvbiUwQSUwQSUzQyUyRnByZSUzRQ==\[/vc\_raw\_html\]\[/vc\_column\_inner\]\[/vc\_row\_inner\]\[/vc\_column\]\[/vc\_row\]\[vc\_row\]\[vc\_column\]\[vc\_column\_text\]

## Error en bucle For Each y ChatGPT

En el momento de usar el bucle For Each se produjo un error, pese a crearse correctamente la colección no recorría sus elementos. La ayuda de [ChatGPT](https://chat.openai.com/) fue de mucha utilidad y por eso reproduzco el diálogo.\[/vc\_column\_text\]\[vc\_column\_text\]**Pregunta**:  

Tengo un problema con un código VBA en una base de datos Access formato accdb. Creo una colección de Cities para el objeto State, se carga bien la colección con todos los items, pero después de devolver la colección con «Set CitiesInState = colCities» se produce el error «El objeto no admite la propiedad o método» en la línea del bucle principal «For Each objCity In objState.CitiesInState»

A continuación le pego el código relacionado.

**Respuesta**:  

Tu problema parece estar relacionado con cómo estás manejando la colección y los objetos dentro de VBA para Access. Aquí hay algunos puntos que debemos revisar y posibles soluciones:

1. **Tipo de Colección**: En VBA, normalmente las colecciones contienen objetos de un tipo específico. Tu propiedad `CitiesInState` está devolviendo un objeto de tipo `clsCities`. Es importante asegurarse de que `clsCities` sea efectivamente una colección (o se comporte como tal) y que esté correctamente definido para manejar objetos del tipo `clsCity`.
2. **Iteración sobre la Colección**: Cuando haces `For Each objCity In objState.CitiesInState`, estás asumiendo que `objState.CitiesInState` devuelve una colección de objetos `clsCity`. Si ese no es el caso, recibirás un error. Asegúrate de que la colección `colCities` dentro de la clase `clsState` esté efectivamente almacenando y devolviendo objetos del tipo `clsCity`.
3. **Inicialización de la Colección**: Tu método `InicializarCities` llena la colección con IDs de ciudad (`city_id`). Sin embargo, parece que debería estar llenándola con objetos `clsCity`. Si `colCities.Add rst!city_id` simplemente añade un ID en lugar de un objeto, intentar iterar a través de la colección como si contuviera objetos `clsCity` causará errores.Puedes solucionarlo creando instancias de `clsCity` y agregándolas a la colección en lugar de solo agregar el ID:
4. **Definición de la Colección y los Objetos**: Asegúrate de que la clase `clsCities` esté definida de manera que permita agregar y almacenar objetos `clsCity`. Si `clsCities` es simplemente una colección genérica, esto debería funcionar, pero si es una clase personalizada, necesitas asegurarte de que tenga métodos para agregar y recuperar objetos `clsCity`.
5. **Error Handling**: Tu manejo de errores en `CitiesInState` está bien, pero asegúrate de que esté capturando y mostrando los errores relevantes correctamente. El error «El objeto no admite la propiedad o método» sugiere que la línea que causa el problema está intentando usar un método o propiedad que uno de los objetos no soporta. Esto es más común cuando se espera un tipo de objeto, pero se recibe otro.

Revisa estos puntos en tu código. Es muy probable que el problema esté relacionado con la forma en que estás añadiendo elementos a la colección `colCities` o cómo estás intentando iterar a través de esta colección. Asegúrate de que los objetos que añades a `colCities` son efectivamente del tipo `clsCity` y que `clsCity` tiene definida la propiedad `city_txt` que intentas imprimir en tu bucle.\[/vc\_column\_text\]\[vc\_column\_text\]**Pregunta**:  

Revisa el código de la colección Cities

**Respuesta:  

**Tu implementación de la colección personalizada `clsCities` para manejar objetos de tipo `clsCity` parece estar en la dirección correcta, pero hay algunos aspectos y prácticas recomendadas que podemos revisar para asegurarnos de que funcione correctamente y de manera eficiente en VBA.

1. **Manejo de Errores**: En tus funciones `Add` y `AddCity`, el manejo de errores es adecuado, pero en la función `Item`, utilizas `On Error Resume Next`. Este enfoque puede ocultar errores en tu código. Es mejor manejar los errores de manera explícita o, al menos, documentar por qué se utiliza `On Error Resume Next` y restaurar el manejo normal de errores con `On Error GoTo 0` después de la línea que podría causar errores.
2. **Método Add**: En tu método `Add`, estás inicializando un nuevo objeto `clsCity` y luego lo agregas a la colección. Esto está bien, pero asegúrate de que el método `Inicializar` en `clsCity` esté bien definido y esté estableciendo correctamente todas las propiedades necesarias del objeto `clsCity` a partir del `city_id`.
3. **Método AddCity**: Este método permite agregar directamente un objeto `clsCity` a la colección, lo que es una buena práctica ya que ofrece flexibilidad para agregar objetos que ya han sido creados y posiblemente modificados. Solo asegúrate de que los objetos `clsCity` siempre tengan un `city_id` válido antes de intentar agregarlos a la colección.
4. **Método Item**: Este método permite acceder a elementos individuales de la colección por índice o clave. Asegúrate de que cuando uses este método, estés preparado para manejar casos donde el índice no existe o la clave no se encuentra en la colección, ya que `On Error Resume Next` puede ocultar estos problemas.
5. **Método NewEnum**: Implementar este método es una buena práctica ya que permite usar la sintaxis `For Each` en la colección personalizada. Parece que lo has hecho correctamente aquí, permitiendo que la colección se comporte más como una colección estándar de VBA.
6. **Documentación y Convenciones**: Aunque tu código parece estar bien en términos de funcionalidad, no olvides documentarlo adecuadamente. Comentar tu código ayudará a otros desarrolladores (y a ti mismo en el futuro) a entender rápidamente lo que cada parte se supone que debe hacer.
7. **Pruebas**: Después de realizar cualquier cambio, asegúrate de probar tu colección personalizada exhaustivamente. Asegúrate de probar la adición de nuevos objetos `clsCity`, el acceso a elementos individuales, la eliminación de elementos y la iteración a través de la colección con `For Each`.
8. **Optimización del Código**: Por último, aunque no menos importante, siempre busca maneras de optimizar tu código. Por ejemplo, si encuentras que estás utilizando una pieza de código repetidamente, considera si puede ser extraída a una función o procedimiento separado.

Si después de revisar y aplicar los puntos anteriores sigues teniendo problemas, sería útil revisar también cómo estás implementando y usando la clase `clsCity`, especialmente cómo se inicializa y cómo se manejan sus propiedades internas.\[/vc\_column\_text\]\[vc\_column\_text\]**Pregunta**:  

Con el mismo código este bucle funciona bien:

```
    
For ind = 1 To objState.CitiesInState.Count
    Set objCity = objState.CitiesInState.Item(ind)
    Debug.Print objCity.city_txt
Next
```

El problema surge cuando uso el bucle For Each  

**Respuesta:**

El hecho de que el bucle con el índice funcione correctamente pero el bucle `For Each` no, sugiere que hay un problema con cómo tu colección personalizada `clsCities` está implementando el mecanismo de enumeración necesario para el bucle `For Each`.

En VBA, para que una colección personalizada sea enumerable con `For Each`, debes asegurarte de lo siguiente:

1. **Implementar correctamente el método `_NewEnum`**: Este es el método que permite que tu colección personalizada sea utilizada con un bucle `For Each`. Parece que ya lo tienes en tu código, lo cual es bueno. Sin embargo, asegúrate de que está correctamente configurado. El método `_NewEnum` debe tener el atributo `[VB_UserMemId]` configurado en `-4`. Normalmente, este ajuste no se puede hacer directamente en el editor de VBA, sino que se debe hacer a través de la edición del archivo exportado o utilizando herramientas de terceros que permiten modificar los atributos de los miembros de una clase.Si después de verificar y corregir estos aspectos sigue sin funcionar, podría deberse a otras particularidades del entorno de VBA o a detalles específicos de tu implementación. Pero el ajuste más común y necesario para solucionar problemas con el bucle `For Each` en colecciones personalizadas es asegurarse de que el método `_NewEnum` esté correctamente atribuido y configurado, ya que es lo que permite que la colección sea enumerable. Ten en cuenta que esta modificación no se puede realizar directamente en el editor de VBA estándar. Necesitas exportar tu clase, editar el archivo de texto para añadir la línea `Attribute NewEnum.VB_UserMemId = -4` justo arriba del método `NewEnum`, y luego reimportar la clase. O usar una herramienta de terceros que permita modificar estos atributos.
2. **Implementación de la interfaz IUnknown**: Asegúrate de que tu colección maneja correctamente la interfaz `IUnknown` a través del método `_NewEnum`. Por lo general, esto se maneja automáticamente cuando se devuelve `mcolCities.[_NewEnum]`, pero si hay un problema en cómo se ha configurado la colección o la clase, podría resultar en errores.

\[/vc\_column\_text\]\[/vc\_column\]\[/vc\_row\]
