none
Erro na função localizar RRS feed

  • Pergunta

  • ola,  eu ando a trabalhar numa macro que preciso, e o codigo consistem em: 

    1. localizar uma data numa tabela dinamica ( que so contêm algumas datas) 

    2. Se encontrar tem de copiar uma informação que a data tem a frente e colar noutra folha 

    3. Se nao encontrar preenche na outra folha com zeros. 

    O problema é: quando ele localiza a data (por exemplo), 01-01-2013, se esta existir corre tudo bem, se não, ele encontra a 01-11-2013. Isto acontece para todas as datas de janeiro e fevereiro com os meses novembro e dezembro, respectivamente. 

    Estou completamente baralhada, nao sei o que hei-de fazer, alguém me pode dizer porque é que isto acontece sff? 


    sexta-feira, 1 de agosto de 2014 21:20

Respostas

  • Bom dia Marta,

    Creio que isso possa ser causado pela configuração de data de cada sistema.

    Modifiquei seu código, no lugar de usar o método Find do próprio excel, alterei para uma função chamada Buscar.

    Teste o código abaixo e veja se funciona.

    Abraço.

    Obs. No arquivo do link, tive que inserir manual as abas que estavam faltando (Folha1,Folha2,Folha3 e comentar o primeiro trecho do código, já havia sido processado)

    Sub Datas_previsões()
    
    
    
        Cells.Find(What:="Data", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
            :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
            False, SearchFormat:=False).Activate
        ActiveCell.Offset(1, 0).Range("A1").Select
        Range(Selection, Selection.End(xlDown)).Select
        Selection.TextToColumns Destination:=ActiveCell.Offset(0, 11).Range("A1"), _
            DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter _
            :=False, Tab:=True, Semicolon:=False, Comma:=False, Space:=False, _
            Other:=True, OtherChar:="-", FieldInfo:=Array(Array(1, 1), Array(2, 1), Array _
            (3, 1)), TrailingMinusNumbers:=True
        ActiveCell.Select
        ActiveCell.FormulaR1C1 = "=DATE(RC[13],RC[12],RC[11])"
        ActiveCell.Select
        Selection.AutoFill Destination:=ActiveCell.Range("A1:A1500")
        ActiveCell.Range("A1:A1500").Select
        ActiveWindow.SmallScroll Down:=-6
    Range("A5").Select
     
    
    'Datas_previsões Macro
    '
    
        Sheets("Folha2").Select
        ActiveCell.FormulaR1C1 = "Data"
        Range("A2").Select
        ActiveCell.FormulaR1C1 = "1/1/2013"
        Range("A2").Select
        Selection.AutoFill Destination:=Range("A2:A517"), Type:=xlFillDefault
        Range("A2:A517").Select
        Range("A1").Select
        Columns("A:A").EntireColumn.AutoFit
        
        'Seleciona dados
        Range("A4").Select
        Range(Selection, Selection.End(xlToRight)).Select
        Range(Selection, Selection.End(xlDown)).Select
        Application.CutCopyMode = False
        Sheets.Add
        ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
            "Folha1!R4C1:R1500C7", Version:=xlPivotTableVersion14).CreatePivotTable _
            TableDestination:="Folha4!R3C1", TableName:="Tabela dinâmica1", _
            DefaultVersion:=xlPivotTableVersion14
        Sheets("Folha4").Select
        Cells(3, 1).Select
        With ActiveSheet.PivotTables("Tabela dinâmica1").PivotFields("Data")
            .Orientation = xlRowField
            .Position = 1
        End With
        ActiveSheet.PivotTables("Tabela dinâmica1").AddDataField ActiveSheet. _
            PivotTables("Tabela dinâmica1").PivotFields("Entrada"), "Soma de Entrada", _
            xlSum
        ActiveSheet.PivotTables("Tabela dinâmica1").AddDataField ActiveSheet. _
            PivotTables("Tabela dinâmica1").PivotFields("Saída"), "Soma de Saída", xlSum
             
             
            
        
            Sheets("Folha2").Select
        'Dim y(1 To 365) As Date
     'define a variavel y
    Dim i As Variant
     Dim y As Variant
    Dim x As Long
    x = WorksheetFunction.CountIf(Range("A:A"), "<>" & Empty)
    ReDim y(1 To x)
    For i = 2 To x
    y(i) = Range("A" & i).Value
    
    
    
    Sheets("Folha4").Select
    
        LocalizarData = buscar("a1:a2000", y(i))
    
        'Set LocalizarData = Sheets("Folha4").Columns.Find(y(i), LookAt:=xlPart, LookIn:=xlValues, SearchFormat:=True)
    
     
        'Se não encontrar a data volta para a folha e preenche com Zeros
        If LocalizarData = Empty Then
        
           Sheets("Folha2").Select
                Data = buscar("a1:a2000", y(i))
                'Set Data = Sheets("Folha2").Columns.Find(y(i), LookAt:=xlPart, LookIn:=xlValues, SearchFormat:=True)
                
                
                If Data = Empty Then
                
                
                Else: Range(Data).Select
                ActiveCell.Offset(0, 1).Range("A1").Select
                Application.CutCopyMode = False
                ActiveCell.FormulaR1C1 = "0"
                ActiveCell.Offset(0, 1).Range("A1").Select
                ActiveCell.FormulaR1C1 = "0"
                ActiveCell.Offset(1, 0).Range("A1").Select
                
                End If
        
        Else: Range(LocalizarData).Select
        
        'MsgBox (y(i))
        
        ActiveCell.Offset(0, 1).Range("A1:B1").Select
        Application.CutCopyMode = False
        Selection.Copy
        Sheets("Folha2").Select
        
        
                LocalizarData2 = buscar("a1:a2000", y(i))
       
                'Set LocalizarData2 = Sheets("Folha2").Columns.Find(y(i), LookAt:=xlPart, LookIn:=xlValues, SearchFormat:=True)
                
                If LocalizarData2 = Empty Then
                
                
                Else: Range(LocalizarData2).Select
                ActiveCell.Offset(0, 1).Range("A1").Select
                ActiveSheet.Paste
                Application.CutCopyMode = False
                
                End If
        End If
        
        Sheets("Folha4").Select
        Range("A1").Select
         Sheets("Folha2").Select
        Next i
        End Sub
    
    Function buscar(intervalo, busca)
        For Each c In Range(intervalo)
            If busca = c Then
                    buscar = c.Address
                Exit For
            End If
        Next
    End Function
    
    
    
    


    sábado, 2 de agosto de 2014 13:26

