Este fórum está sendo desativado

Depois de 9 anos, este fórum será desativado. Mas calma.... estamos migrando para uma comunidade no DISCORD. Junte-se a nós.

ENTRAR PARA DISCORD

Tópicos relacionados a códigos VBA, gravação de macros, etc.
  • Avatar do usuário
Por DennerSantos
Posts
#64294
Galera preciso de uma ajuda tenho uma planilha para controlar as compras da minha loja criei aos poucos com algumas coisas que vi no fóruns e com ajuda de vocês aqui e ela estava funcionando mais agora quando clico no botão para cadastrar um novo pagamento ele gera um erro e ate que as informações são lançadas na planilha porem ele fecha a useform

Esse é o erro
Imagem


eu acho que é alguma coisa na parcela 2 mais não consegui resolver, alguém poderia me ajudar... segue a baixa o vba para ajudar
Teste Fornecedor.xlsm
Código: Selecionar todos
Private Sub CommandButton1_Click()
'Desativar atualização de ecrã
Application.ScreenUpdating = False

'Ativar a primeira planilha
ThisWorkbook.Worksheets("Vencimentos").Activate

'Procurar a primeira linha vazia
ultimaLinha = ThisWorkbook.Worksheets("Vencimentos").Cells(Rows.Count, 1).End(xlUp).Row
ultimaLinha = ultimaLinha + 1

'Carregar os dados digitados nas caixas de texto para a planilha
With ThisWorkbook.Worksheets("Vencimentos")
    Cells(ultimaLinha, 1).Value = nf.Value
    Cells(ultimaLinha, 2).Value = ComboBox2.Value
    Cells(ultimaLinha, 3).Value = ComboBox1.Value
    Cells(ultimaLinha, 4).Value = Format(data.Value, "DD/MM/YYYY")
    Cells(ultimaLinha, 5).Value = CDbl(txValor.Value)
    Cells(ultimaLinha, 6).Value = txParcela.Value
    Cells(ultimaLinha, 7).Value = parcela1.Value
    Cells(ultimaLinha, 9).Value = parcela2.Value
    Cells(ultimaLinha, 11).Value = parcela3.Value
    Cells(ultimaLinha, 13).Value = parcela4.Value
    Cells(ultimaLinha, 15).Value = parcela55.Value
    Cells(ultimaLinha, 17).Value = parcela6.Value
    Cells(ultimaLinha, 19).Value = parcela7.Value
    Cells(ultimaLinha, 21).Value = parcela8.Value
    Cells(ultimaLinha, 8).Value = CDbl(Valor1.Value)
    Cells(ultimaLinha, 10).Value = CDbl(Valor2.Value)
    Cells(ultimaLinha, 12).Value = CDbl(Valor3.Value)
    Cells(ultimaLinha, 14).Value = CDbl(Valor4.Value)
    Cells(ultimaLinha, 16).Value = CDbl(Valor5.Value)
    Cells(ultimaLinha, 18).Value = CDbl(Valor6.Value)
    Cells(ultimaLinha, 20).Value = CDbl(Valor7.Value)
    Cells(ultimaLinha, 22).Value = CDbl(Valor8.Value)
End With


'Limpar as caixas de texto
txValor.Value = Empty
nf.Value = Empty
ComboBox1.Value = Empty
ComboBox2.Value = Empty
data.Value = Empty
txParcela.Value = Empty
parcela1.Value = Empty
parcela2.Value = Empty
parcela3.Value = Empty
parcela4.Value = Empty
parcela55.Value = Empty
parcela6.Value = Empty
parcela7.Value = Empty
parcela8.Value = Empty
Valor1.Value = Empty
Valor2.Value = Empty
Valor3.Value = Empty
Valor4.Value = Empty
Valor5.Value = Empty
Valor6.Value = Empty
Valor7.Value = Empty
Valor8.Value = Empty
DATA1.Value = Empty
DATA2.Value = Empty
DATA3.Value = Empty
DATA4.Value = Empty
DATA5.Value = Empty
DATA6.Value = Empty
DATA7.Value = Empty
DATA8.Value = Empty
'Colocar o foco na primeira caixa de texto
nf.SetFocus

