Compartilhar via


Valores de argumento de código da propriedade RowSourceType (função definida pelo utilizador)

A função Visual Basic que criar tem de aceitar cinco argumentos. O primeiro argumento deve ser declarado como um controle e os argumentos restantes como Variant. A própria função deve retornar um Variant.

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

O procedimento Function tem os cinco argumentos exigidos a seguir.

Argumento Descrição
fld Uma variável de controle referente à caixa de listagem ou caixa de combinação sendo preenchida.
id Um valor exclusivo que identifica o controle sendo preenchido. Isso é conveniente quando você deseja utilizar a mesma função definida pelo usuário para mais de uma caixa de listagem ou caixa de combinação, tendo que distinguir entre as mesmas. (O exemplo define essa variável como o valor da função Cronômetro).
linha A linha sendo preenchida (com base em 0).
col A coluna sendo preenchida (com base em 0).
code Uma constante intrínseca que especifica o tipo de informação que está sendo solicitada.

Observação

Como o Microsoft Access chama uma função definida pelo usuário várias vezes para inserir itens em uma lista, você deve frequentemente preservar informações entre uma chamada e outra. A melhor maneira de fazer isso é utilizar variáveis Static.

O Microsoft Access chama a função definida pelo usuário utilizando repetidamente valores diferentes no argumento code para especificar as informações de que necessita. O argumento code pode utilizar as constantes intrínsecas a seguir.

Constant Significado A função retorna
acLBInitialize Inicializar Diferente de zero se a função preenche a lista; caso contrário, False (0) ou Nulo.
acLBAbrir Abrir Valor de identificação diferente de zero se a função preenche a lista; caso contrário, False ou Nulo.
acLBGetRowCount Número de linhas Número de linhas na lista (pode ser zero); -1, se desconhecido.
acLBGetColumnCount Número de colunas Número de colunas na lista (não pode ser zero); deve coincidir com o valor da folha de propriedades.
acLBGetColumnWidth Largura da coluna Largura (em twips) da coluna especificada pelo argumento col ; -1 para utilizar a largura predefinida.
acLBGetValue Entrada da lista Entrada da lista a ser exibida na linha e coluna especificadas pelos argumentos row e col.
acLBGetFormat Sequência de formato Formatar cadeia a utilizar para formatar a entrada de lista apresentada na linha e coluna especificadas pelos argumentos de linha e col ; -1 para utilizar o formato predefinido.
acLBEnd Finalizar (a última chamada a uma função definida pelo usuário sempre utiliza este valor) Nada.
acLBClose (Não utilizado) Não usado.

O Access chama a função definida pelo utilizador uma vez para acLBInitialize, acLBOpen, acLBGetRowCount e acLBGetColumnCount. Ele inicializa a função definida pelo usuário, abre a consulta e determina o número de linhas e colunas.

O Access chama a função definida pelo utilizador duas vezes para acLBGetColumnWidth, uma vez para determinar a largura total da caixa de listagem ou caixa de combinação e uma segunda vez para definir a largura da coluna.

O número de vezes que sua função definida pelo usuário é chamada para que acLBGetValue e acLBGetFormat obtenham entradas da lista e formatem sequências é variável, dependendo do número de entradas, da rolagem feita pelo usuário e de outros fatores.

O Access chama a função definida pelo utilizador para acLBEnd quando o formulário é fechado ou sempre que a caixa de listagem ou caixa de combinação é consultada.

Sempre que for necessário um valor específico (como o número de colunas), devolver Nulo ou qualquer valor inválido faz com que o Access deixe de chamar a função definida pelo utilizador com esse código.

Dica

Utilize a estrutura selecionar código de caso do exemplo como um modelo para as suas próprias funções definidas pelo utilizador da propriedade RowSourceType .

Exemplo

A função definida pelo usuário a seguir retorna uma lista dos próximos quatro domingos a partir da data de hoje. To call this function from a list box control, enter ListMondays as the RowSourceType property setting and leave the RowSource property setting blank.

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

The next example uses a static array to store the names of the databases in the current directory. Para chamar esta função, insira ListMDBs como configuração da propriedade RowSourceType e deixe a configuração da propriedade RowSource vazia.

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

Suporte e comentários

Tem dúvidas ou quer enviar comentários sobre o VBA para Office ou sobre esta documentação? Confira Suporte e comentários sobre o VBA para Office a fim de obter orientação sobre as maneiras pelas quais você pode receber suporte e fornecer comentários.