none
Variável com horas RRS feed

  • Pergunta

  • Prezados,

    Qual variável devo usar para horas? A variável que uso  ("Double") retorna corretamente as horas, porém com o formato "Data e Horas". A fórmula matricial que uso nesta coluna de horas não funciona por causa do formato de "Data e Horas" na célula. Tentei mudar o formato, mas quando o código "roda" volta o mesmo formato.

    Como resolvo esta questão?

    Muito obrigado,

    Marco.


    Marco Antonio.

    segunda-feira, 13 de novembro de 2017 13:22

Respostas

  • Option Explicit
    
    Sub CALCULARTOTALDEVENDAS()
        Dim linha As Long
        Dim HorarioInicial, HorarioFinal, HoraAtual, DataAtual, DT As Date
        linha = 5
        HorarioInicial = CDate(ThisWorkbook.Sheets("Demonstrativo").Range("E53"))
        HorarioFinal = CDate(ThisWorkbook.Sheets("Demonstrativo").Range("G53"))
        DT = CDate(ThisWorkbook.Sheets("Demonstrativo").Range("C53"))
        
        ThisWorkbook.Sheets("Demonstrativo").Range("I53").Value = 0
        While ThisWorkbook.Sheets("Relatório").Cells(linha, 5) <> ""
            DataAtual = CDate(ThisWorkbook.Sheets("Relatório").Cells(linha, 4).Value)
            
            HoraAtual = Format(ThisWorkbook.Sheets("Relatório").Cells(linha, 5).Value, "hh:mm:ss")
            If DT = DataAtual Then
                If HoraAtual >= HorarioInicial Then
                    
                    If HoraAtual <= HorarioFinal Then
                        
                        ThisWorkbook.Sheets("Demonstrativo").Range("I53").Value = CDbl(ThisWorkbook.Sheets("Demonstrativo").Range("I53").Value + ThisWorkbook.Sheets("Relatório").Range("N" & linha).Value)
                        
                    End If
                    
                End If
            End If
            linha = linha + 1
            
        Wend
        linha = 5
        
        
        DT = CDate(ThisWorkbook.Sheets("Demonstrativo").Range("C54"))
        
        HorarioInicial = CDate(ThisWorkbook.Sheets("Demonstrativo").Range("E54"))
        HorarioFinal = CDate(ThisWorkbook.Sheets("Demonstrativo").Range("G54"))
        ThisWorkbook.Sheets("Demonstrativo").Range("I54").Value = 0
        While ThisWorkbook.Sheets("Relatório").Cells(linha, 5) <> ""
            DataAtual = CDate(ThisWorkbook.Sheets("Relatório").Cells(linha, 4).Value)
            
            HoraAtual = Format(ThisWorkbook.Sheets("Relatório").Cells(linha, 5).Value, "hh:mm:ss")
            If DT = DataAtual Then
                
                If HoraAtual >= HorarioInicial Then
                    
                    If HoraAtual <= HorarioFinal Then
                        
                        ThisWorkbook.Sheets("Demonstrativo").Range("I54").Value = CDbl(ThisWorkbook.Sheets("Demonstrativo").Range("I54").Value + ThisWorkbook.Sheets("Relatório").Range("N" & linha).Value)
                        
                    End If
                    
                End If
            End If
            linha = linha + 1
            
        Wend
        
        
        
    End Sub
    


    Anderson Diniz diniabr2011@gmail.com

    • Sugerido como Resposta AndersonFDiniz2 terça-feira, 14 de novembro de 2017 17:53
    • Marcado como Resposta Marco1226 terça-feira, 14 de novembro de 2017 18:15
    terça-feira, 14 de novembro de 2017 17:52

