Compartir por


Valores de argumento de código de la propiedad RowSourceType (función definida por el usuario)

La función de Visual Basic que cree debe aceptar cinco argumentos. El primer argumento se debe declarar como control y los restantes como Variant. La propia función debe devolver una Variant.

Functionfunctionname (fldAs Control, idAs Variant, rowAs Variant, colAs Variant, codeAs Variant) As Variant

El procedimiento Function tiene los siguientes cinco argumentos requeridos.

Argumento Descripción
Fld Una variable de control que hace referencia al cuadro de lista o cuadro combinado que se está rellenando.
id Un valor único que identifica el control que se rellena. Esto es útil cuando se desee utilizar la misma función definida por el usuario para más de un cuadro de lista o cuadro combinado y sea necesario distinguir entre ellas. (El ejemplo establece esta variable al valor de la función Cronómetro (Timer)).
fila La fila que se está rellenando (basado en ceros).
col La columna que se está rellenando (basado en ceros).
code Una constante intrínseca que especifica la clase de información que se pide.

Nota:

Puesto que Microsoft Access llama a una función definida por el usuario varias veces para insertar elementos en una lista, a menudo es necesario preservar la información de una llamada a otra. La mejor forma de hacer esto es utilizar variables Static.

Microsoft Access llama repetidamente a la función definida por el usuario utilizando valores diferentes en el argumento código para especificar la información que necesita. El argumento código puede utilizar las siguientes constantes intrínsecas.

Constante Significado Valor devuelto por la función
acLBInitialize Initialize No-cero si la función puede rellenar la lista; False (0) o Nulo en caso contrario.
acLBOpen Abrir Valor de Id. no-cero si la función puede rellenar la lista; Falso o Nulo en caso contrario.
acLBGetRowCount Número de filas Número de filas de la lista (puede ser cero); -1 si se desconoce.
acLBGetColumnCount Número de columnas Número de columnas en la lista (no puede ser cero); debe coincidir con la configuración de la hoja de propiedades.
acLBGetColumnWidth Ancho de la columna Ancho (en twips) de la columna especificada por el argumento col ; -1 para usar el ancho predeterminado.
acLBGetValue Entrada de lista Entrada de la lista para ser mostrada en la fila y columna especificada por los argumentos fila y col.
acLBGetFormat Cadena de formato Dar formato a la cadena que se va a usar para dar formato a la entrada de lista que se muestra en la fila y la columna especificadas por los argumentos row y col ; -1 para usar el formato predeterminado.
acLBEnd Fin (la última llamada a una función definida por el usuario siempre utiliza este valor) Nada.
acLBClose (No usado) No se usa.

Access llama a la función definida por el usuario una vez para acLBInitialize, acLBOpen, acLBGetRowCount y acLBGetColumnCount. Inicializa la función definida por el usuario, abre la consulta y determina el número de filas y columnas.

Access llama a la función definida por el usuario dos veces para acLBGetColumnWidth, una vez para determinar el ancho total del cuadro de lista o cuadro combinado y una segunda vez para establecer el ancho de columna.

El número de veces que la función definida por el usuario es llamada por acLBGetValue y acLBGetFormat para obtener las entradas de la lista y para dar formato a las cadenas de formato varía dependiendo del número de entradas, el desplazamiento del usuario y otros factores.

Access llama a la función definida por el usuario para acLBEnd cuando se cierra el formulario o cada vez que se consulta el cuadro de lista o el cuadro combinado.

Cada vez que se requiere un valor determinado (como el número de columnas), devolver Null o cualquier valor no válido hace que Access deje de llamar a la función definida por el usuario con ese código.

Sugerencia

Use la estructura de código Seleccionar caso del ejemplo como plantilla para sus propias funciones definidas por el usuario de la propiedad RowSourceType .

Ejemplo

La siguiente función definida por el usuario devuelve una lista de los siguientes cuatro Lunes que siguen a la fecha de hoy. Para llamar a esta función desde un control cuadro de lista, introduzca ListarLunes como el valor de la propiedad TipoDeOrigenDeLaFila (RowSourceType) y deje en blanco el valor de la propiedad OrigenDeLaFila (RowSource).

Public Function ListMondays(fld As Control, id As Variant, _
    row As Variant, col As Variant, code As Variant) _ 
    As Variant 

    Dim Offset      As Integer
    Dim WeekdayDate As Date 
 
    Select Case code 
        Case acLBInitialize     ' Initialize. 
            ListMondays = True 
        Case acLBOpen           ' Open. 
            ListMondays = Timer ' Unique ID. 
        Case acLBGetRowCount    ' Get rows. 
            ListMondays = 4 
        Case acLBGetColumnCount ' Get columns. 
            ListMondays = 1 
        Case acLBGetColumnWidth ' Get column width. 
            ListMondays = -1    ' Use default width. 
        Case acLBGetValue       ' Get the data. 
            Offset = Abs((9 - Weekday(Date)) Mod 7) 
            WeekdayDate = DateAdd("d", _
                Offset + 7 * row, Date) 
            ListMondays = Format(WeekdayDate, _
                "mmmm d") 
    End Select 

End Function

El siguiente ejemplo utiliza una matriz estática para almacenar los nombres de las bases de datos en el directorio actual. Para llamar a esta función, introduzca ListMDBs como el valor de la propiedad TipoDeOrigenDeLaFila (RowSourceType) y deje en blanco el valor de la propiedad OrigenDeLaFila (RowSource).

Public Function ListMDBs(fld As Control, id As Variant, _ 
    row As Variant, col As Variant, code As Variant) _
    As Variant 
    
    Static dbs(127) As String
    Static Entries  As Integer 
    Dim ReturnVal   As Variant 

    ReturnVal = Null 
    Select Case code 
        Case acLBInitialize     ' Initialize. 
            Entries = 0 
            dbs(Entries ) = Dir("*.MDB") 
            Do Until dbs(Entries) = "" Or Entries >= 127 
                Entries = Entries + 1 
                dbs(Entries) = Dir 
            Loop 
            ReturnVal = Entries 
        Case acLBOpen           ' Open. 
            ' Generate unique ID for control. 
            ReturnVal = Timer 
        Case acLBGetRowCount    ' Get number of rows. 
            ReturnVal = Entries 
        Case acLBGetColumnCount ' Get number of columns. 
            ReturnVal = 1 
        Case acLBGetColumnWidth ' Column width. 
            ' -1 forces use of default width. 
            ReturnVal = -1 
        Case acLBGetValue       ' Get data. 
            ReturnVal = dbs(row) 
        Case acLBEnd            ' End. 
            Erase dbs 
    End Select 
    ListMDBs = ReturnVal 
    
End Function

Soporte técnico y comentarios

¿Tiene preguntas o comentarios sobre VBA para Office o esta documentación? Vea Soporte técnico y comentarios sobre VBA para Office para obtener ayuda sobre las formas en las que puede recibir soporte técnico y enviar comentarios.