Vídeo recomendado
https://youtu.be/diWPPPhW-9E

[RESOLVIDO]Preencher Listbox com as linhas do intervalo de horas

Fórum para dúvidas sobre os fundamentos da linguagem de programação Visual Basic no contexto do VBA
Avatar do usuário
LaerteB
Colaborador
Colaborador
Mensagens: 96
Registrado em: Qui Out 19, 2017 8:20 am

[RESOLVIDO]Preencher Listbox com as linhas do intervalo de horas

Mensagem por LaerteB »

Boa tarde, Pessoal

Preciso de uma luz.. é que estou tentando fazer com que o ListBox1 seja preenchido
com as linhas que contenham as horas (da coluna "I") exemplo: das 07:00 até duas horas
depois, referente ao dia (08/02/2019) (seriam as linhas que contenham as
horas 07:00, 08:00 e 09:00)...

No exemplo que está em anexo tentei achar somente uma hora + 2 (da hora inicial
07:00), mas este está dando erro 13, Tipos incompatíveis, mas não consegui achar
realmente onde estou falhando...

Se fosse somente a variável "v" não ocorreria o erro e acharia todos as linhas que
contivessem as horas "07:00" somente, mas eu quero todas as horas no intervalo
de duas horas após das "07:00"(incluindo as 07:00)..

Obs: eu sei fazer o intervalo se fosse horas já preestabelecidas como fixas, mas o
que quero é que busque o intervalo da hora inicial até duas horas depois, pois eu
colocarei num outro momento, um temporizador que irá mudar a hora inicial
de tempos em tempos.. ok ;)

Abri em outros Fóruns a mesma questão, até agora não obtive resposta, para acompanharem
segue os Links:
http://www.planilhando.com.br/forum/vie ... 10&t=30446
https://www.hardware.com.br/comunidade/ ... s/1499915/

Agradeço desde já.

LaerteB :)
Anexos
Pesquisa_hora.zip
(15.96 KiB) Baixado 193 vezes
Editado pela última vez por LaerteB em Sex Fev 15, 2019 9:45 pm, em um total de 1 vez.


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Avatar do usuário
LaerteB
Colaborador
Colaborador
Mensagens: 96
Registrado em: Qui Out 19, 2017 8:20 am

Re: Preencher Listbox com as linhas do intervalo de horas

Mensagem por LaerteB »

Bom dia, Pessoal :)

É parece que pessoal aqui (como nos outros Fóruns) não conseguiram solucionar esta dúvida,
e está sendo "impossível" fazer uma pesquisa no intervalo de 2 horas a partir das 07:00
(preciso deste funcionando por causa do meu projeto), então resolvi colocar o intervalo
como horas fixas mesmo :( ... desta forma ele traz todas as horas dentro deste intervalo
para o ListBox..

Em relação ao temporizador (que não era a dúvida que lancei) que iria mudar a hora inicial,
vou poder fazer com esta solução mesmo, espero não ter problemas com isso :| ...

Mesmo assim se alguém conseguir resolver esta dúvida ou ter outra opção, por gentileza não
deixe de colocar ela aqui, pois sei que muitos (como eu também) poderão solucionar
problemas no seu projeto que pode ter ligação (mesmo que em partes) a este caso ;) ...

Se eu encontrar um outra opção para este problema, irei colocar aqui, pode ter certeza :D ...

Em anexo coloquei o arquivo exemplo "Pesquisa_hora_SOLUCAO" como solução acima citada,
para que todos possam usá-los para os seus respectivos projetos...

Agradeço a todos que ajudaram e aos que tentaram também :D :) ...

LaerteB :)
Anexos
Pesquisa_hora_SOLUCAO.zip
(23.52 KiB) Baixado 202 vezes


Avatar do usuário
Reinaldo
Jedi
Jedi
Mensagens: 1537
Registrado em: Sex Ago 01, 2014 4:09 pm
Localização: Garça - SP / SCS - SP

Re: Preencher Listbox com as linhas do intervalo de horas

Mensagem por Reinaldo »

O erro reportado na postagem inicial, ao que parece, e que a função "Str" retorna o valor como caractere inclusive com um espaço no inicio.
Outro alerta voce definiu uma variavel como "Val"; porem Val e uma função interna do vba, assim poderá causar erro, renomeie ou não a utilize (como no meu exemplo).
Tambem no descrito do problema diz que deseja o intervalo, em sua procura/inclusão estã somente para valor igual a hora inicial + 2, sua listibox está setada para uma coluna.
Veja se auxilia:

Código: Selecionar todos

Sub Insere_Dados_ListBox()
Dim guia As Worksheet, ran As Range
Dim linha As Integer, linhalistbox As Integer, lin As Integer
Dim v As Date, v2 As Date

Set guia = Worksheets("Planilha1")
Set ran = Worksheets("Planilha1").Range("I2")

 v = "07:00"
 v2 = Format(TimeValue(v) + 2 / 24, "hh:mm")
  
linhalistbox = 0
lin = 2

With guia
     With UserForm1.ListBox1
          Do While ran.Value <> ""
               If TimeValue(ran.Value) >= TimeValue(v) And TimeValue(ran.Value) <= TimeValue(v2) Then
                    ran.Select
                    lin = ActiveCell.Row
                   With UserForm1.ListBox1
                        .AddItem
                        .List(linhalistbox, 0) = guia.Cells(lin, 1)
                        .List(linhalistbox, 1) = guia.Cells(lin, 2)
                        .List(linhalistbox, 2) = guia.Cells(lin, 6)
                        .List(linhalistbox, 3) = guia.Cells(lin, 7)
                     End With
                    linhalistbox = linhalistbox + 1
                    lin = lin + 1
               End If
                
                Set ran = ran.Offset(1, 0)
                ran.Select
          Loop
    End With
End With
End Sub


Avatar do usuário
LaerteB
Colaborador
Colaborador
Mensagens: 96
Registrado em: Qui Out 19, 2017 8:20 am

Re: Preencher Listbox com as linhas do intervalo de horas

Mensagem por LaerteB »

Boa tarde, Reinaldo

Muito obrigado :D :) ... o seu código funcionou como eu esperava.. o erro eu percebi quando anexei o
segundo exemplo (com a solução do intervalo como horas fixas), percebi que era a função "Str", mas
mesmo assim não tinha conseguido fazer o intervalo como tu :oops: :oops: ... eu fiz de tudo menos
a sua solução ... vivendo e aprendendo :) ..

Agradeço pelo alerta da variável "Val" eu não estava ciente que era uma função interna do VBA, já estou
renomeando-as para não ter erros no futuro :P ..

Acrescentei algumas linhas no código para fazer uma verificação da data também, como mencionei no inicio,
e estou disponibilizando abaixo estes trechos para todos poderem utilizá-lo... pode ser útil :) :

Código: Selecionar todos

 
 Dim ran2 As Range
 Dim sDate As String
 
  Set ran2 = Worksheets("Planilha1").Range("F2")
 
  sDate = Date

   'este trecho do código é colocado depois do "Do While.." e antes do 1º "If.."
     If ran2.Text = sDate Then

   'este trecho abaixo é colocado depois "lin = lin + 1" e "End If" 
     ElseIf ran.Value = "" And ran2.Value = "" Then
       Exit Sub
     End If


    'este "Set.." é colocado depois do "Set ran = ..."
     Set ran2 = ran2.Offset(1, 0)

   'acrescente no fim de tudo este "Set ran2.."
     Set ran2 = Nothing
Obrigado novamente, Reinaldo e a todos :) :D ..

LaerteB :)


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Responder