MACRO ORGANIZAR RELATÓRIO NÃO ESTA FUNCIONANDO
Olá TUNUSAT boa tarde, estou usando o código de uma ajuda sua no passado, mas a data esta aparecendo como FALSO, e preciso também mais uma coluna, extraindo as informações das horas extras do dia.
Grato.
jsilva
Option Explicit
Sub OrgDados()
Dim shtOrigem As Worksheet
Dim shtDestino As Worksheet
Dim intUltRow As Integer
Dim i, x, y, z As Integer
Dim strCracha As String
Dim strNome As String
[ô]Habilitando tratamento de erros no código
On Error GoTo errTrat
[ô]Desabilitando a atualização de tela
Application.ScreenUpdating = False
[ô]Desabilitando calculos automaticos
Application.Calculation = xlCalculationManual
[ô]Carregando planilhas envolvidas nessa rotina
Set shtOrigem = ThisWorkbook.Sheets([Ô]Original[Ô])
Set shtDestino = ThisWorkbook.Sheets([Ô]Organizado[Ô])
[ô]Capturando a ultima linha preenchida (com base na coluna A)
intUltRow = shtOrigem.Range([Ô]A1048576[Ô]).End(xlUp).Row
[ô]Inicializando variavel que representa a linha da planilha Organizado
i = 4
[ô]Iniciando o lanço de repetição
For x = 10 To intUltRow [ô]Começa com 10 porque é a primeira linha com dados na planilha original
[ô]Se a celula não for igual a GRUPO TONON BIOENERGIA S.A.
If shtOrigem.Cells(x, 2).Value <> [Ô]GRUPO TONON BIOENERGIA S.A.[Ô] Then
[ô]Se a celula não for um dia da semana e tiver conteudo
If DiaDaSemana(shtOrigem.Cells(x, 2).Value) = False And VBA.Len(shtOrigem.Cells(x, 2).Value) > 0 Then
strCracha = shtOrigem.Cells(x, 1).Value
strNome = shtOrigem.Cells(x, 2).Value
y = x + 1
Do Until DiaDaSemana(shtOrigem.Cells(y, 2).Value) = False And VBA.Len(shtOrigem.Cells(y, 2).Value) > 0
y = y + 1
If y > intUltRow Then
Exit Do
End If
Loop
[ô]Pula a execução caso não tenha informação ou seja um nome seguido de outro
If x + 1 - y = 0 Then
GoTo PULO
End If
[ô]Preenche as celulas conforme solicitado
For z = x To y
If DiaDaSemana(shtOrigem.Cells(z, 2).Value) = True Then
shtDestino.Cells(i, 1).Value = strCracha
shtDestino.Cells(i, 2).Value = strNome
shtDestino.Cells(i, 3).Value = shtDestino.Cells(i, 3).Value = VBA.CDate(VBA.CStr(VBA.Day(shtOrigem.Cells(z, 1).Value)) & [Ô]/[Ô] & VBA.CStr(VBA.Month(shtOrigem.Cells(z, 1).Value)) & [Ô]/[Ô] & VBA.Year(Now))
shtDestino.Cells(i, 4).Value = shtOrigem.Cells(z, 2).Value
shtDestino.Cells(i, 5).Value = VBA.Left(shtOrigem.Cells(z, 3).Value, 5)
shtDestino.Cells(i, 6).Value = VBA.Mid(shtOrigem.Cells(z, 3).Value, 7, 5)
shtDestino.Cells(i, 7).Value = VBA.Mid(shtOrigem.Cells(z, 3).Value, 13, 5)
shtDestino.Cells(i, 8).Value = VBA.Mid(shtOrigem.Cells(z, 3).Value, 19, 5)
i = i + 1
End If
Next
[ô]Incremente a posição da variavel x
x = y - 1
PULO:
End If
End If
Next
[ô]Caso a macro encontre um erro antes desse passo vem direto pra essa linha isso evita deixar a o excel com calculo manual
errTrat:
[ô]Desabilitando a atualização de tela
Application.ScreenUpdating = True
[ô]Desabilitando calculos automaticos
Application.Calculation = xlCalculationAutomatic
[ô]Casso tenha encontrado qualquer erro avisar ao usuario;
If Err.Number > 0 Then
MsgBox [Ô]Operação abordada!!![Ô] & vbCrLf & vbCrLf & [Ô]Ocorreu um erro inesperado!!![Ô], vbOKOnly + vbCritical, [Ô]Mensagem de erro[Ô]
End If
[ô]Descarregando as planilhas carregadas nessa rotina
Set shtOrigem = Nothing
Set shtDestino = Nothing
End Sub
[ô]Essa função retorna verdadeiro se for um dia da semana ou falso caso não
Private Function DiaDaSemana(ByVal strDia As String) As Boolean
Select Case strDia
Case [Ô]Seg[Ô], [Ô]Ter[Ô], [Ô]Qua[Ô], [Ô]Qui[Ô], [Ô]Sex[Ô], [Ô]Sab[Ô], [Ô]Dom[Ô]
DiaDaSemana = True
Case Else
DiaDaSemana = False
End Select
End Function
Grato.
jsilva
JSILVA,
Usando o [Ô]Imediate[Ô]... Veja mais em:
====================================================
5 Ways to Use the VBA Immediate Window in Excel
http://www.excelcampus.com/vba/vba-immediate-window-excel/
====================================================
O campo que recebe a data está [Ô]dobrado[Ô]? ... estranho ...
O certo seria:
Resultado:
Sobre a nova coluna.
Você precisa somar as colunas de, por exemplo, J12 até J16?
Para isso precisa usar um marcador para sinalizar o inÃcio e o fim da soma. Na coluna [Ô]M[Ô] tem um número [Ô]1[Ô] e vários [Ô]0[Ô]...
[][ô]s,
Tunusat.
Não coloca assim direto para mim senão pode inibir outras pessoas...
Sugestão: Abra o post genérico (para todos) e só me avisa no e-mail interno que tem um post aberto.
Usando o [Ô]Imediate[Ô]... Veja mais em:
====================================================
5 Ways to Use the VBA Immediate Window in Excel
http://www.excelcampus.com/vba/vba-immediate-window-excel/
====================================================
O campo que recebe a data está [Ô]dobrado[Ô]? ... estranho ...
shtDestino.Cells(i, 3).Value = shtDestino.Cells(i, 3).Value = VBA.CDate(VBA.CStr(VBA.Day(shtOrigem.Cells(z, 1).Value)) & [Ô]/[Ô] & VBA.CStr(VBA.Month(shtOrigem.Cells(z, 1).Value)) & [Ô]/[Ô] & VBA.Year(Now))
O certo seria:
shtDestino.Cells(i, 3).Value = shtDestino.Cells(i, 3).Value = VBA.CDate(VBA.CStr(VBA.Day(shtOrigem.Cells(z, 1).Value)) & [Ô]/[Ô] & VBA.CStr(VBA.Month(shtOrigem.Cells(z, 1).Value)) & [Ô]/[Ô] & VBA.Year(Now))
Resultado:
? shtDestino.Cells(i, 3).Value
01/07/2015
Sobre a nova coluna.
Você precisa somar as colunas de, por exemplo, J12 até J16?
Para isso precisa usar um marcador para sinalizar o inÃcio e o fim da soma. Na coluna [Ô]M[Ô] tem um número [Ô]1[Ô] e vários [Ô]0[Ô]...
[][ô]s,
Tunusat.
Não coloca assim direto para mim senão pode inibir outras pessoas...
Sugestão: Abra o post genérico (para todos) e só me avisa no e-mail interno que tem um post aberto.
Faça seu login para responder