'Ativar atualização de ecrã
Application.ScreenUpdating = True

'Mensagem de confirmação
MsgBox "Cadastrado com sucesso!", vbOKOnly

End Sub

Private Sub DATA1_Change()
Call somardias1

End Sub
Private Sub DATA2_Change()
Call somardias2

End Sub
Private Sub DATA3_Change()
Call somardias3

End Sub
Private Sub DATA4_Change()
Call somardias4

End Sub
Private Sub DATA5_Change()
Call somardias5

End Sub
Private Sub DATA6_Change()
Call somardias6

End Sub
Private Sub DATA7_Change()
Call somardias7

End Sub
Private Sub DATA8_Change()
Call somardias8

End Sub

Private Sub faturamento_Change()
Call somarfaturamento
End Sub

Private Sub parcela1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim D1, D2 As Double

D1 = Format(data, "000000")
D2 = Format(parcela1, "00000000")


DATA1 = D2 - D1

End Sub
Private Sub parcela2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim D1, D2 As Double

D1 = Format(data, "000000")
D2 = Format(parcela2, "00000000")

DATA2 = D2 - D1

End Sub
Private Sub parcela3_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim D1, D2 As Double

D1 = Format(data, "000000")
D2 = Format(parcela3, "00000000")

DATA3 = D2 - D1

End Sub
Private Sub parcela4_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim D1, D2 As Double

D1 = Format(data, "000000")
D2 = Format(parcela4, "00000000")

DATA4 = D2 - D1

End Sub
Private Sub parcela55_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim D1, D2 As Double

D1 = Format(data, "000000")
D2 = Format(parcela55, "00000000")

DATA5 = D2 - D1

End Sub


Private Sub parcela6_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim D1, D2 As Double

D1 = Format(data, "000000")
D2 = Format(parcela6, "00000000")

DATA6 = D2 - D1

End Sub
Private Sub parcela7_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim D1, D2 As Double

D1 = Format(data, "000000")
D2 = Format(parcela7, "000000")

DATA7 = D2 - D1

End Sub
Private Sub parcela8_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim D1, D2 As Double

D1 = Format(data, "000000")
D2 = Format(parcela8, "000000")

DATA8 = D2 - D1

End Sub
'=================================================================================================================================
'Instrução para efetuar a divisão do valor total frente a quantidade de parcelas
Private Sub txparcela_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim A As Double, B As Integer
Dim Valor As Double, x As Integer

A = txValor.Value
B = txParcela.Value
    
Valorparc = VBA.Round(CDbl(A) / CDbl(B), 2)
        
For x = 1 To B

    Controls.Item("valor" & x).Text = Valorparc
    Controls.Item("valor" & x).Text = Format(Controls.Item("valor" & x), "R$ #,##0.00")

Next
End Sub
'==================================================================================================================================
'Instrução para exibir os valores como moeda
'Private Sub valor1_Change()
'    valor1.Value = Format(valor1, "R$ #,##0.00")
'End Sub
Private Sub txvalor_Exit(ByVal Cancel As MSForms.ReturnBoolean)
        txValor.Value = Format(txValor, "R$ #,##0.00")
End Sub
'Instrução para delimitar a quantidade de caracteres no textbox data
Private Sub data_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    'Limita a Qde de caracteres
    data.MaxLength = 10
   
    'para permitir que apenas números sejam digitados
    If KeyAscii < Asc("0") Or KeyAscii > Asc("9") Then
        KeyAscii = 0
    End If
End Sub
'==================================================================================================================================

