Notifications
Clear all

Problema com o dtPicker

9 Posts
2 Usuários
0 Reactions
1,334 Visualizações
(@robo8268)
Posts: 0
New Member
Topic starter
 

Olá amigos, tudo bem?

Preciso da ajuda de vocês

Eu coloquei um dtPicker no meu form, e queria que toda vez que eu alterasse a data, mudasse o valor de uma listbox, porém eu já tentei usar o evento change, porém ele dispara antes de eu atualizar o controle, e o evento AfterUpdate não dispara.

Alguém sabe como eu posso resolver isso?

Obrigado :)

 
Postado : 24/08/2015 9:17 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Melhor anexar um modelo reduzido e compactado conforme as regras do forum, e detalhar melhor o que pretende, ou o que alterar no listbox ?

 
Postado : 24/08/2015 11:54 am
(@robo8268)
Posts: 0
New Member
Topic starter
 

Mauro,

primeiramente peço desculpas por essa mania que tenho de não ler as regras do fórum.

Segue em anexo uma planilha de exemplo que eu fiz...

Resumindo, toda vez que o dtPicker for atualizado, eu quero que seja preenchido todos os valores das células de uma planilha, de acordo com a data selecionada.

Segue o código abaixo:

Private Sub DTPicker1_Change()
Dim linha As Integer
Dim coluna As Integer

linha = 1
coluna = 1

'encontrando a coluna da data correta
For i = 1 To 365
If Sheets("Plan1").Cells(1, coluna) = dtData.Value Then
Exit For
Else: coluna = coluna + 1
End If
Next i
'populando a listbox
For i = 0 To 100
If Sheets("Plan1").Cells(linha, coluna) = "" Then
Exit For
Else: lstData.AddItem Sheets("Plan1").Cells(linha, coluna)
linha = linha + 1
End If
Next i

End Sub

 
Postado : 25/08/2015 5:54 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

robo, não consegui visualizar seu arquivo devido a falta da instalação do controle em minha máquina, e como não temos autorização, solicitei ao help-desk e provavelmente demora um pouco até seguirem o cronograma deles.
Porem analisando sua rotina, no primeiro IF você tem :
If Sheets("Plan1").Cells(1, coluna) = dtData.Value Then ou seja de onde vem a Variavel "dtData" ? com certeza ela está vazia e assim finalizando no Exit For.
Eu ja tinha analisado a rotina, mas poderia ser que esta variavel estivesse vindo de alguma outra rotina, por isto solicitei o anexo.

Crie a Variavel :
Dim dtData
dtData = DTPicker1.Value

e na linha do IF altere para :
If Sheets("Plan1").Cells(1, coluna) = dtData Then

faça os testes e veja se é isto.

[]s

 
Postado : 25/08/2015 7:17 am
(@robo8268)
Posts: 0
New Member
Topic starter
 

Mauro, o dtData não é uma variável, mas sim o nome do controle dtpicker.

Neste caso, cada coluna tem uma data diferente, e o For vai procurar em todas elas até achar a coluna com o valor igual ao preenchido no dtpicker, depois que encontrar, o sistema deve preencher a listbox com os dados da data correta.

Na verdade o meu problema é o evento, a rotina está OK. Eu estou utilizando no exemplo, o evento change, então ele não espera eu alterar a data para executar, qualquer clique que eu dou no controle ele executa. Eu queria saber, como eu faço pra executar somente depois que eu alterar a data no dtpicker, eu tentei o evento AfterUpdate, porém sem sucesso.

Obrigado.

 
Postado : 25/08/2015 7:25 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Como eu disse, infelizmente não tenho como visualizar estes controles em seu modelo, só depois que me liberarem o acesso aqui.

Mas pelo o que colocou :
"dtData não é uma variável, mas sim o nome do controle dtpicker", acho que está enganado, o nome deste controle é "DTPicker1" conforme está em sua rotina, se der dois cliques no controle verá que abrira na instrução Private Sub DTPicker1_Change() e não Private Sub dtData_Change().
Sendo assim para capturar o valor do dtpicker seria : If Sheets("Plan1").Cells(1, coluna) = DTPicker1.Value Then
Não vou prolongar ja que não consigo acompanhar pelo seu modelo aqui no serviço, se não tiver outra resposta a noite em casa verifico, mas de qualquer forma de uma olhada no link abaixo.

Pass date from datepicker in userform to a cell in sheet
http://www.ozgrid.com/forum/showthread.php?t=168178

[]s

 
Postado : 25/08/2015 7:56 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Mauro no modelo disponibilizado, não há o Dtpicker, somente uma listbox., o controle solicitado MScomct2 pode ser substituído pelo MSCOMCTL.OCX que está dispo na maioria das instalações; ou mesmo nesse exemplo é apenas desabilitar a referencia, ja que não ha objeto a carregar.
Considerando que o DTpickr foi corretamente instalado/configurado; a rotina poderia ser:
Obs.: Substitua em dtData = DateValue("03/01/2015") 'NomedeSeuDTpickr.value, o valor DateValue.... pela dua DTpickr

Private Sub DTPicker1_Change()
    Dim linha As Integer, i As Variant
    Dim x As Integer
    Dim dtData As Long

dtData = DateValue("03/01/2015") 'NomedeSeuDTpickr.value
        
'encontrando a coluna da data correta
i = Application.Match(dtData, Sheets("Plan1").Range("A1:XFD1"), 0)
If Not IsError(i) Then
   For x = 2 To 100
       lstData.AddItem Format(Sheets("Plan1").Cells(x, i), "hh:mm")
   Next
Else
    MsgBox "Data não encontrada"
End If
End Sub
 
Postado : 25/08/2015 10:20 am
(@robo8268)
Posts: 0
New Member
Topic starter
 

Mauro e Reinaldo, obrigado pela atenção...

na verdade não tenho nenhum problema com a rotina, a minha dúvida é sobre o evento...

Eu tentei usar o evento change, porém ele dispara até quando eu navego pelos meses no calendário. O que eu preciso, é que esse evento dispare somente após eu atualizar a data. Tentei o evento AfterUpdate, porém ele não está disparando.

Obrigado.

 
Postado : 26/08/2015 6:13 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Como frisei, seu modelo não tem o dtpicker e sem saber como/onde é obtido e para onde e direcionado a data, então não pude simular nada, apenas propus uma rotina mais (no meu modo de ver) enxuta.

 
Postado : 26/08/2015 7:40 am