Notifications
Clear all

Problema Com Loop

23 Posts
2 Usuários
0 Reactions
5,223 Visualizações
(@arthurdiegoo)
Posts: 99
Estimable Member
Topic starter
 

Olá mais uma vez, lá vem o chato do arthur.

O seguinte, possuo um formulário onde o roteiro dos clientes será preenchido baseado no número de noites que durará a viagem... Até agora tenho neste formulário:

Private Sub CommandButton1_Click()
Dim DataINICIAL As Date
Dim Datafinal As Date
Dim Somatório As Integer
DataINICIAL = recebeIN.Text
Datafinal = recebeOUT.Text
Somatório = 1
If DataINICIAL + Somatório <= Datafinal Then
txtData1.Caption = DataINICIAL + Somatório
Else
txtData1.Visible = False
txtRoteiro1.Visible = False
End If
If DataINICIAL + Somatório * 2 <= Datafinal Then
txtData2.Caption = DataINICIAL + Somatório * 2
Else
txtData2.Visible = False
txtRoteiro2.Visible = False
End If
If DataINICIAL + Somatório * 3 <= Datafinal Then
txtData3.Caption = DataINICIAL + Somatório * 3
Else
txtData3.Visible = False
txtRoteiro3.Visible = False
End If
If DataINICIAL + Somatório * 4 <= Datafinal Then
txtData4.Caption = DataINICIAL + Somatório * 4
Else
txtData4.Visible = False
txtRoteiro4.Visible = False
End If
If DataINICIAL + Somatório * 5 <= Datafinal Then
txtData5.Caption = DataINICIAL + Somatório * 5
Else
txtData5.Visible = False
txtRoteiro5.Visible = False
End If
If DataINICIAL + Somatório * 6 <= Datafinal Then
txtData6.Caption = DataINICIAL + Somatório * 6
Else
txtData6.Visible = False
txtRoteiro6.Visible = False
End If
If DataINICIAL + Somatório * 7 <= Datafinal Then
txtData7.Caption = DataINICIAL + Somatório * 7
Else
txtData7.Visible = False
txtRoteiro7.Visible = False
End If
If DataINICIAL + Somatório * 8 <= Datafinal Then
txtData8.Caption = DataINICIAL + Somatório * 8
Else
txtData8.Visible = False
txtRoteiro8.Visible = False
End If
If DataINICIAL + Somatório * 6 <= Datafinal Then
txtData9.Caption = DataINICIAL + Somatório * 9
Else
txtData9.Visible = False
txtRoteiro9.Visible = False
End If
If DataINICIAL + Somatório * 6 <= Datafinal Then
txtData10.Caption = DataINICIAL + Somatório * 10
Else
txtData10.Visible = False
txtRoteiro10.Visible = False
End If
If DataINICIAL + Somatório * 6 <= Datafinal Then
txtData11.Caption = DataINICIAL + Somatório * 11
Else
txtData11.Visible = False
txtRoteiro11.Visible = False
End If
If DataINICIAL + Somatório * 6 <= Datafinal Then
txtData12.Caption = DataINICIAL + Somatório * 12
Else
txtData12.Visible = False
txtRoteiro12.Visible = False
End If
If DataINICIAL + Somatório * 6 <= Datafinal Then
txtData13.Caption = DataINICIAL + Somatório * 13
Else
txtData13.Visible = False
txtRoteiro13.Visible = False
End If
If DataINICIAL + Somatório * 6 <= Datafinal Then
txtData14.Caption = DataINICIAL + Somatório * 14
Else
txtData14.Visible = False
txtRoteiro14.Visible = False
End If
If DataINICIAL + Somatório * 6 <= Datafinal Then
txtData15.Caption = DataINICIAL + Somatório * 15
Else
txtData15.Visible = False
txtRoteiro15.Visible = False
End If
If DataINICIAL + Somatório * 6 <= Datafinal Then
txtData16.Caption = DataINICIAL + Somatório * 16
Else
txtData16.Visible = False
txtRoteiro16.Visible = False
End If
If DataINICIAL + Somatório * 6 <= Datafinal Then
txtData17.Caption = DataINICIAL + Somatório * 17
Else
txtData17.Visible = False
txtRoteiro17.Visible = False
End If
If DataINICIAL + Somatório * 6 <= Datafinal Then
txtData18.Caption = DataINICIAL + Somatório * 18
Else
txtData18.Visible = False
txtRoteiro18.Visible = False
End If
If DataINICIAL + Somatório * 6 <= Datafinal Then
txtData19.Caption = DataINICIAL + Somatório * 19
Else
txtData19.Visible = False
txtRoteiro19.Visible = False
End If
If DataINICIAL + Somatório * 6 <= Datafinal Then
txtData20.Caption = DataINICIAL + Somatório * 20
Else
txtData20.Visible = False
txtRoteiro20.Visible = False
End If
If DataINICIAL + Somatório * 6 <= Datafinal Then
txtData21.Caption = DataINICIAL + Somatório * 21
Else
txtData21.Visible = False
txtRoteiro21.Visible = False
End If
If DataINICIAL + Somatório * 6 <= Datafinal Then
txtData22.Caption = DataINICIAL + Somatório * 22
Else
txtData22.Visible = False
txtRoteiro22.Visible = False
End If
If DataINICIAL + Somatório * 6 <= Datafinal Then
txtData23.Caption = DataINICIAL + Somatório * 23
Else
txtData23.Visible = False
txtRoteiro23.Visible = False
End If
If DataINICIAL + Somatório * 6 <= Datafinal Then
txtData24.Caption = DataINICIAL + Somatório * 24
Else
txtData24.Visible = False
txtRoteiro24.Visible = False
End If
If DataINICIAL + Somatório * 6 <= Datafinal Then
txtData25.Caption = DataINICIAL + Somatório * 25
Else
txtData25.Visible = False
txtRoteiro25.Visible = False
End If