'Instrução para inserir as barras no textbox data
Private Sub data_Change()
    'Formata : DD/MM/AAAA
    If Len(data) = 2 Or Len(data) = 5 Then
        data.Text = data.Text & "/"
        SendKeys "{End}", True
    End If
End Sub
Private Sub parcela1_Change()
    'Formata : DD/MM/AAAA
    If Len(parcela1) = 2 Or Len(parcela1) = 5 Then
        parcela1.Text = parcela1.Text & "/"
        SendKeys "{End}", True
    End If
End Sub

Private Sub parcela2_Change()
    'Formata : DD/MM/AAAA
    If Len(parcela2) = 2 Or Len(parcela2) = 5 Then
        parcela2.Text = parcela2.Text & "/"
        SendKeys "{End}", True
    End If
End Sub
Private Sub parcela3_Change()
    'Formata : DD/MM/AAAA
    If Len(parcela3) = 2 Or Len(parcela3) = 5 Then
        parcela3.Text = parcela3.Text & "/"
        SendKeys "{End}", True
    End If
End Sub
Private Sub parcela4_Change()
    'Formata : DD/MM/AAAA
    If Len(parcela4) = 2 Or Len(parcela4) = 5 Then
        parcela4.Text = parcela4.Text & "/"
        SendKeys "{End}", True
    End If
End Sub
Private Sub parcela55_Change()
    'Formata : DD/MM/AAAA
    If Len(parcela55) = 2 Or Len(parcela55) = 5 Then
        parcela55.Text = parcela55.Text & "/"
        SendKeys "{End}", True
    End If
End Sub
Private Sub parcela6_Change()
    'Formata : DD/MM/AAAA
    If Len(parcela6) = 2 Or Len(parcela6) = 5 Then
        parcela6.Text = parcela6.Text & "/"
        SendKeys "{End}", True
    End If
End Sub
Private Sub parcela7_Change()
    'Formata : DD/MM/AAAA
    If Len(parcela7) = 2 Or Len(parcela7) = 5 Then
        parcela7.Text = parcela7.Text & "/"
        SendKeys "{End}", True
    End If
End Sub
Private Sub parcela8_Change()
    'Formata : DD/MM/AAAA
    If Len(parcela8) = 2 Or Len(parcela8) = 5 Then
        parcela8.Text = parcela8.Text & "/"
        SendKeys "{End}", True
    End If
End Sub
Private Sub somardias1()
If IsDate(Me.data) And IsNumeric(Me.DATA1) Then
Me.parcela1 = DateAdd("d", Me.DATA1, Me.data)
End If
End Sub

Private Sub somardias2()
If IsDate(Me.data) And IsNumeric(Me.DATA2) Then
Me.parcela2 = DateAdd("d", Me.DATA2, Me.data)
End If
End Sub

Private Sub somardias3()
If IsDate(Me.data) And IsNumeric(Me.DATA3) Then
Me.parcela3 = DateAdd("d", Me.DATA3, Me.data)
End If
End Sub

Private Sub somardias4()
If IsDate(Me.data) And IsNumeric(Me.DATA4) Then
Me.parcela4 = DateAdd("d", Me.DATA4, Me.data)
End If
End Sub

Private Sub somardias5()
If IsDate(Me.data) And IsNumeric(Me.DATA5) Then
Me.parcela55 = DateAdd("d", Me.DATA5, Me.data)
End If
End Sub

Private Sub somardias6()
If IsDate(Me.data) And IsNumeric(Me.DATA6) Then
Me.parcela6 = DateAdd("d", Me.DATA6, Me.data)
End If
End Sub

Private Sub somardias7()
If IsDate(Me.data) And IsNumeric(Me.DATA7) Then
Me.parcela7 = DateAdd("d", Me.DATA7, Me.data)
End If
End Sub

Private Sub somardias8()
If IsDate(Me.data) And IsNumeric(Me.DATA8) Then
Me.parcela8 = DateAdd("d", Me.DATA8, Me.data)
End If
End Sub

