Formatação de data ...
 
Notifications
Clear all

Formatação de data no formulário e classificação

5 Posts
3 Usuários
0 Reactions
1,250 Visualizações
(@creuza)
Posts: 15
Active Member
Topic starter
 

Prezados
No meu projeto criei um formulário para a inserção de dados na planilha , tenho 5 textbox que são campos de data:
1ª folga domingo
1ª folga sábado inteiro
1ª folga 1/2 sábado
Inicio de férias
Fim de férias
Li aqui no fórum umas 75 dicas mas, elas não funcionaram ou melhor eu não soube fazê-las funcionar. me da uma ajudinha ?

1 - Quando digito 03/09/2017 , o dado entra na planilha 09/03/2017 e as formulas que calculam as folgas não funcionam.

2 - Os campos inicio e fim de férias e invariavelmente um dos campos de folga no sábado ficarão em branco,o Cdate , e o format não admitem a célula em branco fazendo o comando ir para o depurador.... não sei o que estou fazendo errado

3- Quando faço uma busca pela matricula, ele deveria trazer as informações do funcionário, se ele já estiver cadastrado, ou informar que "a matricula não foi informada, deseja cadastrar? " mas ele está retornando uma matricula diferente da que foi digitada. pro exemplo se digito 53 ele retorna os dados da matricula 1053. Pensei que poderia ser porque as informações não estão em ordem então garimpei aqui no fórum um código que coloca em ordem numérica, mas não está funcionando corretamente, coloquei este código na planilha e não em um módulo, errei?

Private Sub Worksheet_Change(ByVal Target As Range)

Application.ScreenUpdating = False
 Dim ultLin As Long
    
    ultLin = Worksheets("Escala").Cells(Rows.Count, "A").End(xlUp).Row
   
    Set rng = Worksheets("Escala").Range("A5:ay" & ultLin)
    
    Range("A5").Select
    ActiveWorkbook.Worksheets("Escala").Sort.SortFields.Clear

    ActiveWorkbook.Worksheets("Escala").Sort.SortFields.Add Key:=Range("A5"), SortOn _
    :=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    
    With ActiveWorkbook.Worksheets("Escala").Sort
        .SetRange rng
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
Application.ScreenUpdating = True
End Sub

Este código está colocando em ordem apenas a coluna A , quando preciso que todas as informações da linha a acompanhem inclusive as formulas.

estou colocando a planilha em anexo e desde já agradeço a ajuda

 
Postado : 04/12/2017 12:01 pm
Wagner Morel
(@wagner-morel-vidal-nobre)
Posts: 0
Illustrious Member
 

Creuza,

Boa noite!

Desculpe a minha ignorância mas... confesso que não entendi a sua explicação por completo. Não entendi o que realmente você quer. Não seria melhor ir colocando aqui no fórum uma dúvida de cada vez? Talvez assim fique mais fácil. Ao ser resolvida uma, você coloca outra. E assim por diante.

Desenvolvo pequenas soluções em VBA Excel a valores que variam entre R$ 50,00 a R$ 200,00. Se te interessar, entre no meu instagran (vba_excel_desenvolvimento)

Atenciosamente
Wagner Morel

 
Postado : 04/12/2017 4:55 pm
(@creuza)
Posts: 15
Active Member
Topic starter
 

Olá Vagner
boa noite
Vou tentar então

problema da data.
são 5 campos de datas no formulário, que quando digitadas no formato dd/mm/aaaa , são colocadas na planilha no formato mm/dd/aaaa
vi aqui no fórum algumas dicas e tentei mas nao tive sucesso, se uso o Cdate ou o Formatnumber , ele não deixa cadastrar na planilha se a textbox estiver vazia e o código vai para o depurador. se a textbox esta preenchida, e colocada na planilha trocado. e não sei como resolver.

o código da data

Private Sub BtnCadastrar_Click()
Dim plan As Worksheet
Dim codigo, linha As Integer
Dim DomFolga As Date


'seta a planilha para que nao precise se repetir ao longo do código
Set plan = Sheets("Escala")

plan.Select 'seleciona a plan
Range("A1048576").Select 'Seleciona a ultima linha da planilja
Selection.End(xlUp).Select 'SOBE ATÉ A PRIMEIRA CÉLULA COM  CONTEÚDO
ActiveCell.Offset(1, 0).Select 'Desce para a celula em branco
linha = ActiveCell.Row 'captura na variavel o valor da linha atual

    With plan
    .Cells(linha, 1) = txtMat.Value
    .Cells(linha, 16) = txtMat.Value
    .Cells(linha, 17) = txtNome
    .Cells(linha, 13) = cmbLoja
    .Cells(linha, 14) = cmbSetor
    .Cells(linha, 18) = txtEquipe
    .Cells(linha, 6) = cmbFolgadom
    .Cells(linha, 8) = cmbFolgasab
    .Cells(linha, 19) = cmbDiaFolga
    .Cells(linha, 20) = txtObserva
    .Cells(linha, 3) = txtInicioferias
    .Cells(linha, 4) = txtFimFérias
    .Cells(linha, 5) = txtDomfolga
    .Cells(linha, 9) = txtfolgasabinteira
    .Cells(linha, 10) = txtfolgameiosab
    
     End With
          
      MsgBox ("Dados Cadastrados com Sucesso!!!")
      
    Unload Me
    
    frmPesquisa.Show
