Ayer, haciendo yo una cosilla con un combo, desde Access XP, voy todo chulo
y para agregar elementos voy y planto:
Micombo.AddItem   y funciona claro.
No me daba cuenta (Emilio Martín y Juan me lo dijeron mas tarde) que el
método AddItem del cuadro combinado no existe en la Version 2000 de Access.
Bien....
Pregunta:
¿Se puede añadir un metodo a un control de Access de una forma elegante?
En su defecto, si lo anterior no es posible:
Al igual que en Visual existen las sentencias #if #else....¿Se podría
escribir código alternativo dependiendo de la versión Access que tenga el
usuario.

#If  AccessXP
 combo.Additem
#else
 'meter elementos al Combo mediante RowSource concadenado

Es que por ejemplo, para 'redefinir' una función de VBA, basta con
declararla en un modulo.
Si yo quiero un Msgbox personalizado, creo la funcion Msgbox
Function Msgbox(bla bla bla)

End Function

y de esta forma queda machacada la Msgbox original de VBA.(Que siempre se
podrá llamar con VBA.Msgbox....)

Pues algo parecido pretendería hacer yo con los metodos, en este caso, crear
el AddItem en Access 2000.....
¿Se puede?


RESPUESTAS DE ESTE INTERSANTE HILO
==================================



Juan. M.Afan de Ribera
----------------------
Hola Paco, con esto sabrías la versión de access (en este caso XP):

If SysCmd(acSysCmdAccessVer) = "10.0" Then ...


EDUARDO OLAZ
------------
En principio veo algo complicado añadir un método a un control; así a prior,
no se me ocurre cómo hacerlo.
Lo que se podría hacer es crear una clase a la que se le asigne un cuadro de
lista o un combo y crear los métodos correspondientes en la clase que
añadan, quiten o modifiquen los elementos del control asignado.
También se podrían crear esos métodos en el propio módulo de clase del
formulario.
Lo voy a mirar.

De todas formas a un formulario se le pueden añadir métodos, porque tenemos
acceso a sumódulo de clase asociado, pero eso no pasa con los controles.
En otros lenguajes, como Delphi, sí que podríamos hacerlo; con Net no lo se.


CHEA
----
Una alternativa a usar a propiedad RowSource sería asignar una función a la
propiedad "Tipo de origen de la fila". Yo lo tengo hecho en
http://usuarios.lycos.es/jbchea/Combos.zip, en "Otra forma de llenar combos"
y me parece que tú también lo tienes en algún sitio.

La función tomaría los datos de una colección y, para añadir o quitar
valores, se podrían utilizar directamente los métodos Add y Remove de la
Collection, con un simple requery del combo se acualizaría a los nuevos
datos.
http://usuarios.lycos.es/jbchea/Combos.zip


Y sigue CHEA:
-------------
El movimiento se demuestra andado.

Con un cuadro combinado en el pusiéramos en la propiedad "Tipo de origen de
la fila" = OrigenCombo, podríamos utilizar el siguiente código:

Option Compare Database
Option Explicit
Dim colItems As New Collection, stItem As String

Private Function OrigenCombo(campo As Control, id As Long, fila As Long, Col As Long, código As Integer)
    Dim ValRetorno
    ValRetorno = Null
    Select Case código
        Case LB_INITIALIZE      'Inicializar.
            ValRetorno = colItems.Count
        Case LB_OPEN                'Abrir.
            ValRetorno = Timer      'ID único para control.

        Case LB_GETROWCOUNT     'Número de filas.
            ValRetorno = colItems.Count
        Case LB_GETCOLUMNCOUNT      'Número de columnas.
            ValRetorno = 1
        Case LB_GETCOLUMNWIDTH      'Anchura de columna.
            ValRetorno = -1     'Usar la anchura predeterminada.
        Case LB_GETVALUE            'Obtener los datos.
            ValRetorno = colItems(fila + 1) 'fila empieza en 0 y la colección en 1
        Case LB_END                 'Terminar

    End Select


    OrigenCombo = ValRetorno

End Function


Public Sub Prueba()
Dim stItem As String, i As Integer
For i = 1 To 1000
    stItem = Str(i)
    colItems.Add stItem
Next i
[Cuadro combinado0].Requery
End Sub
--

ATRACTOR
========
Hola Paco, si me permites la confianza, precisamente en tu Web tienes una 
base datos access 97 que se llama respant.zip, que fue una adaptación que 
hice, en su día,  para access 97 de un ejemplo que había en la web del 
Guille sobre cambiar la resolución de pantalla.
Precisamente una de las cosas que hubo que modificar fue el poder llenar 
un cuadro de lista, careciendo del método AddItem.
Pues lo dicho, por si te sirve, lo tienes en tu propia web.
Un Saludo.

