Antes de Atualizar

Para quem trabalha com formulários acoplados nem sempre é fácil fazer o controle de registros que são, com bastante frequência, gravados sem que o usuário tenha completado as informações de todos os campos. O Resultado, muitas vezes, são tabelas parcialmente preenchidas e dados inconsistentes.

A solução passa por alguns cuidados que o programador deve ter. Nas propriedades do formulário preencha conforme figura abaixo:

image

Veja que apenas Permitir filetros e edições estão marcadas como sim.

Para controlar a gravação do registro você precisa:

1. Inserir o código abaixo dentro do Evento Antes de Atualizar do formulário.

On Error Resume Next
    Dim sConfirma As String
    If sGrava <> "N" Then 'se for sim permite gravar normalmente
    Else
        If Me.Dirty = True Then 'se foi alterado
            Beep
            sConfirma = MsgBox("O Registro foi alterado. Deseja gravar as alterações?", vbQuestion + vbYesNoCancel, Me.Caption)
            If sConfirma = vbYes Then
                If VerCampos = True Then '*
                Else
                    DoCmd.CancelEvent   'cancela evento atualizar porque houve problemas nos campos
                End If
                Exit Sub
            End If
            If sConfirma = vbCancel Then
                DoCmd.CancelEvent   'apenas cancela evento atualizar
                Exit Sub
            End If
            If sConfirma = vbNo Then
                Me.Undo             'volta alterações
                Exit Sub
            End If
        End If
    End If

2. Criar uma variável no módulo do formulário chamada sGrava como string

Dim sGrava As String

3. No botão gravar insira o código abaixo:

On Error goto ErroGravar
If VerCampos = True Then
   sGrava = "S" 'Habilita a gravação que será examinada no Evento Antes de atualizar
   DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70
   sGrava = "N" 'Desabilita para gravar
   Me.AllowAdditions = False 'Volta o formulário para não aceitar novos registros
End If

Exit Sub
ErroGravar:
sGrava="N"
msgbox Err.Number & " " & Err.Description, VbInformation, Me.Caption
Exit Sub

4. No evento Ao Abrir

sGrava = "N"

Esses cuidados serão suficientes para que toda e qualquer gravação do registro possa ser feita única e exclusivamente pelo botão Gravar.

* VerCampos é uma função que retorna false caso algum campo obrigatório ficou sem ser preenchido:

Private Function VerCampos() As Boolean
    If Me.Nome <> Empty Then
    Else
        MsgBox "Nome é obrigatório", vbInformation, Me.Caption
        Me.Nome.SetFocus
        VerCampos = False
        Exit Function
    End If

    VerCampos = True
End Function

Notas

Botão Novo Registro

If Me.ID_Integracao <> Empty Then 'Campo Autonumeração – chave primária
    Me.AllowAdditions = True
    DoCmd.GoToRecord , , acNewRec
    Me.Nome.SetFocus
Else
    MsgBox "Você já está em um registro novo", vbInformation, Me.Caption
End If

Botão Excluir Registro

On Error GoTo ErroExclusao

    Me.AllowDeletions = True 'Altera formulário para aceitar exclusão

    DoCmd.DoMenuItem acFormBar, acEditMenu, 8, , acMenuVer70
    DoCmd.DoMenuItem acFormBar, acEditMenu, 6, , acMenuVer70

    Exit Sub

ErroExclusao:
    MsgBox Err.Description, VbInformation, Me.Caption
    Exit Sub

Alterar fonte do relatório pelo VBA

É comum o cliente dizer que a fonte do relatório está muito pequena e ele ou outra pessoa não estão conseguindo visualizar de forma satisfatória. Porém para outros clientes o tamanho está perfeito. Para resolver esta questão uma rotina bem simples poderá solucionar esse problema.

Vamos ao código:

01. Crie a função abaixo em um módulo qualquer:

Public Sub AlteraFonte(r As Report, iTam As Integer)
'altera o tamanho da fonte dos relatórios
On Error Resume Next
    Dim i As Integer
    For i = 0 To r.Controls.Count - 1
        If TypeOf r.Controls(i) Is TextBox Then
            r.Controls(i).FontSize = iTam
        End If
        If TypeOf r.Controls(i) Is ComboBox Then
            r.Controls(i).FontSize = iTam
        End If
    Next

End Sub

02. Insira ao formatar da seção detalhes do relatório
' Utilize tamanhos 8, 9, 10 ou 11 no máximo. Se você abrir tamanhos maiores os objetos TextBox e ComboBox podem desfocar as informações ficando muito pequenas.

    Dim iFonte as integer
    iFonte = Forms!VendasCadastro!cmbTamanhoFonte
    Call AlteraFonte(Me, iFonte) 'nome do formulário e tamanho da fonte

Utilizando registro do Windows

 

Para que utilizamos o registro do Windows?

Você pode utilizar o registro do Windows para armazenar dados sobre sua aplicação VB ou Access/VBA. Você pode armazenar por exemplo configurações do usuário, último acesso, id do usuário, preferências de impressão entre outras.

Utilize como garantia contra cópias ilegais armazenando uma chave criptografada que combine, por exemplo, nome, CNPJ ou CPF do cliente mais data de validação do sistema.

No registro do windows existe um local específico para vb e vba:
HKEY_CURRENT_USER\Software\VB And VBA Program Settings\

image

Vamos aos comando principais:

Gravar no Registro do Windows

Dim sTexto As String
Dim sID As String
sTexto = “Nome do seu Cliente”
sID = “GKGMKQCIMR” 'Chave criptografa

'Para gravar
'1 - comando
'2 - nome da empresa ou do aplicativo
'3 - pasta
'4 - Nome do atributo ou registro
'5 - Variável com o valor atribuido ao nome ou registro

'     1       2      3        4        5
SaveSetting "fse", "mode", "Reg", sTexto
SaveSetting "fse", "mode", "sID", sID

Ler uma informação no Registro do Windows

Dim sNome As String

'Para acessar um valor
'1 - variável que receberá o valor
'2 - comando
'3 - nome empresa ou aplicativo
'4 - pasta
'5 - Nome do atributo ou registro

'  1         2       3      4        5
sNome = GetSetting("fse", "mode", "Reg")
Me.Texto0 = sNome

Nota: Lembre-se que os dados conforme expostos acima são lido como string. Então você precisa utilizar as função de conversão para outros tipos como números inteiros, datas, etc. (cLng, cInt, cDbl, cCur… …)