txtRoteiro1.SetFocus
End Sub

Private Sub Label18_Click()

End Sub

Private Sub Label31_Click()

End Sub

Private Sub TextBox22_Change()

End Sub

Private Sub CommandButton2_Click()
If frmOrçamentoFinalizado.OptionButton10.Value = True Then
 If frmOrçamentoFinalizado.CheckBox1.Value = False Then
 txtRoteiro1.Text = "Início de Nossos Serviços - Apresentação no aeroporto para embarque saindo de " + frmOrçamentoFinalizado.ComboBox2.Value + " com destino a " + frmOrçamentoFinalizado.ComboBox4.Value + " voando " + frmOrçamentoFinalizado.ComboBox1.Value + " - Início da Hospedagem no Hotel " + frmOrçamentoFinalizado.TextBox1.Value + " em acomodação " + frmOrçamentoFinalizado.TextBox2.Value
 Else
 txtRoteiro1.Text = "Início de Nossos Serviços - Apresentação no aeroporto para embarque saindo de " + frmOrçamentoFinalizado.ComboBox2.Value + " com destino a " + frmOrçamentoFinalizado.ComboBox4.Value + " voando " + frmOrçamentoFinalizado.ComboBox1.Value + " - Transfer Aeroporto-Hotel no horário da chegada " + " - Início da Hospedagem no Hotel " + frmOrçamentoFinalizado.TextBox1.Value + " em acomodação " + frmOrçamentoFinalizado.TextBox2.Value
 End If
End If

Dim DNA As String
Dim DNB As String
Dim DNN As Integer
Dim DNM As Variant
Dim DNX As Variant
Dim DatAFINISH As String
Datafinal = recebeOUT.Text

DNA = "txtData"
DNB = "txtRoteiro"
DNN = 1
DNM = DNA & DNN
DNX = DNB & DNN

Do

If Me.Controls(DNM).Caption = DatAFINISH Then
DNX.Text = "Parabéns"
Else
DNN = DNN + 1
End If

Loop

End Sub

Private Sub UserForm_Click()

End Sub

