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
#60784
Prezados, bom dia.

Montei um código para inserir registros no meu banco de dado Access, porém o lançamento ocorre via um Form no excel, o problema é que as vezes quero deixar algumas informações em branco, porém não consigo, pois dá erro, toda vez tenho que preencher o textbox com 0 para conseguir registrar.

Alguma sugestão de como corrigir?

Aceito também sugestões para melhorar o código rs.

Desde já muito obrigado.
Código: Selecionar todos
Private Sub btn_novo_Click()
On Error GoTo Erro:
If Me.txt_cliente = "" Then
    MsgBox "Cliente não informado, campo obrigatório", vbCritical
        Exit Sub
            End If
If Me.txt_data_referencia = "" Then
    MsgBox "Data de referência não informada, campo obrigatório", vbCritical
        Exit Sub
            End If
            
            
    Call Conecta
    Set rs = New ADODB.Recordset
    
    rs.Open "select * from bd_faturas", conexao, adOpenKeyset, adLockOptimistic, adCmdText
    
    rs.AddNew
    
    rs.Fields("Data_ref") = Me.txt_data_referencia
    rs.Fields("Unidade_consumidora") = Me.txt_cliente
    rs.Fields("Id_fatura") = Me.txt_cliente & "-" & Me.txt_data_referencia
    rs.Fields("Distribuidora") = Me.lbl_distribuidora
    rs.Fields("Encargo_ponta") = Me.txt_energia_ponta
    rs.Fields("Encargo_fora_ponta") = Me.txt_energia_fora_ponta
    rs.Fields("Energia_reativa_ponta") = CDbl(Me.txt_energia_reativa_ponta)
    rs.Fields("Energia_reativa_fora_ponta") = Me.txt_energia_reativa_fora_ponta
    rs.Fields("Demanda_contratada_ponta") = Me.txt_contratada_ponta
    rs.Fields("Demanda_medida_ponta") = Me.txt_demanda_ponta
    
    '''''CALCULA DEMANDA PONTA ISENTA
    If Me.lbl_distribuidora.Caption = "ENERGISA-MS" Or _
    Me.lbl_distribuidora.Caption = "ENERGISA-MT" _
    And CDbl(Me.txt_demanda_ponta) < CDbl(Me.txt_contratada_ponta) Then
        IsentaPonta = CDbl(Me.txt_contratada_ponta) - CDbl(Me.txt_demanda_ponta)
            Else
                IsentaPonta = 0
                    End If
                    
    rs.Fields("Demanda_isenta_ponta") = IsentaPonta
                    
    '''''CALCULA ULTRAPASSAGEM DEMANDA PONTA
    If CDbl(Me.txt_demanda_ponta) > (CDbl(Me.txt_contratada_ponta) * 1.05) Then
            UltrapassagemPonta = CDbl(Me.txt_demanda_ponta) - CDbl(Me.txt_contratada_ponta)
                Else
                     UltrapassagemPonta = 0
                        End If
                        
    rs.Fields("Ultrapassagem_demanda_ponta") = UltrapassagemPonta
    rs.Fields("Demanda_reativa_ponta") = Me.txt_demanda_reativa_ponta
    rs.Fields("Demanda_contratada_fora_ponta") = Me.txt_contratada_fora_ponta
    rs.Fields("Demanda_medida_fora_ponta") = Me.txt_demanda_fora_ponta
    
    '''''CALCULA DEMANDA FORA PONTA ISENTA
    If Me.lbl_distribuidora.Caption = "ENERGISA-MS" _
    Or Me.lbl_distribuidora.Caption = "ENERGISA-MT" _
    And CDbl(Me.txt_demanda_fora_ponta) < CDbl(Me.txt_contratada_fora_ponta) Then
        IsentaForaPonta = CDbl(Me.txt_contratada_fora_ponta) - CDbl(Me.txt_demanda_fora_ponta)
            Else
                IsentaForaPonta = 0
                    End If
                    
    rs.Fields("Demanda_isenta_fora_ponta") = IsentaForaPonta
    
    '''''CALCULA ULTRAPASSAGEM DEMANDA FORA PONTA
    If CDbl(Me.txt_demanda_fora_ponta) > (CDbl(Me.txt_contratada_fora_ponta) * 1.05) Then
        UltrapassagemForaPonta = CDbl(Me.txt_demanda_fora_ponta) - CDbl(Me.txt_contratada_fora_ponta)
            Else
                UltrapassagemForaPonta = 0
                    End If
    rs.Fields("Ultrapassagem_demanda_fora_ponta") = UltrapassagemForaPonta
    
    rs.Fields("Demanda_reativa_fora_ponta") = Me.txt_demanda_reativa_fora_ponta
    rs.Fields("Iluminacao_publica") = Me.txt_publica
    rs.Fields("Encargo_conexao") = Me.txt_conexao
    rs.Fields("Ajuste_faturamento") = Me.txt_ajuste
    rs.Fields("Valor_devec") = Me.txt_devec
    '''''CALCULA PIS COFINS
    PisCofins = (CDbl(Me.txt_pis) + CDbl(Me.txt_cofins)) / 100
    rs.Fields("Pis_cofins") = PisCofins
    rs.Fields("Total_fatura") = Me.txt_total_fatura
    rs.Fields("Data_emissao") = Me.txt_emissao
    rs.Fields("Data_pagamento") = Me.txt_pgto
    rs.Fields("Data_leitura") = Me.txt_leitura_atual
    rs.Fields("Data_leitura_anterior") = Me.txt_leitura_anterior
    
    rs.Update
    Call Desconecta
    
    MsgBox "Cadastro efetuado com sucesso"
    
    For Each objeto In Me.Controls
        If TypeName(objeto) = "TextBox" Or TypeName(objeto) = "ComboBox" Then
            objeto.Text = ""
            Me.lbl_distribuidora.Caption = Empty
                End If
                    Next
                    
    For Each objeto In Me.Controls
    If TypeName(objeto) = "TextBox" Or TypeName(objeto) = "ComboBox" Then
        objeto.Locked = True
            End If
            txt_cliente.Locked = False
            txt_data_referencia.Locked = False
                Next
    
    Set rs = Nothing
Exit Sub
Erro:
    If Err.Number = -2147217887 Then
        MsgBox "Ja existe uma fatura cadastrada com essa referência, por favor verifique!", vbCritical
            Else
                MsgBox "O seguinte erro ocorreu:" & Err.Description
                    End If
End Sub
#60789
Boa tarde!!!
Acredito que o problema não está no Excel e sim no Access.
Se o registro for uma chave (principal ou estrangeira), não aceitará em branco.
Tive um problema parecido e coloquei um número alto (999999) e para não repetir, decresci o valor e resolvi o problema que tinha, pois o produto do banco iria até 100.000, ou seja, nunca alcançaria o 1M, e para trabalhar no Excel ficou fácil para localizar e separar, pois o maior numero valido seria 100K.
Como seus códigos estão entrando bem, nem olhei o que já está funcionando.
Se a Access estiver em ordem, e a entrada de registros não for obrigatória, faça o recurso do número alto.
Espero ter ajudado.
Abraço

PS: Possivelmente poderá ter outras saídas...
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