End Sub

Então como resolver?

 
Postado : 04/12/2017 9:13 pm
Wagner Morel
(@wagner-morel-vidal-nobre)
Posts: 0
Illustrious Member
 

Creuza,

Bom dia!

O comando correto para inserir datas, do formulário para a planilha, é o Format com a notação no padrão americano tendo em vista que mesmo o Excel estando em português e seguindo o padrão determinado que está no Sistema Operacional (em português), o VBA segue o padrão americano.

Veja que cadastrei matrículas v28 e v29 sem problemas. Tem apenas uma coisa que não consegui identificar: As colunas C e D da sua aba Escala, mesmo usando o Format com o padrão americano no código de cadastramento, mostra as datas invertidas após o término do cadastramento. As outras datas ficaram todas OK.

Na linha 299, referente ao cadastramento da matrícula v28, eu alterei manualmente as células C299 e D299 de modo que o formato passasse a ser data normalmente e as mesmas voltaram a refletir o que eu tinha cadastrado (02/10/2017). Entretanto, veja que na linha 300, quando cadastrei a matrícula v29, usei no formulário a data 07/12/2017 e a mesma sai invertida apenas nessas duas colunas. Observe que o formato das duas células (C300 e D300) é o personalizado. Não sei porque isso está ocorrendo. Procurei em todo o seu código se tem alguma coisa fazendo essa formatação automaticamente e não localizei.

Veja aí se encontra algo. Caso, contrário, talvez seja necessário fazer um código para, depois que acabar o cadastramento de uma matrícula, ir até essas células e mudar o formato para Data ao invés de personalizado.

Desenvolvo pequenas soluções em VBA Excel a valores que variam entre R$ 50,00 a R$ 200,00. Se te interessar, entre no meu instagran (vba_excel_desenvolvimento)

Atenciosamente
Wagner Morel

 
Postado : 05/12/2017 7:46 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Troque pela rotina do modelo que o Wagner enviou pela a abaixo e faça os testes, acredito que resolva.

Private Sub BtnCadastrar_Click()
    Dim plan As Worksheet
    Dim codigo, linha As Integer
    Dim DomFolga As Date
    Dim colC As Long
    Dim colD As Long
    Dim colE As Long
    Dim colI As Long
    Dim colJ As Long
    
    Dim sRg_C As Range
    Dim sRg_D As Range
    Dim sRg_E As Range
    Dim sRg_I As Range
    Dim sRg_J As Range
   
    'seta a planilha para que nao precise se repetir ao longo do código
    Set plan = Sheets("Escala")
    
    'Capturamos as ultimas linhas das colunas
    colC = plan.Range("C" & Rows.Count).End(xlUp).Row
    colD = plan.Range("D" & Rows.Count).End(xlUp).Row
    colE = plan.Range("E" & Rows.Count).End(xlUp).Row
    colI = plan.Range("I" & Rows.Count).End(xlUp).Row
    colJ = plan.Range("J" & Rows.Count).End(xlUp).Row
    
    'Definimos os endereços
    Set sRg_C = Range("C6:" & "C" & colC)
    Set sRg_D = Range("D6:" & "D" & colD)
    Set sRg_E = Range("E6:" & "E" & colD)
    Set sRg_I = Range("I6:" & "I" & colI)
    Set sRg_J = Range("J6:" & "J" & colJ)
    
    'Formatamos as celulas como data
    sRg_C.NumberFormat = "mm/dd/yyyy"
    sRg_D.NumberFormat = "mm/dd/yyyy"
    sRg_E.NumberFormat = "mm/dd/yyyy"
    sRg_I.NumberFormat = "mm/dd/yyyy"
    sRg_J.NumberFormat = "mm/dd/yyyy"
    
    plan.Select 'seleciona a plan
    Range("A1048576").Select 'Seleciona a ultima linha da planilja
    Selection.End(xlUp).Select 'sOBE ATÉ A PRIMEIRA CÉLULA COM  CONTEÚDO
    ActiveCell.Offset(1, 0).Select 'Desce para a celula em branco
    linha = ActiveCell.Row 'captura na variavel o valor da linha atual

    With plan
        .Cells(linha, 1) = txtMat.Value
        .Cells(linha, 16) = txtMat.Value
        .Cells(linha, 17) = txtNome
        .Cells(linha, 13) = cmbLoja
        .Cells(linha, 14) = cmbSetor
        .Cells(linha, 18) = txtEquipe
        .Cells(linha, 6) = cmbFolgadom
        .Cells(linha, 8) = cmbFolgasab
        .Cells(linha, 19) = cmbDiaFolga
        .Cells(linha, 20) = txtObserva
        .Cells(linha, 3) = CDate(Format(txtInicioferias, "mm/dd/yyyy"))
        .Cells(linha, 4) = CDate(Format(txtFimFérias, "mm/dd/yyyy"))
        .Cells(linha, 5) = CDate(Format(txtDomfolga, "mm/dd/yyyy"))
        .Cells(linha, 9) = CDate(Format(txtfolgasabinteira, "mm/dd/yyyy"))
        .Cells(linha, 10) = CDate(Format(txtfolgameiosab, "mm/dd/yyyy"))
    End With
    
    MsgBox ("Dados Cadastrados com Sucesso!!!")
    
    Unload Me
    
    frmPesquisa.Show
    
End Sub

[]s

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 05/12/2017 1:38 pm