Private Sub somarfaturamento()
If IsDate(Me.data) And IsNumeric(Me.faturamento) Then
Me.data = DateAdd("d", Me.faturamento, Me.data)
End If
End Sub
Private Sub UserForm_Initialize()
data = Date
End Sub
Você não está autorizado a ver ou baixar esse anexo.
Avatar do usuário
Por CursoDeExcelGratis
Posts Avatar
#64300
estimado,
tipos incompativeis é quando é esperado um número e encontra um texto, por exemplo.
no seu caso, a função cdbl não consegue transformar um texto vazio em número, que a gente esperaria que seja 0, experimente mudar
Código: Selecionar todos
    Cells(ultimaLinha, 8).Value = CDbl(Valor1.Value)
    Cells(ultimaLinha, 10).Value = CDbl(Valor2.Value)
    Cells(ultimaLinha, 12).Value = CDbl(Valor3.Value)
    Cells(ultimaLinha, 14).Value = CDbl(Valor4.Value)
    Cells(ultimaLinha, 16).Value = CDbl(Valor5.Value)
    Cells(ultimaLinha, 18).Value = CDbl(Valor6.Value)
    Cells(ultimaLinha, 20).Value = CDbl(Valor7.Value)
    Cells(ultimaLinha, 22).Value = CDbl(Valor8.Value)
para
Código: Selecionar todos

    Cells(ultimaLinha, 8).Value = Val(Valor1.Value)
    Cells(ultimaLinha, 10).Value = Val(Valor2.Value)
    Cells(ultimaLinha, 12).Value = Val(Valor3.Value)
    Cells(ultimaLinha, 14).Value = Val(Valor4.Value)
    Cells(ultimaLinha, 16).Value = Val(Valor5.Value)
    Cells(ultimaLinha, 18).Value = Val(Valor6.Value)
    Cells(ultimaLinha, 20).Value = Val(Valor7.Value)
    Cells(ultimaLinha, 22).Value = Val(Valor8.Value)
DennerSantos agradeceu por isso
Por DennerSantos
Posts
#64379
Coloquei mais não deu certo, acho que o erro esta na seguinte execução quando preencho o campo data com os dias ele calcula a data de hoje + os dias que coloquei no campo data e resultado apresenta no campo parcela

exemplo hoje (05/05/2021) + 35 dias = 10/06/2021
............Data Hoje..................(data).......(Parcela)

quando eu clico em parcela antes de data e o campo esta em branco ai gera o erro acho que teria que colocar uma linha pra nao gerar esse erro quando em branco
Código: Selecionar todos
Private Sub parcela1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim D1, D2 As Double

D1 = Format(data, "000000")
D2 = Format(parcela1, "00000000")


DATA1 = D2 - D1

End Sub
a parte com probelama é essa
Avatar do usuário
Por CursoDeExcelGratis
Posts Avatar
#64416
bom dia ! vc poderia colocar um if para verificar se esta vazio ou nao

ou , poderia ignorar os erros se isso não tem problema no seu código

para ignorar os erros é bem facil, seu codigo ficaria assim :
Código: Selecionar todos
Private Sub parcela1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
on error goto Fim
Dim D1, D2 As Double

D1 = Format(data, "000000")
D2 = Format(parcela1, "00000000")


DATA1 = D2 - D1
Fim:
End Sub
DennerSantos agradeceu por isso
long long title how many chars? lets see 123 ok more? yes 60

We have created lots of YouTube videos just so you can achieve [...]

Another post test yes yes yes or no, maybe ni? :-/

The best flat phpBB theme around. Period. Fine craftmanship and [...]

Do you need a super MOD? Well here it is. chew on this

All you need is right here. Content tag, SEO, listing, Pizza and spaghetti [...]

Lasagna on me this time ok? I got plenty of cash

this should be fantastic. but what about links,images, bbcodes etc etc? [...]

Estamos migrando para uma comunidade no Discord