Esta primeira série de comandos serve justamente para já colocar a data nos devidos campos e deixá-los visíveis ou não, para facilitar preenchimento.

Meu problema chega nesta parte:

Dim DNA As String
Dim DNB As String
Dim DNN As Integer
Dim DNM As Variant
Dim DNX As Variant
Dim DatAFINISH As String
Datafinal = recebeOUT.Text

DNA = "txtData"
DNB = "txtRoteiro"
DNN = 1
DNM = DNA & DNN
DNX = DNB & DNN

Do

If Me.Controls(DNM).Caption = DatAFINISH Then
DNX.Text = "Parabéns"
Else
DNN = DNN + 1
End If

Loop

End Sub

Minha idéia é a seguinte, preciso que automaticamente o ÚLTIMO campo visível seja preenchido com dados que serao colocados no lugar de "Parabéns". Estou tentando usar este loop justamente porque eu nomeei as labels onde as datas se localizam como txtData(número), e a texbox de txtRoteiro(número), ou seja, na mesma linha, mesmo número.

Queria que esse loop efetuasse o teste para saber qual é a label cujo caption é igual a data final.

Alguma idéia amigos?

 
Postado : 22/03/2012 2:17 pm
(@arthurdiegoo)
Posts: 99
Estimable Member
Topic starter
 

Claro mestre Mauro, eu mesmo sou um exemplo de membro ( olha que sou só membro a pouco tempo do fórum ) que se tivesse mais conhecimento e mais tempo, ajudaria mais do que perguntaria, mas já não estou somente do lado que "recebe", hoje mesmo pesquisei fui atrás de um assunto e no momento que entendi melhor disponibilizei um modelo para o pessoal. É óbvio que meu modelo está longe de ser perfeito, mas foi oque eu consegui contribuir, e na hora que consegui contribuir.

Realmente não queria ter passado a impressão errada ( mesmo que, creio eu, tenha sido por erro alheio aqui na agência ), e se alguém constrangeu fui eu. Mil perdões...

Esse assunto do loop nem está tão drástico, estou sim tentando resolver, mais no momento, por exemplo, estou customizando as ribbons do sistema, e assim que algum colega tiver alguma idéia para ajudar, vou tentar implementar no projeto.

Peço desculpas novamente, ainda mais a você que já resolveu diversas dúvidas minhas aqui no fórum ( direta e indiretamente ), o ocorrido jamais ocorrerá novamente ( espero eu )

 
Postado : 27/03/2012 8:11 pm
(@arthurdiegoo)
Posts: 99
Estimable Member
Topic starter
 

Entendi sua dúvida grande Mauro, e com razão... relendo meus relatos, apesar de ter me esforçado, para quem não estava imerso no problema seria difícil mesmo o compreendimento...

Estou enviando por anexo uma planilha em branco, onde simplesmente importei meu formulário como ele está.

Espero que ajude e mais uma vez, obrigado pela atenção!

 
Postado : 27/03/2012 8:18 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Arthur, dei uma olhada no seu exemplo, acho que consegui pelo menos captar uma parte da ideia, depois vou olhar com mais calma e ver o que da para ajustar da maneira que entendi e vamos liquidando por partes.

Pelo que vi, eu acredito que o ideal seria você utilizar a criação dos controles em Tempo de Execução, de uma olhada no exemplo dos tópicos abaixo :

Adicionando Controle a Formulário Em Tempo de Execução
viewtopic.php?f=21&t=1931

inserir controle em tempo de execução
Neste tem um modelo do Caio que é bem interessante, vale a pena analisar.
viewtopic.php?f=10&t=2858&start=40

Assim que eu tiver novidades eu avviso.

[]s

 
Postado : 28/03/2012 8:42 pm
(@arthurdiegoo)
Posts: 99
Estimable Member
Topic starter
 

Grande Mauro, muito obrigado pelo feedback cara.

Vou tentar criar um formulário adaptando esse modelo ( realmente não sabia que dava pra fazer algo assim )

Veja se minha idéia ao menos está correta:

Vou tentar criar um formulário em tempo de execução, mas antes de fixar a quantidade de itens criada, vou fazer neste mesmo formulario serem criadas as textboxes referentes a datainicial e a datafinal

através da diferença dessas datas, serem criados os itens.

Depois vou fazer ao clicar nos checkboxes, no caso do primeiro, retornará aquele valor que eu havia mostrado no exemplo ( se a textbox ao lado estiver vazia )
e no último, a mesma coisa...

vou tentar quebrar a cabeça aqui um pouco e volto falando se deu certo ou nao...

 
Postado : 29/03/2012 10:00 am
(@arthurdiegoo)
Posts: 99
Estimable Member
Topic starter
 

Mestre Mauro, perfeito!

Estou conseguindo fazer bem o formulário, até melhor do jeito que eu estava fazendo, pois defini uma variável:

Dim Diferencial As Integer
Diferencial = Datediff ("d",Datainicial,Datafinal)

e modifiquei nos For X=0 to Diferencial + 1

Dessa maneira cria somente os campos referentes ao roteiro específico, e também defini a Height do Formulário variável:

'----------------------------USERFORM------------------------------------------'
'Cria o UserForm
With TempForm
.Properties("Caption") = "Preencha o Roteiro"
.Properties("Width") = 950
.Properties("Height") = 74 + (14 * (Diferencial + 1))
End With

Dessa forma ele cresce de acordo com os campos utilizados pro roteiro!

Deixei os códigos aqui para quem precisar de algo parecido poder consultar!

Outra coisa interessante, que responde minha dúvida inicial é a seguinte:

Para identificar qual é o último campo, usei o código:

Este insertlines serve para escrever no código fonte:

.insertlines Line + 17, "lblResultado" & Diferencial + 1 & ".caption=""Parabéns"""

No caso desse código usei ele dentro de:

'Botão que preenche automaticamente o formulário
With TempForm.codemodule
Line = .countoflines
.insertlines Line + 1, "Sub optAuto_Click()"
.insertlines Line + 17, "lblResultado" & Diferencial + 1 & ".caption=""Parabéns"""
.insertlines Line + 18, "End Sub"
End With

Não pus as outras linhas para evitar confusão ( pois fazem outros comandos )

Muito obrigado Mauro, espero que as pessoas também possam partilhar do conhecimento adquirido!

 
Postado : 30/03/2012 7:38 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Parabens Arthur, eu ainda não consegui mexer em seu exemplo, ia até tentar criar um com "Tempo de Execução", mas você já está adiantado.

Qualquer duvida, estando ao nosso alcance, retorne.

[]s

 
Postado : 30/03/2012 1:44 pm
(@arthurdiegoo)
Posts: 99
Estimable Member
Topic starter
 

Sim Sim Mauro, muitíssimo obrigado pelo suporte, foi essencial.

Até agora tudo está dentro dos conformes, estou quase terminando ( processo final mesmo )

Se você achar legal eu posso postar só o modelo para alguém que queira o mesmo exemplo. Mas já adianto que meus códigos são precários, e um quanto tanto repetitivos, mas tento fazer assim para diminuir a margem de erro!

Mais uma vez obrigado pelo suporte!

 
Postado : 30/03/2012 1:50 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Sim Sim Mauro, muitíssimo obrigado pelo suporte, foi essencial.

Até agora tudo está dentro dos conformes, estou quase terminando ( processo final mesmo )

Se você achar legal eu posso postar só o modelo para alguém que queira o mesmo exemplo. Mas já adianto que meus códigos são precários, e um quanto tanto repetitivos, mas tento fazer assim para diminuir a margem de erro!

Mais uma vez obrigado pelo suporte!

Arthur, toda e qq contribuição é valida, quanto a disponibilizar os modelos, normalmente fica a criterio de cada um, então quando achar que já está terminado, você pode anexa-la no Forum Bibliotecas, que onde garalmente colocamos exemplos prontos para uso geral, e referencia.

[]s

 
Postado : 31/03/2012 10:00 am
Página 2 / 2