MaximoAccess

Caro Usuário, não tire as suas duvidas nas Salas de Repositório, abra sempre um novo tópico relacionado, nas salas destinadas para o efeito, como Sala de Tabelas, Consultas, Formulários, Relatórios, Macros, Módulos e VBA.

Obrigado

Administração do MaximoAccess

Dicas Ms Access, Exemplos Ms Access, Codigos VBA Ms Access, SQL Ms Access

    Nomear legenda dos rótulos usando for next

    Compartilhe

    pcdesignerce
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 24
    Registrado : 13/02/2014

    Nomear legenda dos rótulos usando for next

    Mensagem  pcdesignerce em 15/1/2016, 20:34

    Olá,
    Estou precisando nomear a legenda dos rótulos de uns checkbox, mas a variável rotulo não esta funfando.
    achei que era alguma forma de concatenar, mas também não consegui.

    segue código:
    Código:
    Private Sub btcont_Click()

    Dim ContarCheckBox As Integer
    Dim x As Integer
    Dim rotulo As Label

    ContarCheckBox = DCount("[IdServico]", "tabServicos")

    For x = 1 To ContarCheckBox
        
        'Nesta linha retorna o esperado: lab1
        rotulo = "lab" & x
        
        'A partir desta linha já causa um erro de compilação: Método ou membro de dados não encontrado
        If Me.rotulo.Caption = "" Then

        Me.rotulo.Caption = DLookup("[txtServico]", "tabServicos", "[IdServico]=" & x)
        
        End If
        
    Next

    End Sub

    Vou utilizar esta instrução no load do form.
    Se tiver como corrigir esta instrução ou uma outra forma que faça a mesma tarefa
    Desde já agradeço.

    Noobezinho
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 2484
    Registrado : 29/06/2012

    Re: Nomear legenda dos rótulos usando for next

    Mensagem  Noobezinho em 16/1/2016, 13:43

    Paulo

    Veja se isso te ajuda:


    Dim ctl As Control,i As Integer,frm as form
    Set frm = Me
    i=0
    For Each ctl In frm.Controls
      Select Case ctl.ControlType
         Case acLabel ' É rótulo
              i= i+1
                 If ctl.Caption = "lab" & i
              End If
      End Select
    Next


    Como pode ver, o código faz um loop entre os controles do formulário.
    Quando encontra um rótulo, nomeia-o com incremento de i que é só
    incrementado quando encontra um rótulo.

    Espero que ajude.

    [ ]'s


    .................................................................................
    Noobezinho

    * A solução funcionou?  [Você precisa estar registrado e conectado para ver esta imagem.] 
    Agradeça e feche o tópico clicando no botão Resolvido
    Se não sabe como, veja [Você precisa estar registrado e conectado para ver este link.].

    Como anexar imagem no teu post do fórum : [Você precisa estar registrado e conectado para ver este link.]

    * Criar arquivos.zip com o Winrar - veja [Você precisa estar registrado e conectado para ver este link.].

    Atualmente estou verificando se quem está pedindo ajuda, ajudamos e não retornou.
    Se a pessoa em questão não deu retorno, não tentarei ajudar novamente .

    pcdesignerce
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 24
    Registrado : 13/02/2014

    Re: Nomear legenda dos rótulos usando for next

    Mensagem  pcdesignerce em 16/1/2016, 22:26

    Funcionou perfeitamente,
    muito obrigado Noobezinho.

    Ai galera quem precisar de algo parecido faz só a correção:
    Colca o Then no if: If ctl.Name= "lab" & i  Then
    Coloca a instrução a ser executada caso a condição seja verdadeira conforme sua necessidade.
    No meu caso foi; ctl.Caption = DLookup("[txtServico]", "tabServicos", "[IdServico]=" & i)
    Utilizei a função DLookup nomear os rótulos conforme registro da tabServicos.
    Outro detalhe como o loop percorre todos os controles e faz o incremento para todos os rótulos
    foi preciso acrescentar mais uma condição if para entra apenas no rótulos sem legendas

    Dim ctl As Control, i As Integer, frm As Form
    Set frm = Me
    i = 0
    For Each ctl In frm.Controls
    Select Case ctl.ControlType

    Case acLabel ' É rótulo

    If ctl.Caption = "" Then

    i = i + 1

    If ctl.Name = "lab" & i Then
    ctl.Caption = DLookup("[txtServico]", "tabServicos", "[IdServico]=" & i)
    End If

    End If

    End Select
    Next

    Noobezinho
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 2484
    Registrado : 29/06/2012

    Re: Nomear legenda dos rótulos usando for next

    Mensagem  Noobezinho em 17/1/2016, 04:28

    Ótimo Paulo

    Na realidade aquele "If e End If" foram  de "alegre". Razz

    O correto seria apenas:


    Select Case ctl.ControlType
        Case acLabel ' É rótulo

             i= i+1
             ctl.Caption = "lab" & i
             
    End Select


    Mas como resolveu, que bom que pude ajudar.

    Só falta colocar o resolvido no título do tópico.

    Edite uma mensagem tua e coloque o resolvido.
    Veja como na minha assinatura.

    Valeu o retorno!

    Boa sorte!


    .................................................................................
    Noobezinho

    * A solução funcionou?  [Você precisa estar registrado e conectado para ver esta imagem.] 
    Agradeça e feche o tópico clicando no botão Resolvido
    Se não sabe como, veja [Você precisa estar registrado e conectado para ver este link.].

    Como anexar imagem no teu post do fórum : [Você precisa estar registrado e conectado para ver este link.]

    * Criar arquivos.zip com o Winrar - veja [Você precisa estar registrado e conectado para ver este link.].

    Atualmente estou verificando se quem está pedindo ajuda, ajudamos e não retornou.
    Se a pessoa em questão não deu retorno, não tentarei ajudar novamente .

      Data/hora atual: 3/12/2016, 14:42