Todas as Respostas

  • Olá,

    Fiz conforme você orientou, porém o formato da célula destino continua  retornando o formato

    "3/11/2017  11:48:48". 

    A fórmula que uso para calcular as vendas conforme o horário não funciona.

    Qual seria a solução?

    Grato.


    Marco Antonio.

    segunda-feira, 13 de novembro de 2017 13:53
  • Não entendi. Por isso estou postando o código abaixo.

    Grato.

    Sub Gravar_Vendas()

    Application.ScreenUpdating = False
    Dim Data As Date
    Dim Horario As Date
    Dim Atendente As Integer
    Dim NPedido As Double
    Dim NCodigo As Double
    Dim Descr As String
    Dim Unidade As String
    Dim quant As Double
    Dim Desc As Double
    Dim Preco As Double
    Dim Total As Double
    Dim UltimaCel As Integer

    Dim QuantDados As Integer
    Dim Linha As Integer

    QuantDados = Sheets("Vendas").Range("E32").End(xlUp).Row
    Linha = 17
    While Linha < QuantDados + 1

    Sheets("Vendas").Select
     Data = Range("K7").Value
     Horario = Range("K9").Value
     NPedido = Range("K13").Value
     Atendente = Range("F7").Value
     NCodigo = Range("E" & Linha).Value
     Descr = Range("F" & Linha).Value
     Unidade = Range("G" & Linha).Value
     quant = Range("H" & Linha).Value
     Desc = Range("I" & Linha).Value
     Preco = Range("J" & Linha).Value
     Total = Range("K" & Linha).Value
     
    Sheets("Relatório").Select

    UltimaCel = Range("D65000").End(xlUp).Row + 1

    Range("D" & UltimaCel).Value = Data
    Range("E" & UltimaCel).Value = Horario
    Range("F" & UltimaCel).Value = Atendente
     Range("G" & UltimaCel).Value = NPedido
     Range("H" & UltimaCel).Value = NCodigo
     Range("I" & UltimaCel).Value = Descr
     Range("j" & UltimaCel).Value = Unidade
     Range("K" & UltimaCel).Value = quant
     Range("L" & UltimaCel).Value = Desc
     Range("M" & UltimaCel).Value = Preco
     Range("N" & UltimaCel).Value = Total
     Linha = Linha + 1
    Wend

    Sheets("Vendas").Select

    MsgBox "Venda Gravada"

    Selection.ClearContents
    Range("Q20").Select

    Application.ScreenUpdating = True
    End Sub


    Marco Antonio.

    segunda-feira, 13 de novembro de 2017 14:31
  • Boa tarde Anderson,

    Efetuei as mudanças mas as células da coluna continham com o mesmo formato: "13/11/2017  15:34:28".

    Como a fórmula matricial preciso somente das horas para calcular não está funcionando.

    Abaixo os códigos com as alterações sugeridas por você:

     

    Sub Gravar_Vendas()

    Application.ScreenUpdating = False
    Dim Data As Date
    Dim Horario As Date
    Dim Atendente As Integer
    Dim NPedido As Double
    Dim NCodigo As Double
    Dim Descr As String
    Dim Unidade As String
    Dim quant As Double
    Dim Desc As Double
    Dim Preco As Double
    Dim Total As Double
    Dim UltimaCel As Integer

    Dim QuantDados As Integer
    Dim Linha As Integer

    QuantDados = Sheets("Vendas").Range("E32").End(xlUp).Row
    Linha = 17
    While Linha < QuantDados + 1

    Sheets("Vendas").Select
     Data = Range("K7").Value
     Horario = Range("K9").Value
     Range("K9").NumberFormat = "h:mm:ss"
     NPedido = Range("K13").Value
     Atendente = Range("F7").Value
     NCodigo = Range("E" & Linha).Value
     Descr = Range("F" & Linha).Value
     Unidade = Range("G" & Linha).Value
     quant = Range("H" & Linha).Value
     Desc = Range("I" & Linha).Value
     Preco = Range("J" & Linha).Value
     Total = Range("K" & Linha).Value

    Sheets("Relatório").Select

    UltimaCel = Range("D65000").End(xlUp).Row + 1

    Range("D" & UltimaCel).Value = Data
    Range("E" & UltimaCel).Value = Horario
    Range("E" & UltimaCel).NumberFormat = "h:mm:ss"
    Range("F" & UltimaCel).Value = Atendente
     Range("G" & UltimaCel).Value = NPedido
     Range("H" & UltimaCel).Value = NCodigo
     Range("I" & UltimaCel).Value = Descr
     Range("j" & UltimaCel).Value = Unidade
     Range("K" & UltimaCel).Value = quant
     Range("L" & UltimaCel).Value = Desc
     Range("M" & UltimaCel).Value = Preco
     Range("N" & UltimaCel).Value = Total
     Linha = Linha + 1
    Wend

    Sheets("Vendas").Select

    MsgBox "Venda Gravada"

    Selection.ClearContents
    Range("Q20").Select

    Application.ScreenUpdating = True
    End Sub

    Obrigado.

    Marco.


    Marco Antonio.

    segunda-feira, 13 de novembro de 2017 17:42
  • Bom dia,

    Enviei a planilha.

    Grato,

    Marco.


    Marco Antonio.

    terça-feira, 14 de novembro de 2017 11:21
  • Olá Anderson,

    Não entendi onde se aplica o exemplo último enviado.

    Reenviei a planilha (no seu email) se você puder encaixe para mim na própria planilha.

    Obrigado.


    Marco Antonio.

    terça-feira, 14 de novembro de 2017 15:40
  • Olá Anderson,

    Uma última pergunta: onde é para colar os códigos?

    Inserir novo módulo?

    Na planilha "Demonstrativo"?

    Na planilha "Relatório"? ou Junto com os outros códigos de "Gravar_Vendas"?

    Desde já agradeço muito.

    Marco.


    Marco Antonio.

    terça-feira, 14 de novembro de 2017 16:54
  • Já resolvi. Tudo certo. 

    Obrigado.


    Marco Antonio.

    terça-feira, 14 de novembro de 2017 17:07
  • Observei que o resultado não leva em conta a data. A fórmula matricial que usei tinha três condições: hora inicial, hora final e data.

    Se for possível peço acrescentar pois o resultado não leva em conta a data.

    Grato.


    Marco Antonio.

    terça-feira, 14 de novembro de 2017 17:23
  • Option Explicit
    
    Sub CALCULARTOTALDEVENDAS()
        Dim linha As Long
        Dim HorarioInicial, HorarioFinal, HoraAtual, DataAtual, DT As Date
        linha = 5
        HorarioInicial = CDate(ThisWorkbook.Sheets("Demonstrativo").Range("E53"))
        HorarioFinal = CDate(ThisWorkbook.Sheets("Demonstrativo").Range("G53"))
        DT = CDate(ThisWorkbook.Sheets("Demonstrativo").Range("C53"))
        
        ThisWorkbook.Sheets("Demonstrativo").Range("I53").Value = 0
        While ThisWorkbook.Sheets("Relatório").Cells(linha, 5) <> ""
            DataAtual = CDate(ThisWorkbook.Sheets("Relatório").Cells(linha, 4).Value)
            
            HoraAtual = Format(ThisWorkbook.Sheets("Relatório").Cells(linha, 5).Value, "hh:mm:ss")
            If DT = DataAtual Then
                If HoraAtual >= HorarioInicial Then
                    
                    If HoraAtual <= HorarioFinal Then
                        
                        ThisWorkbook.Sheets("Demonstrativo").Range("I53").Value = CDbl(ThisWorkbook.Sheets("Demonstrativo").Range("I53").Value + ThisWorkbook.Sheets("Relatório").Range("N" & linha).Value)
                        
                    End If
                    
                End If
            End If
            linha = linha + 1
            
        Wend
        linha = 5
        
        
        DT = CDate(ThisWorkbook.Sheets("Demonstrativo").Range("C54"))
        
        HorarioInicial = CDate(ThisWorkbook.Sheets("Demonstrativo").Range("E54"))
        HorarioFinal = CDate(ThisWorkbook.Sheets("Demonstrativo").Range("G54"))
        ThisWorkbook.Sheets("Demonstrativo").Range("I54").Value = 0
        While ThisWorkbook.Sheets("Relatório").Cells(linha, 5) <> ""
            DataAtual = CDate(ThisWorkbook.Sheets("Relatório").Cells(linha, 4).Value)
            
            HoraAtual = Format(ThisWorkbook.Sheets("Relatório").Cells(linha, 5).Value, "hh:mm:ss")
            If DT = DataAtual Then
                
                If HoraAtual >= HorarioInicial Then
                    
                    If HoraAtual <= HorarioFinal Then
                        
                        ThisWorkbook.Sheets("Demonstrativo").Range("I54").Value = CDbl(ThisWorkbook.Sheets("Demonstrativo").Range("I54").Value + ThisWorkbook.Sheets("Relatório").Range("N" & linha).Value)
                        
                    End If
                    
                End If
            End If
            linha = linha + 1
            
        Wend
        
        
        
    End Sub
    


    Anderson Diniz diniabr2011@gmail.com

    • Sugerido como Resposta AndersonFDiniz2 terça-feira, 14 de novembro de 2017 17:53
    • Marcado como Resposta Marco1226 terça-feira, 14 de novembro de 2017 18:15
    terça-feira, 14 de novembro de 2017 17:52
  • Olá Anderson,

    O código agora não apresenta nenhum resultado.

    Marco.


    Marco Antonio.

    terça-feira, 14 de novembro de 2017 18:16
  • Anderson,

    Já resolvi a questão. Retirei dos códigos a questão das horas.

    Criei outra macro retornando o horário na coluna de horas tendo com dependência a coluna de datas.

    E para calcular as vendas usei uma fórmula matricial.

    Deu certo.

    Muito obrigado pela ajuda.


    Marco Antonio.

    terça-feira, 14 de novembro de 2017 18:34