Dicas do OsmarJr

Enumerar todos os controles de um formulário


Como posso verificar todos os controles de um formulário e recuperar seus nomes?

Autor: Dev Hashish

Use a função a seguir como exemplo. Passe o nome do formulário e acompanhe na janela de depuração!!

Nota: Assegure-se de copiar, também, a função fIsLoaded, já que fEnumControls a usa internamente para ter certeza que o formulário a ser tratado está aberto.

 

'************ Início do Código ***************
' este código foi escrito originalmente por Dev Ashish.
' Ele não deve ser alterado ou distribuído,
' exceto como parte de um aplicativo.
' Use-o livremente em qualquer aplicativo,
' desde que esta nota de copyright permaneça inalterada.
'
' Código cortesia de
' Dev Ashish
'
Function fEnumControls(ByVal strfrmToEnum As String)
' Imprime o tipo e nome do controle
' NÃO enumera os controles internos a um subform
Dim astrCtlName() As String
Dim i As Integer, intCnt As Integer
Dim frm As Form
' Retire os indicadores de comentários nas duas próximas linhas
' para o Access 95
'Const acPage = 124
'Const acTabCtl = 123

    ' Se o formulário estiver fechado, sai da função
    If Not fIsLoaded(strfrmToEnum) Then
        MsgBox "Formulário " & strfrmToEnum & " provavelmente está fechado!! " & _
            vbCrLf & "Por favor, abra-o e tente novamente.", vbCritical
        Exit Function
    End If

    Set frm = Forms(strfrmToEnum)
    'Conta o número de controles
    intCnt = frm.Count
    
    'Inicializa a matriz para conter os nomes de controles
    ReDim astrCtlName(0 To intCnt - 1, 0 To 1)

    For i = 0 To intCnt - 1
        astrCtlName(i, 0) = frm(i).Name
        'Usa ControlType para determinar o Tipo de controle
        Select Case frm(i).ControlType
            Case acLabel: astrCtlName(i, 1) = "Rótulo"
            Case acRectangle: astrCtlName(i, 1) = "Retângulo"
            Case acLine: astrCtlName(i, 1) = "Linha"
            Case acImage: astrCtlName(i, 1) = "Imagem"
            Case acCommandButton: astrCtlName(i, 1) = "Botão de Comando"
            Case acOptionButton: astrCtlName(i, 1) = "Botão de Opção"
            Case acCheckBox: astrCtlName(i, 1) = "Check box"
            Case acOptionGroup: astrCtlName(i, 1) = "Grupo de Opção"
            Case acBoundObjectFrame: astrCtlName(i, 1) = "Moldura de objeto vinculado"
            Case acTextBox: astrCtlName(i, 1) = "Caixa de Texto"
            Case acListBox: astrCtlName(i, 1) = "Caixa de Listagem"
            Case acComboBox: astrCtlName(i, 1) = "Caixa de Combinação"
            Case acSubform: astrCtlName(i, 1) = "SubFormulário"
            Case acObjectFrame: astrCtlName(i, 1) = "Moldura de objeto desvinculado ou gráfico"
            Case acPageBreak: astrCtlName(i, 1) = "Quebra de página"
            Case acPage: astrCtlName(i, 1) = "Página"
            Case acCustomControl: astrCtlName(i, 1) = "Controle ActiveX"
            Case acToggleButton: astrCtlName(i, 1) = "Botão de Opção"
            Case acTabCtl: astrCtlName(i, 1) = "Controle Guia"
        End Select
    Next i
    
    ' Imprime a matriz de forma ordenada
    Debug.Print "Nome do Controle", "Tipo de Controle"
    Debug.Print "----------------", "----------------"
    For i = 0 To intCnt - 1
        Debug.Print astrCtlName(i, 0), astrCtlName(i, 1)
    Next i
    Erase astrCtlName
End Function
'************ Final do Código ***************
Home

Contato | Copyright©Osmar José Correia Júnior | 24-Nov-2005 18:23
Hosted by www.Geocities.ws

1