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

    remover todos os rótulos de um form dinamicamente

    Compartilhe

    pcdesignerce
    Novato
    Novato

    Respeito às Regras 100%

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

    remover todos os rótulos de um form dinamicamente

    Mensagem  pcdesignerce em Dom 26 Jun 2016, 18:46

    Olá boa tarde a todos.
    é o seguinte addicionei ums rotulos da seguinte forma

    'Cria a controle labl com os dados
           Set ctlText = CreateControl("FormVisualizarContasBancarias", acLabel, acDetail, , campo, esquerdaText, topoText, larguraText, alturaText)
           ctlText.Name = banco & "campo" & j
           
           ' Cria label do controle.
           Set ctlLabel = CreateControl("FormVisualizarContasBancarias", acLabel, acDetail, , rotulo, esquerdaLabel, topoLabel, larguraLabel, alturaLabel)
           ctlLabel.Name = banco & "rotulo" & j

    estou tentando remover conforme código abaixo, mas esta dando o seguinte erro:
    erro de compilação: o tipo definido pelo usuário não foi definido.

    Dim c As Control
       For Each c In Controls
           If TypeOf c Is MSForms.Label Then
               Me.Controls.Remove c.Name
           End If
       Next

    desde já agradeço a atenção

    Avelino Sampaio
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3348
    Registrado : 04/04/2010

    Re: remover todos os rótulos de um form dinamicamente

    Mensagem  Avelino Sampaio em Dom 26 Jun 2016, 22:47

    Olá!

    use o Application.DeleteControl().  Exemplo:

    Dim ctl As control, frm As Form
    DoCmd.OpenForm "FormVisualizarContasBancarias", acDesign
    Set frm = Forms!FormVisualizarContasBancarias
    For Each ctl In frm.Controls
       If ctl.ControlType = acLabel Then
           Application.DeleteControl frm.Name, ctl.Name
       End If
    Next


    Aguardamos


    .................................................................................
    ============ Quer aprender Access em alta velocidade ? ============

    || [Você precisa estar registrado e conectado para ver esta imagem.] Acesse o site UsandoAccess.com.br e veja um ótimo kit de ensino que tenho para você.

    ===========================================================

    pcdesignerce
    Novato
    Novato

    Respeito às Regras 100%

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

    Re: remover todos os rótulos de um form dinamicamente

    Mensagem  pcdesignerce em Qua 29 Jun 2016, 17:43

    Olá nobre Avelino
    Funcionou em parte só não entendi porque, se todos controles são rótulos e apenas são nomeados diferentes.

    O rótulos criado com esta linha de comando apagou todos até um rótulo criado manualmente como titulo do form.
    'Cria a controle labl com os dados
          Set ctlText = CreateControl("FormVisualizarContasBancarias", acLabel, acDetail, , campo, esquerdaText, topoText, larguraText, alturaText)
          ctlText.Name = banco & "campo" & j

    Os rótulos criados com este comando não apagou
    ' Cria label do controle.
          Set ctlLabel = CreateControl("FormVisualizarContasBancarias", acLabel, acDetail, , rotulo, esquerdaLabel, topoLabel, larguraLabel, alturaLabel)
          ctlLabel.Name = banco & "rotulo" & j

    mas também agora eu dei uma modificado no código, que estava muito extenso, com muitos rótulos sem necessidade, então, substitui a função split() por replace()
    e em vez de criar uns 50 rótulos crio apenas 4, mas continua não deletando e aparece esta mensagem abaixo:

    [Você precisa estar registrado e conectado para ver esta imagem.]

    Eu não tenho certeza mas no procedimento que passou acho que não se faz necessário passar o nome dos rótulos já que parte deles foram deletados.

    Avelino Sampaio
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3348
    Registrado : 04/04/2010

    Re: remover todos os rótulos de um form dinamicamente

    Mensagem  Avelino Sampaio em Qua 29 Jun 2016, 23:02

    Olá!

    Experimente assim:

    Dim ctl As control, frm As Form, seq$, k, j%
    DoCmd.OpenForm "frmTeste4", acDesign
    Set frm = Forms!frmTeste4
    For Each ctl In frm.Controls
    If ctl.ControlType = acLabel Then
    seq = seq & "," & ctl.Name
    End If
    Next
    seq = Mid(seq, 2)
    k = Split(seq, ",")
    For j = 0 To UBound(k)
    Application.DeleteControl frm.Name, k(j)
    Next


    Aguardamos


    .................................................................................
    ============ Quer aprender Access em alta velocidade ? ============

    || [Você precisa estar registrado e conectado para ver esta imagem.] Acesse o site UsandoAccess.com.br e veja um ótimo kit de ensino que tenho para você.

    ===========================================================

    pcdesignerce
    Novato
    Novato

    Respeito às Regras 100%

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

    Re: remover todos os rótulos de um form dinamicamente

    Mensagem  pcdesignerce em Qui 30 Jun 2016, 14:15

    Bom dia Avelino,
    Desculpa o trabalho, mas acho que desta vez consegui da um rumo para a solução.
    Continua dando a mesma mensagem conforme imagem a baixo.
    fiz alguns testes e por fim testei um simples botão com uma msgbox, mesmo assim aparecia o aviso
    com isso entendi que o erro é no form, então deletei e recriei o form, então testei o primeiro código que você me passou
    funcionou perfeitamente, mas ai é que esta o problema, após roda o procedimento para apagar os rótulos a primeira vez
    é como deixasse de existir o nome do form, controle ou da instrução do botão dentro do access ou vba.
    Ai quando executo novamente o comando de criar os rótulos funciona corretamente, mas o comando de apagar os rótulos
    ou qualquer outro comando dentro do form por mais simples que seja, aparece a mensagem conforme imagem abaixo.
    Mando a em da mensagem por completo pra você avaliar.
    [Você precisa estar registrado e conectado para ver esta imagem.]

    pcdesignerce
    Novato
    Novato

    Respeito às Regras 100%

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

    Re: remover todos os rótulos de um form dinamicamente

    Mensagem  pcdesignerce em Qui 30 Jun 2016, 22:01

    Boa Noite Avelino,

    Dei uma mudada aqui nas coisas que funcionou em parte
    fiz de outra forma, acho que o problema é que o forme esta sendo fechado sem salvar a deleção.

    Private Sub Comando0_Click()
    Dim ctl As Control, frm As Form
    DoCmd.OpenForm "FormVisualizarContasBancarias", acDesign
    Set frm = Forms!FormVisualizarContasBancarias

    For Each ctl In frm.Controls
    X = ctl.Name

       If X = "Banco1" Or X = "Banco2" Or X = "Banco3" Or X = "Banco4" Then
       Application.DeleteControl frm.Name, X
       End If
       
    Next

    DoCmd.Save
    DoCmd.OpenForm "FormVisualizarContasBancarias"


    End Sub

    o que esta acontecendo aqui no final é o seguinte:
    com o DoCmd.OpenForm "FormVisualizarContasBancarias" funciona perfeitamente
    se em vez de DoCmd.OpenForm "FormVisualizarContasBancarias" eu colocar DoCmd.Close
    simplesmente fecha o form as vezes apaga, ou apaga somente 1 ou não apaga nenhum rotulo.

    Avelino Sampaio
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3348
    Registrado : 04/04/2010

    Re: remover todos os rótulos de um form dinamicamente

    Mensagem  Avelino Sampaio em Qui 30 Jun 2016, 23:06

    pcdesignerce

    Eu havia detectado problemas ao delatar os campos dentro do For Each.  Por isso, no meu último código exemplo, eu só peguei os nomes no laço For Each e deletei os campos num For simples. SE vc não conseguir amanha faço um exemplo e te mando.


    Última edição por Avelino Sampaio em Sex 01 Jul 2016, 09:58, editado 1 vez(es)


    .................................................................................
    ============ Quer aprender Access em alta velocidade ? ============

    || [Você precisa estar registrado e conectado para ver esta imagem.] Acesse o site UsandoAccess.com.br e veja um ótimo kit de ensino que tenho para você.

    ===========================================================

    pcdesignerce
    Novato
    Novato

    Respeito às Regras 100%

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

    Re: remover todos os rótulos de um form dinamicamente

    Mensagem  pcdesignerce em Sex 01 Jul 2016, 04:23

    blz Avelino, felizmente vou te aguardar, pois já tentei de todas as formas que meu conhecimento permite
    mas não cheguei uma solução. Também queria se possível passar um link com estudo a respeito desse caracteres
    que procedem nas variáveis "$" e "%".

    Desde já agradeço sua atenção

    Avelino Sampaio
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3348
    Registrado : 04/04/2010

    Re: remover todos os rótulos de um form dinamicamente

    Mensagem  Avelino Sampaio em Sex 01 Jul 2016, 09:57

    Quanto aos caracteres, na minha dica 19

    [Você precisa estar registrado e conectado para ver este link.]

    Bom estudo!


    .................................................................................
    ============ Quer aprender Access em alta velocidade ? ============

    || [Você precisa estar registrado e conectado para ver esta imagem.] Acesse o site UsandoAccess.com.br e veja um ótimo kit de ensino que tenho para você.

    ===========================================================

      Data/hora atual: Seg 05 Dez 2016, 04:26