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.