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
Melhor anexar um modelo reduzido e compactado conforme as regras do forum, e detalhar melhor o que pretende, ou o que alterar no listbox ?
Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel
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
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
Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel
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.
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
Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel
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
Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel
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.
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.
Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel