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

lOOP PARA GERAR PARCELAS

Discussões sobre a integração do Excel com o Banco de Dados Access

Moderador: joseA

themusicgospel
Colaborador
Colaborador
Mensagens: 12
Registrado em: Ter Ago 23, 2011 11:07 pm

lOOP PARA GERAR PARCELAS

Mensagem por themusicgospel »

Bom dia caros amigos programadores!
Venho através desta postagem solicitar uma ajuda de vocês. Estou desenvolvendo um projeto para uma escola, onde eles trabalham com o parcelamento do pagamento do aluno.
A pessoa que vai colocar as parcelas ela seleciona: DATA DO VENCIMENTO, VALOR DA PARCELA, NÚMERO DE PARCELAS..
apois isso ser inserido, o código vai gerar o loop dessas parcelas em uma listview...ate ai tudo da certo, porém, quando eu insiro uma data apartir do dia 13 ao dia 31...ele gera as proximas datas todas com o dia 1..exemplo:
DATA DE VENCIMENTO LANÇADA: 14/07/2019
DATA MOSTRADA NA LISTVIEW: 01/08/2019

obs: ele lançou no mês 8, porque pega a data que eu digitei e soma com mais 1 mês, de acordo com a quantidade de parcelas informada pelo usuário.
Segue abaixo o codigo que estou usando.

Código: Selecionar todos

Private Sub chameleonButton1_Click()
    LstFaturas.ListItems.Clear
    If txt_alunoselecionado.Text = "" Or txt_Mensalidade.Text = "" Or txtNumeroParcelas.Text = "" Or txtNumeroTitulo.Text = "" Then Exit Sub

    '================================================================
    '  Gera fatura para ano com 2 e 4 dígitos
    '================================================================

    Dim DataFatura, DataParcela As Date
    Dim ValorFatura As Currency
    Dim dd, mm, aa, Parcela, NumeroParcela As Integer

    '======================================

    DataFatura = txt_Vencimento
    ValorFatura = txt_Mensalidade.Text
    NumeroParcela = txtNumeroParcelas.Text
    Parcela = 0

    '======================================

    dd = Mid$(DataFatura, 1, 2)
    mm = Mid$(DataFatura, 4, 2)
    aa = Mid$(DataFatura, 7, 4)

    '======================================

    Do Until Parcela >= NumeroParcela

        If dd > 12 Then dd = Format(CCur(dd), "##")
        If dd > 12 Then dd = Format(CCur(1), "##")
        If mm <= 12 Then mm = CCur(mm) + 1
        If CCur(mm) > 12 Then
            mm = CCur(1)
            aa = CCur(aa) + 1
        End If
    
        Parcela = Parcela + 1

        DataParcela = CDate(dd & "/" & mm & "/" & aa)

        '=======================================
        Dim i As Integer
        Dim lst As ListItem
        Set lst = LstFaturas.ListItems.Add(, "000" + Str(LstFaturas.ListItems.Count + 1), Str(LstFaturas.ListItems.Count + 1))
        lst.ListSubItems.Add Text:=txt_alunoselecionado.Text
        lst.ListSubItems.Add Text:=LstFaturas.ListItems.Count
        lst.ListSubItems.Add Text:=CDate(DataParcela)
        lst.ListSubItems.Add Text:=Format(CCur(ValorFatura))
    Loop
    'Dim i As Integer
    For i = 1 To LstFaturas.ListItems.Count
        ' List1.ListItems.Add i
        If LstFaturas.ListItems(i).SubItems(2) <> "" Then
            LstFaturas.ListItems(i).ListSubItems(2).ForeColor = vbRed
        Else
            LstFaturas.ListItems(1).ListSubItems(2).ForeColor = vbBlue
        End If
    Next
         
    For i = 1 To LstFaturas.ListItems.Count
        If LstFaturas.ListItems(i).SubItems(3) <> "" Then
            LstFaturas.ListItems(i).ListSubItems(3).ForeColor = &H8000000D

        End If
    Next
End Sub
Anexos
Sem título.png
Sem título.png (97.53 KiB) Exibido 13538 vezes


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
Reinaldo
Jedi
Jedi
Mensagens: 1537
Registrado em: Sex Ago 01, 2014 4:09 pm
Localização: Garça - SP / SCS - SP

Re: lOOP PARA GERAR PARCELAS

Mensagem por Reinaldo »

Sómente pelo codigo e imagem é osso analisar uma ocorrencia mas vamos lá
Diferentemente de algumas linguagens de programação, o VBA "espera" que na declaração de cada variável seja atribuído seu respectivo conteudo.
Declaração como:
Dim DataFatura, DataParcela As Date --> a primeira variavel e "entendida" como variant e não data

DataParcela o compilador/VBA sómente aceitará, para toda a execução da rotina, dados que condizem com uma data valida (Date)
DataFatura o compilador/VBA "espera" o primeiro tipo recebido para "tentar" converter/atribuir a um tipo de valor (Considera Variant), assim se o primeiro valor for um valor boleano/logico, nessa execução somente aceitará valores logicos.
A sintaxe para declaração de variaveis no VBA é -->

Código: Selecionar todos

Dim Parcela As Integer, NumeroParcela As Integer
Dim dd As Integer, mm As Integer, aa As Integer
Dim DataFatura As Date, DataParcela As Date
Dim ValorFatura As Currency
Quanto a sua demanda; creio que a dificuldade esteja nesta bloco:

Código: Selecionar todos

    If dd > 12 Then dd = Format(CCur(dd), "##")
    If dd > 12 Then dd = Format(CCur(1), "##")
    If mm <= 12 Then mm = CCur(mm) + 1
    If CCur(mm) > 12 Then
        mm = CCur(1)
        aa = CCur(aa) + 1
    End If
Existe 2 "if's" para definir/formatar dd
o primeiro apenas formata o valor previamente determinado
Se o valor de dd for maior que 12 (inclui 13 a 31) --> If dd > 12 Then dd = Format(CCur(dd), "##")
Já o segundo altera esse valor para 1, sempre que dd for maior que 12, talvez aqui o sinal devesse ser menor "<"
If dd > 12 Then dd = Format(CCur(1), "##")


themusicgospel
Colaborador
Colaborador
Mensagens: 12
Registrado em: Ter Ago 23, 2011 11:07 pm

Re: lOOP PARA GERAR PARCELAS

Mensagem por themusicgospel »

Muito obrigado por tentar me ajudar meu amigo.
Fiz a alteração que voce me enviou, porém o que acontece é que ele agora soma +1 no DD.
exemplo:
Data de vencimento: 15/07/2019 numero de parcelas: 3
ele lança o seguinte:
16/07/2019
17/08/2019

não sei mais o que fazer, e so falta isso para encerrar meu sistema.


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: lOOP PARA GERAR PARCELAS

Mensagem por Reinaldo »

Pelo que entendi,
se dia entre 13 e 30; vencimento mesmo dia a cada mes.
se dia entre 1 e 12; vencimento dia primeiro de cada mes

Como não tenho seu projeto para testar, segue no anexo a parte de sua rotina gravando a data na planilha
Veja se e o que espera
Anexos
Pasta1.zip
(14.03 KiB) Baixado 685 vezes


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