Vídeo recomendado
https://youtu.be/diWPPPhW-9E

Alterar vária textbox ao mesmo tempo

Fórum para dúvidas sobre os fundamentos da linguagem de programação Visual Basic no contexto do VBA
ioncila
Colaborador
Colaborador
Mensagens: 35
Registrado em: Qui Dez 03, 2009 2:15 pm

Alterar vária textbox ao mesmo tempo

Mensagem por ioncila »

Olá
Tenho este código numa userform (dentro de um evento listview_click) que verifica em 5 textbox se a data inserida é anterior à data actual.
O que eu gostaria de saber é como posso simplificar o código. Quero fazer o mesmo noutra userform que tem mais de 10 textbox e assim o código torna-se muito extenso.

Código: Selecionar todos

 'verificar a data de validade dos documentos
    Dim CurrDate As Date
    CurrDate = Now - 1
    If txtValDss < CurrDate Then
    txtValDss.ForeColor = vbRed
    txtValDss.Font.Bold = True
    Else: txtValDss.ForeColor = vbBlack
    End If
    If txtValDrf < CurrDate Then
    txtValDrf.ForeColor = vbRed
    txtValDrf.Font.Bold = True
    Else: txtValDrf.ForeColor = vbBlack
    End If
    If txtValSrc < CurrDate Then
    txtValSrc.ForeColor = vbRed
    txtValSrc.Font.Bold = True
    Else: txtValSrc.ForeColor = vbBlack
    End If
    If txtValSat < CurrDate Then
    txtValSat.ForeColor = vbRed
    txtValSat.Font.Bold = True
    Else: txtValSat.ForeColor = vbBlack
    End If
    If txtValAlv < CurrDate Then
    txtValAlv.ForeColor = vbRed
    txtValAlv.Font.Bold = True
    Else: txtValAlv.ForeColor = vbBlack
    End If
Obrigado
Ioncila


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Avatar do usuário
Vega
Colaborador
Colaborador
Mensagens: 26
Registrado em: Sáb Ago 18, 2012 7:46 pm

Re: Alterar vária textbox ao mesmo tempo

Mensagem por Vega »

ioncila,

Você pode simplificar código com uma sub que verifica todos os controles de um Form.

No código abaixo eu fiz isso. O For...Each verifica todos os controles e identifica o TextBox para validar se a data digitada é menor que a atual.

Código: Selecionar todos

Sub VerificarDatas(Formulario As Object)
Dim DataAtual   As Date
Dim Controle    As Object

DataAtual = Now - 1

For Each Controle In Formulario.Controls

    If TypeName(Controle) = "TextBox" Then
        Controle.ForeColor = IIf(Controle.Value < DataAtual, vbRed, vbBlack)
        Controle.Font.Bold = IIf(Controle.Value < DataAtual, True, False)
    End If

Next Controle

End Sub

Private Sub CommandButton1_Click()
    Call VerificarDatas(Me)
End Sub


ioncila
Colaborador
Colaborador
Mensagens: 35
Registrado em: Qui Dez 03, 2009 2:15 pm

Re: Alterar vária textbox ao mesmo tempo

Mensagem por ioncila »

Vega
Muito obrigado pela ajuda.
O seu código funciona tal como eu desejo. Há apenas um senão:
Ele afecta todas as textbox com data e eu só pretendia afectar algumas onde o realce da condição é importante.
Como faço para conseguir isso?
Uma pequena nota: todas as textbox que pretendo afectar estão nomeadas com "Val...", como pode ver no código que postei. Existe alguma maneira de poder referenciar as textbox com esse prefixo?
Obrigado
Ioncila


Avatar do usuário
Vega
Colaborador
Colaborador
Mensagens: 26
Registrado em: Sáb Ago 18, 2012 7:46 pm

Re: Alterar vária textbox ao mesmo tempo

Mensagem por Vega »

Nesse caso você pode fazer uma pequena alteração no código

Altere a linha:

Código: Selecionar todos

If TypeName(Controle) = "TextBox" Then
Para:

Código: Selecionar todos

If (TypeName(Controle) = "TextBox") And (Mid(Controle.Name, 4, 3) = "Val") Then
Dessa forma a condição com base no padrão do Nome do controle também é verificada


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


ioncila
Colaborador
Colaborador
Mensagens: 35
Registrado em: Qui Dez 03, 2009 2:15 pm

Re: Alterar vária textbox ao mesmo tempo

Mensagem por ioncila »

Vega
Desculpe a resposta tardia.
Muito obrigado pela ajuda. Funciona Perfeitamente.
Ioncila


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Responder