Efectivamente en dicho fichero se recoge un buen metodo para rellenar
este tipo de controles sin el metodo AddItem

http://www20.brinkster.com/accessbhuo/id.asp?topico=55
ahí puedes bajarte el ejemplo de Atractor y ver su tecnica para rellenar este
tipo de controles (EN este caso un cuadro de lista)


EDUARDO OLAZ DE NUEVO CON UN CODIGO MUY BUENO
=============================================
He creado un formulario con un ComboBox cmbCombo1
y  dos Botones cmdQuitarDato y cmdAñadirDato

Aparte tengo un módulo con las funciones
    ActualizarColeccion
    ActualizarCombo
    AñadirElemento
    EliminarElemento
    DescargarColeccion

En el módulo de clase del formulario pongo:
________________________________

Option Compare Database
Option Explicit

Dim ColCombo1 As New Collection

Private Sub cmdQuitarDato_Click()
    cmbCombo1_RemoveItem cmbCombo1
    ActualizarCombo cmbCombo1, ColCombo1
End Sub

Private Sub cmdAñadirDato_Click()
    Static lngAñadido As Long
    Dim strDato As String
    lngAñadido = lngAñadido + 1
    strDato = "Dato Añadido " & lngAñadido
    cmbCombo1_AddItem strDato
    cmbCombo1 = strDato
End Sub

Private Sub Form_Load()
    cmbCombo1.RowSourceType = "Value List"
    'Establezco unos valores para el combo box
    cmbCombo1.RowSource = "Dato 01;Dato 02;Dato 03;Dato 04;Dato 05"
    ' Actualizo la colección asociada al combo
    ActualizarColeccion cmbCombo1, ColCombo1
End Sub

Public Sub cmbCombo1_AddItem(Elemento As String, Optional Posicion As Long =
0)
    AñadirElemento Elemento, ColCombo1, ColCombo1.Count + 1
    ActualizarCombo cmbCombo1, ColCombo1
End Sub

Public Sub cmbCombo1_RemoveItem(Elemento As String)
    EliminarElemento Elemento, ColCombo1
    ActualizarCombo cmbCombo1, ColCombo1
    If ColCombo1.Count > 0 Then
        cmbCombo1 = ColCombo1.Item(1)
    Else
        cmbCombo1 = ""
    End If
End Sub

Private Sub Form_Unload(Cancel As Integer)
    'Descargamos la colección
    DescargarColeccion ColCombo1
End Sub
________________________________

El código del módulo es:

________________________________

Option Compare Database
Option Explicit

Public Sub ActualizarColeccion(Combo As ComboBox, Coleccion As Collection)
    'Cargamos en la colección los datos del combo
    Dim i As Long
    For i = 0 To Combo.ListCount - 1
        Coleccion.Add Combo.ItemData(i)
    Next
    If Combo.ListCount Then
        Combo = Coleccion(1)
    End If
End Sub

Public Sub ActualizarCombo(Combo As ComboBox, Coleccion As Collection)
    Dim i As Long
    Dim strRowSource As String
    For i = 1 To Coleccion.Count
        strRowSource = strRowSource & Coleccion.Item(i)
        If i < Coleccion.Count Then
            strRowSource = strRowSource & ";"
        End If
    Next i
    Combo.RowSource = strRowSource
End Sub

Public Sub AñadirElemento(Elemento As String, Coleccion As Collection,
Posicion As Long)
    Dim lngElementos As Long
    lngElementos = Coleccion.Count
    Select Case Posicion
    Case Is < 1
        Coleccion.Add Elemento, , 1
    Case Is > lngElementos
        Coleccion.Add Elemento
    Case Else
        Coleccion.Add Elemento, , Posicion
    End Select
End Sub
Public Sub EliminarElemento(Elemento As String, Coleccion As Collection)
     Dim i As Long
        For i = 1 To Coleccion.Count
            If Coleccion.Item(i) = Elemento Then
                Coleccion.Remove (i)
                Exit Sub
            End If
        Next
End Sub

Public Sub DescargarColeccion(Coleccion As Collection)
     Dim i As Long
        For i = Coleccion.Count To 1 Step -1
            Coleccion.Remove (i)
        Next
End Sub



    Source: geocities.com/es/ensolva/Descargas/Documentos

               ( geocities.com/es/ensolva/Descargas)                   ( geocities.com/es/ensolva)                   ( geocities.com/es)