Este fórum está sendo desativado

Depois de 9 anos, este fórum será desativado. Mas calma.... estamos migrando para uma comunidade no DISCORD. Junte-se a nós.

ENTRAR PARA DISCORD

Tópicos relacionados a códigos VBA, gravação de macros, etc.
  • Avatar do usuário
Avatar do usuário
Por JCabral
Avatar
#53664
Descobri o seguinte código na net para localizar uma determinada data num determinado range:
Código: Selecionar todos
Sub FindAll()

    Dim FirstFound As String, FirstAddress As String
    Dim StartRng As Range, Rng As Range
    Dim StartDate As Date
    
    
    '
    '   DATA A PROCURAR
    '
    StartDate = DateSerial(Year(Date), Month(Date), 1)
    
    Set StartRng = PLANEAMENTO.Range("P10:BW11").Find(What:=DateValue(StartDate), LookAt:=xlWhole, LookIn:=xlFormulas)

    If Not StartRng Is Nothing Then
        FirstFound = StartRng.Address
    Else
        GoTo NothingFound
    End If

    Set Rng = StartRng
    Do Until StartRng Is Nothing
        Set StartRng = PLANEAMENTO.Range("P10:BW11").FindNext(After:=StartRng)

        Set Rng = Union(Rng, StartRng)
        If StartRng.Address = FirstFound Then Exit Do
    Loop

    MsgBox Rng.Address ' Rng.Column

    Exit Sub
NothingFound:
    MsgBox "No values were found in this worksheet"

End Sub
Tendo em atenção que o formato nativo do meu excel é "dd/mm/yyyy", ou seja sistema europeu o que está errado no código para não detetar onde está a data a procurar?
As datas no range são calculadas e não introduzidas manualmente, se eu introduzir manualmente a data ela já descobre onde está a data.

O que pretendo é encontrar determinada data,neste caso 01/04/2020, pelo método Find.

Obrigado pela ajuda
Jorge Cabral
Você não está autorizado a ver ou baixar esse anexo.
#53665
Olá, Jorge.

Encontrei dois problemas:
1. para procurar em resultados de fórmulas, em lugar de LookIn:=xlFormulas utilize LookIn:=xlValues
2. aparentemente tanto o método Find como o Localizar/Substituir (Ctrl+L) só funcionam se o conteúdo numérico "couber" na célula e assim puder ser exibido (se não couber mostrará #####, ou seja, têm relação com a largura da coluna e com o tamanho da fonte (suposição pessoal); no caso da sua planilha, nem o Find e nem o Localizar funcionam pois a data só está sendo mostrada na célula porque a célula está formatada para Alinhamento/Orientação Vertical, e eu acredito que o Find e também o Localizar/Substituir fazem a leitura do conteúdo sem considerar a Orientação Vertical e nessa situação a célula "mostraria" #### ao invés de mostrar a data e por isso ambos não funcionam como esperado.

obs. aproveite para acertar o intervalo de P10:BW11 para P10:BW10

Sugestão: após a correção que comentei no item 1 acima, manualmente vá aumentando gradativamente a largura da coluna BC e rode o código (e acione também o Localizar/Substituir) a cada mudança que fizer. Veja se descobre algo diferente.
Avatar do usuário
Por JCabral
Avatar
#53671
Olá, Caro Osvaldo

Se essa explicação não viesse de ti confesso que não ia acreditar mas de facto:

1) a que questão de substituir xlFormulas por xlValues é perfeitamente pacifica e compreensível;
2) a questão de não ser possível o Find por que o formato da célula está com orientação vertical já não consigo compreender, mas de facto é mesmo assim, e ;
3) sendo que isto é contornável, basta formatar a célula para Controlo de Texto ~~> Ajustar Texto; Ajusta texto ao tamanho da célula!!!
4) o problema é que o range onde se faz o Find tem que estar visível... :oops: .... SERÁ MESMO???
5) a única maneira que achei de contornar isso foi colocar a Altura da Linha = 1....

É a única maneira de resolver o problema com o método FIND?

Será melhor usar o método Match? Como seria o código?

Obrigado
Jorge Cabral
#53672
JCabral escreveu:Será melhor usar o método Match? Como seria o código?
Código: Selecionar todos
Sub LocalizaData()
 Dim StartDate As Date, k As Long
  StartDate = DateSerial(Year(Date), Month(Date), 1)
  k = Evaluate("MATCH(" & CLng(StartDate) & ",P10:BW10,0)")
  MsgBox Cells(10, k + 15).Address
End Sub
ou
Código: Selecionar todos
Sub LocalizaDataV2()
 MsgBox Cells(10, Evaluate("MATCH(" & CLng(DateSerial(Year(Date), Month(Date), 1)) & ",P10:BW10,0)") + 15).Address
End Sub
long long title how many chars? lets see 123 ok more? yes 60

We have created lots of YouTube videos just so you can achieve [...]

Another post test yes yes yes or no, maybe ni? :-/

The best flat phpBB theme around. Period. Fine craftmanship and [...]

Do you need a super MOD? Well here it is. chew on this

All you need is right here. Content tag, SEO, listing, Pizza and spaghetti [...]

Lasagna on me this time ok? I got plenty of cash

this should be fantastic. but what about links,images, bbcodes etc etc? [...]

Estamos migrando para uma comunidade no Discord