Todas as Respostas

  • Boa Noite,

    Antes das suas 2 comparações de data, tenta colocar o comando de conversão (cdate("sua data")) e veja se o problema persiste.

    abraço.

    sexta-feira, 1 de agosto de 2014 21:33
  • ola Jhonatan Franklin , já experimentei, e não resolveu o problema.. :S 

    não sei nada qual  é o problema.. Está tudo definido como data, e é so durante aqueles meses.. :S parece que e por causa do primeiro numero do mês.. 

    sexta-feira, 1 de agosto de 2014 21:52
  • Se possível. poste a planilha ou um trecho do código para que possa analisar.

    sexta-feira, 1 de agosto de 2014 22:16
  •  neste link da para aceder ao ficheiro de excel, https://www.dropbox.com/s/yzmcml61qfc6mq2/5148317.xlsm

    e neste aqui o codigo https://www.dropbox.com/s/d99seoa1dnzyljc/datas.bas

    sexta-feira, 1 de agosto de 2014 22:40
  • Não sei se é a melhor solução para o resto do seu código, mas testando aqui, percebi que passando o valor da data como string (CStr(y(i)), ele efetua a busca normalmente, não ocorrendo o tal fato de buscar "01/01/2013" e retornar "01/11/2013".
    sexta-feira, 1 de agosto de 2014 23:29
  • Se eu colocar o CStr(y(i)) o codigo nao decorre normalmente, até porque ele não encontra nada.. :S mas obrigada pela ajuda na mesma.. 

    sábado, 2 de agosto de 2014 12:20
  • Bom dia Marta,

    Creio que isso possa ser causado pela configuração de data de cada sistema.

    Modifiquei seu código, no lugar de usar o método Find do próprio excel, alterei para uma função chamada Buscar.

    Teste o código abaixo e veja se funciona.

    Abraço.

    Obs. No arquivo do link, tive que inserir manual as abas que estavam faltando (Folha1,Folha2,Folha3 e comentar o primeiro trecho do código, já havia sido processado)

    Sub Datas_previsões()
    
    
    
        Cells.Find(What:="Data", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
            :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
            False, SearchFormat:=False).Activate
        ActiveCell.Offset(1, 0).Range("A1").Select
        Range(Selection, Selection.End(xlDown)).Select
        Selection.TextToColumns Destination:=ActiveCell.Offset(0, 11).Range("A1"), _
            DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter _
            :=False, Tab:=True, Semicolon:=False, Comma:=False, Space:=False, _
            Other:=True, OtherChar:="-", FieldInfo:=Array(Array(1, 1), Array(2, 1), Array _
            (3, 1)), TrailingMinusNumbers:=True
        ActiveCell.Select
        ActiveCell.FormulaR1C1 = "=DATE(RC[13],RC[12],RC[11])"
        ActiveCell.Select
        Selection.AutoFill Destination:=ActiveCell.Range("A1:A1500")
        ActiveCell.Range("A1:A1500").Select
        ActiveWindow.SmallScroll Down:=-6
    Range("A5").Select
     
    
    'Datas_previsões Macro
    '
    
        Sheets("Folha2").Select
        ActiveCell.FormulaR1C1 = "Data"
        Range("A2").Select
        ActiveCell.FormulaR1C1 = "1/1/2013"
        Range("A2").Select
        Selection.AutoFill Destination:=Range("A2:A517"), Type:=xlFillDefault
        Range("A2:A517").Select
        Range("A1").Select
        Columns("A:A").EntireColumn.AutoFit
        
        'Seleciona dados
        Range("A4").Select
        Range(Selection, Selection.End(xlToRight)).Select
        Range(Selection, Selection.End(xlDown)).Select
        Application.CutCopyMode = False
        Sheets.Add
        ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
            "Folha1!R4C1:R1500C7", Version:=xlPivotTableVersion14).CreatePivotTable _
            TableDestination:="Folha4!R3C1", TableName:="Tabela dinâmica1", _
            DefaultVersion:=xlPivotTableVersion14
        Sheets("Folha4").Select
        Cells(3, 1).Select
        With ActiveSheet.PivotTables("Tabela dinâmica1").PivotFields("Data")
            .Orientation = xlRowField
            .Position = 1
        End With
        ActiveSheet.PivotTables("Tabela dinâmica1").AddDataField ActiveSheet. _
            PivotTables("Tabela dinâmica1").PivotFields("Entrada"), "Soma de Entrada", _
            xlSum
        ActiveSheet.PivotTables("Tabela dinâmica1").AddDataField ActiveSheet. _
            PivotTables("Tabela dinâmica1").PivotFields("Saída"), "Soma de Saída", xlSum
             
             
            
        
            Sheets("Folha2").Select
        'Dim y(1 To 365) As Date
     'define a variavel y
    Dim i As Variant
     Dim y As Variant
    Dim x As Long
    x = WorksheetFunction.CountIf(Range("A:A"), "<>" & Empty)
    ReDim y(1 To x)
    For i = 2 To x
    y(i) = Range("A" & i).Value
    
    
    
    Sheets("Folha4").Select
    
        LocalizarData = buscar("a1:a2000", y(i))
    
        'Set LocalizarData = Sheets("Folha4").Columns.Find(y(i), LookAt:=xlPart, LookIn:=xlValues, SearchFormat:=True)
    
     
        'Se não encontrar a data volta para a folha e preenche com Zeros
        If LocalizarData = Empty Then
        
           Sheets("Folha2").Select
                Data = buscar("a1:a2000", y(i))
                'Set Data = Sheets("Folha2").Columns.Find(y(i), LookAt:=xlPart, LookIn:=xlValues, SearchFormat:=True)
                
                
                If Data = Empty Then
                
                
                Else: Range(Data).Select
                ActiveCell.Offset(0, 1).Range("A1").Select
                Application.CutCopyMode = False
                ActiveCell.FormulaR1C1 = "0"
                ActiveCell.Offset(0, 1).Range("A1").Select
                ActiveCell.FormulaR1C1 = "0"
                ActiveCell.Offset(1, 0).Range("A1").Select
                
                End If
        
        Else: Range(LocalizarData).Select
        
        'MsgBox (y(i))
        
        ActiveCell.Offset(0, 1).Range("A1:B1").Select
        Application.CutCopyMode = False
        Selection.Copy
        Sheets("Folha2").Select
        
        
                LocalizarData2 = buscar("a1:a2000", y(i))
       
                'Set LocalizarData2 = Sheets("Folha2").Columns.Find(y(i), LookAt:=xlPart, LookIn:=xlValues, SearchFormat:=True)
                
                If LocalizarData2 = Empty Then
                
                
                Else: Range(LocalizarData2).Select
                ActiveCell.Offset(0, 1).Range("A1").Select
                ActiveSheet.Paste
                Application.CutCopyMode = False
                
                End If
        End If
        
        Sheets("Folha4").Select
        Range("A1").Select
         Sheets("Folha2").Select
        Next i
        End Sub
    
    Function buscar(intervalo, busca)
        For Each c In Range(intervalo)
            If busca = c Then
                    buscar = c.Address
                Exit For
            End If
        Next
    End Function
    
    
    
    


    sábado, 2 de agosto de 2014 13:26
  • já consegui.. muito obrigado, a sério.. :) 

    sábado, 2 de agosto de 2014 14:20