none
Configuração de data RRS feed

  • Pergunta

  • Senhores.

    Tenho um formulário (Userform) com uma textbox que recebe uma data. Para evitar o preenchimento de datas erradas adotei o procedimento Keypress, descrita a seguir:

    Private Sub Txb_data_inicial_adm_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)

        Txb_data_inicial_adm.MaxLength = 10
        Select Case KeyAscii
        Case 8
        Case 13: SendKeys "(TAB)"
        Case 48 To 57
            If Txb_data_inicial_adm.SelStart = 2 Then Txb_data_inicial_adm.SelText = "/"
            If Txb_data_inicial_adm.SelStart = 5 Then Txb_data_inicial_adm.SelText = "/"
            Case Else: leyascii = 0
        End Select

    End Sub

    Todavia, minha dúvida é que essa data informada na textbox (Txb_data_inicial_adm) é salva em uma planilha do excel, em uma célula JÁ FORMATADA COM A CONFIGURAÇÃO DE DATA. Isso é muito importante, pois mesmo a célula já estando formatada para receber datas, quando a célula recebe o valor da textbox, a célula não entende uma data. Somente quando clico na célula (operação F2 e enter) é que ela reconhece a data.

    Por exemplo: digito na Textbox  a data 01/08/2018. A célula recebe o valor 01/08/2018. Porém quando clico na célula, para edição, o valor então atualiza para ago/2018. Ou seja, a célula só reconhece a data depois do procedimento manual de F2 + enter. Se tento fazer qualquer operação com essa data, como o excel ainda não reconhece como uma data, nenhuma macro ou fórmula funciona.

    Espero ter explicado minha dúvida. Agradeço antemão qualquer auxílio.

    segunda-feira, 13 de agosto de 2018 20:45

Todas as Respostas

  • Olá, boa noite.

    Fiz uns testes aqui e cheguei a uma possibilidade. Quando utilizo:

    Range("A3").Value = TextBox1
    

    Realmente acontece o que você relata. Mas utilizando:

    Range("A1").Value = TextBox1.Value

    Não! Funciona corretamente.

    Isso reforça ainda mais uma boa prática de programação: qualifique tudo quanto possível. Ou seja, seria ainda melhor:

    ActiveSheet.Range("A1").Value = Me.TextBox1.Value

    Abraço.


    Filipe Magno

    quarta-feira, 15 de agosto de 2018 01:21
  • Olá Filipe. 

    Agradeço a atenção.

    Descobri duas maneiras de resolver a situação.

    A primeira é declarar uma variável como "as date", então, definimos o valor da variável como a da textbox. Nesse sentido, em vez de igualar o valor da célula como o valor da textbox, iguala-se ao valor da variável. Resolve perfeitamente.

    A segunda é inserir no range uma fórmula local na seguinte descrição:

    Cells(5, coluna).FormulaLocal = "=data.valor(" & """ " & Me.Txb_data_inicial2 & """ " & ")"

    Assim, por exemplo, a célula do excel já transforma o valor do textbox em uma data. Também funciona perfeitamente. 

    As duas opções apenas dependem de um pouco mais de trabalho e da funcionalidade pretendida. Ressalto que, se desejo fazer a operação inversa, trazer ao valor da textbox o valor contido em uma célula, o textbox retorna apenas a data, desconsiderando a fórmula e, entendendo o resultado da fórmula.

    Fica bem legal e é uma dica para futuras solicitações. 

    Agradeço mais uma vez.

    sexta-feira, 17 de agosto de 2018 21:31