Introdução
Tabelas
Relacionamentos
 Consultas
Formulários
 Relatórios
 Macros
Módulos
ActiveX
 AutomaçãoOLE
 Gráficos
 DAO
 SQL
 Segurança
Redes/ODBC
 Dicas
 Curso Online
Wizards
Ferramentas
Help
 Downloads
 Links
Novidades
FAQs
Index

DICAS PREFERIDAS

Backup e Recuperação de Banco de Dados Danificado *

Colocando o Relógio/Calendário num Controle *

Somando Valores de Campos de um Questionário *

Fazer Mensagem Piscar em Formulário *

Tornando Valores Negativos de Campos em Vermelho *

Personalizando uma Caixa De Texto do Tipo Sim/Não *

Mudando a Cor de Fundo de Controle *

Mudando o Título do Formulário para o Fornecedor que tem o Foco *

Função QBColor *

Função RGB *

Controlando Eventos *

Criar um Formulário e Botão de Comando Via Código e Dimensiona Controle para Mensagem Caber no Mesmo (Sizetofit) *

Ocultando Controles *

Exemplo da Função Timer *
 

Backup e Recuperação de Banco de Dados Danificado

Fazer backup, restore, recuperação e compactação de um Banco de Dados.

Criar um outro banco de dados apenas para isso (pois o sistema não pode estar aberto para ser reparado e muitas vezes realmente nem conseguimos abri-lo), com um único formulário com 3 botões: Backup, Restore e Reparar Sistema Danificado.

Digite no Evento Click do botão Backup:

Dim X, Y As Integer, AppName As String

AppName = "C:\autopsg\arj.exe a -vva a:autopsg *.mdb"

X = Shell(AppName, 1)

Digite no Evento Click do botão Restore:

Dim X As Integer, AppName As String

AppName = "c:\autopsg\Arj e -vva a:* c:\autopsg"

X = Shell(AppName, 1)

Aqui pode ser melhorado (a gosto), adicionando o parâmetro /y a linha do código do Restore ficando assim: AppName = "c:\autopsg\Arj e -vva a:* c:\autopsg /y"

Selecione o botão Reparar, abra a janela de Propriedades e em Evento, na frente de Ao Clicar digite "=Reparo()" (sem as aspas).

Crie também um módulo e digite o seguinte código para a função Reparo:

Function Reparo()

'Este exemplo tenta corrigir o banco de dados denominado autopsg.mdb. Você não pode ‘executar este procedimento a partir de um módulo de dentro do autopsg.mdb ou de outro

‘Banco de dados que queira reparar

Dim errLoop As Error

If MsgBox("Corrigir o Sistema Auto Peças São Gerardo?", _

vbYesNo) = vbYes Then

On Error GoTo Err_Repair

DBEngine.RepairDatabase "c:\autopsg\autopsg.mdb"

On Error GoTo 0

MsgBox "Sistema corrigido com sucesso!"

DoCmd.Quit ‘Cair fora do Access

End If

Exit Function

Err_Repair:

For Each errLoop In DBEngine.Errors

MsgBox "Correção mal-sucedida!" & vbCr & _

"Número do erro: " & errLoop.Number & _

vbCr & errLoop.Description

Next errLoop

Dim dbsAutopsg, dbsAutopsgT As Database

Set dbsAutopsg = OpenDatabase("C:\autopsg\autopsg.mdb")

' Esta instrução cria uma versão compactada do banco de dados Autopsg.mdb.

DBEngine.CompactDatabase "c:\autopsg\autopsg.mdb", _

"c:\autopsg\autopsg.mdb"

End Function
 
 

Colocando o Relógio/Calendário num Controle

Crie 2 Botões de Comando e 1 Rótulo (lblTempo), coloque figuras adequadas (relógio e calendário neles) nos botões.

No Evento Ao Mover o Mouse do botão relógio digite:

lblTempo.Caption = Format$(Time, "hh:mm")

No Evento ao Mover o Mouse do botão calendário digite:

lblTempo.Caption = Date
 
 

Somando Valores de Campos de um Questionário

Temos um formulário que entre outras cosias tem um questionário Escala de Avaliação de Depressão (Terapia Ocupacional), com perguntas (Rótulos) e espaço para respostas (Caixas de Texto). As Caixas de Texto recebem nomes: um, dois, três em diante. Ao final temos uma caixa de texto "total". As perguntas (Está satisfeito com sua vida, Aborrece-se com frequência e por ai vai) devem ser respondidas com apenas uma letra: D ou N (Depressão ou Não Depressão). Lembrar que aqui seria o terapeuta perguntando ao cliente.

No Evento Ao Entrar da Caixa "total", digite:

Private Sub total_Enter()

If um = "D" Then

contador = contador + 1

End If

If dois = "D" Then

contador = contador + 1

End If

If tres = "D" Then

contador = contador + 1

End If

If quatro = "D" Then

contador = contador + 1

End If

If cinco = "D" Then

contador = contador + 1

End If

‘... Cortei

If trinta = "D" Then

contador = contador + 1

End If

total = contador

End Sub
 
 

Fazer Mensagem Piscar em Formulário

Crie um Rótulo de nome lblPiscando (por exemplo) e coloque o seguinte código no evento No Cronômetro do Formulário:

Private Sub Form_Timer()

Me!lblPiscando.Visible = Not Me!lblPiscando.Visible

End Sub

Altere a propriedade Intervalo do Cronômetro do form para 500 (mude à vontade).

Obs.: até botões de comando piscam, sendo que todo ele, não apenas o caption.
 
 

Tornando Valores Negativos de Campos em Vermelho

Para que ao digitarmos valores negativos em um Controle/Campo basta que na propriedade Formato do Controle, coloque a seguinte expressão:

#.###,##;-#.###,##[Vermelho]

Veja outro exemplo:

$#,##0.00[Verde];($#,##0.00)[Vermelho];"Zero";"Nulo"
 
 

Personalizando uma Caixa De Texto do Tipo Sim/Não

O exemplo a seguir mostra um formato personalizado sim/não para um controle caixa de texto. O controle exibe a palavra "Sempre" em texto azul para Sim, Verdadeiro ou Ativado, e a palavra "Nunca" em texto vermelho para Não, Falso ou Desativado.

Crie uma caixa de texto e coloque na propriedade Origem do Controle o Campo Sim/Não correspondente da Tabela que deseja associar. Na propriedade formato da caixa de texto:

;"Sempre"[Azul];"Nunca"[Vermelho]
 
 

Mudando a Cor de Fundo de Controle

No exemplo a seguir, um procedimento de evento Current verifica o status de um botão de opção denominado Descontinuado. Se o botão estiver selecionado, o exemplo definirá a cor de segundo plano do campo NomeDoProduto como vermelho para indicar que o produto foi descontinuado.

Para testar o exemplo, adicione o procedimento de evento a seguir a um formulário que contenha uma opção denominada Descontinuado e uma caixa de texto denominada NomeDoProduto.

Private Sub Form_Current()

If Me!Descontinuado Then

Me!NomeDoProduto.BackColor = 255

EndIf

End Sub
 
 

Mudando o Título do Formulário para o Fornecedor que tem o Foco

O próximo exemplo define a propriedade Caption de um formulário com o campo NomeDoCliente. Conforme o foco é movido de registro para registro, a barra de título mostra o nome do fornecedor atual.

Para testar o exemplo, adicione o procedimento de evento a seguir a um formulário que contenha uma caixa de texto denominada NomeDoCliente.
 
 

Na propriedade No Atual do Formulário, digite:

Private Sub Form_Current()

If NomeDoCliente <> Null Then ‘Evita problema com Campo vazio

Me.Caption = Me!NomeDoCliente

End If

End Sub
 
 

Função QBColor

Retorna um Long que representa o código de cores RGB correspondente ao número de cor especificado.

Sintaxe

QBColor(cor)

O argumento obrigatório cor é um número inteiro no intervalo de 0 a 15.

Definições

O argumento cor possui as definições a seguir:

Número Cor Número Cor

0 Preto 8 Cinza

1 Azul 9 Azul-claro

2 Verde 10 Verde-claro

3 Ciano 11 Ciano-claro

4 Vermelho 12 Vermelho-claro

5 Magenta 13 Magenta-claro

6 Amarelo 14 Amarelo-claro

7 Branco 15 Branco-brilhante

Comentários

O argumento cor representa valores de cor utilizados por versões anteriores do Basic (como o Microsoft Visual Basic para MS-DOS e o Basic Compiler). Começando pelo byte menos significativo, o valor retornado especifica os valores de vermelho, verde e azul utilizados para definir a cor apropriada no sistema RGB utilizado pelo Visual Basic para Aplicativos.
 
 
 
 

EXEMPLO:

Este exemplo utiliza a função QBColor para alterar a propriedade BackColor do formulário passado como MeuFormulário para a cor indicada por CódigoDaCor. QBColor aceita valores inteiros entre 0 e 15.

Sub ChangeBackColor (CódigoDaCor As Integer, MeuFormulário As Form)

MeuFormulário.BackColor = QBColor(CódigoDaCor)

End Sub
 
 

Função RGB

Retorna um número inteiro Long que representa um valor de cor RGB.

Sintaxe

RGB(red, green, blue

A sintaxe da função RGB possui os argumentos nomeados a seguir:

Parte Descrição

red Obrigatório; Variant (Integer). Número no intervalo de 0 a 255, inclusive, que representa o componente vermelho da cor.

green Obrigatório; Variant (Integer). Número no intervalo de 0 a.255, inclusive, que representa o componente verde da cor.

blue Obrigatório; Variant (Integer). Número no intervalo de 0 a 255, inclusive, que representa o componente azul da cor.

Comentários

Os métodos e as propriedades de aplicativos que aceitam uma especificação de cor esperam que essa especificação seja um número que represente um valor de cor RGB. Este valor especifica a intensidade relativa de vermelho, verde e azul que causa a exibição de uma cor específica.

O valor de qualquer argumento de RGB que exceda 255 é assumido como sendo 255.

A tabela a seguir lista algumas cores padrão e os valores de vermelho, verde, e azul que elas contêm:

Cor Valor do vermelho Valor do verde Valor do azul

Preto 0 0 0

Azul 0 0 255

Verde 0 255 0

Ciano 0 255 255

Vermelho 255 0 0

Magenta 255 0 255

Amarelo 255 255 0

Branco 255 255 255

EXEMPLO:

Este exemplo mostra como a função RGB é utilizada para retornar um número inteiro que representa um valor de cor RGB. Ela é utilizada em métodos e propriedades de aplicativo que aceitam uma especificação de cor. O objeto MeuObjeto e a sua propriedade são utilizados somente com finalidades ilustrativas. Se MeuObjeto não existir, ou se não tiver uma propriedade Color, ocorrerá um erro.

Dim VERMELHO, I, ValorRGB, MeuObjeto

Vermelho = RGB(255, 0, 0) ' Retorna o valor para Vermelho.

I = 75 ' Inicializa o deslocamento.

ValorRGB = RGB(I, 64 + I, 128 + I) ' Igual a RGB(75, 139, 203).

MeuObjeto.Color = RGB(255, 0, 0) ' Define a propriedade Color de

' MeuObjeto como Vermelho.
 
 

Controlando Eventos

O exemplo a seguir mostra como você pode utilizar o valor inserido no controle País para determinar qual dentre duas macros distintas será executada quando você clicar no botão Relatório Imprimir País.

Sub País_AfterUpdate()

If País = "Canadá" Then

[Relatório Imprimir País].OnClick = "ImprimirRelatórioDoCanadá"

ElseIf País = "USA" Then

[Relatório Imprimir País].OnClick = "ImprimirRelatórioUSA"

End If

End Sub

Outros Exemplos:

No Visual Basic, defina a propriedade com uma expressão de seqüência.

Para executar Utilize esta sintaxe Exemplo

Macro "nomedamacro" Botão1.OnClick = "MinhaMacro"

Procedimento de evento "[Event Procedure]" Botão1.Onclick = "[Event Procedure]"

Função definida pelo usuário "=nomedafunção( )" Botão1.Onclick = "=MinhaFunção()"
 
 

Exibindo e Ocultando uma Mensagem de acordo com o Valor de um Controle Calculado

O exemplo a seguir exibe ou oculta uma mensagem de congratulações próxima a um controle calculado que mostra totais de vendas por vendedor. Em seções de relatório onde o total das vendas for maior que a meta de vendas, um rótulo denominado Mensagem exibirá a mensagem "Congratulações! Você atingiu sua meta de vendas" quando a seção for impressa em seções onde o total das vendas for menor que a meta de vendas, o rótulo ficará oculto.

Para testar o exemplo, adicione o procedimento de evento a seguir a um relatório que contenha um rótulo denominado Mensagem, uma caixa de texto denominada TotalGeral (um controle calculado que exibe o total de vendas) e uma seção detalhe denominada DetalheDasVendas.

Private Sub DetalheDasVendas_Format(Cancel As Integer, _

FormatCount As Integer)

Const conMetaDeVendas = 1000

If Me!TotalGeral > conMetaDeVendas Then

Me!Mensagem.Visible = True

Else

Me!Mensagem.Visible = False

End If

End Sub
 
 

Criar um Formulário e Botão de Comando Via Código e Dimensiona Controle para Mensagem Caber no Mesmo (Sizetofit)

O exemplo a seguir cria um novo formulário e um novo botão de comando no formulário. Depois, o procedimento define a propriedade Caption do controle e dimensiona o controle para que nele caiba a legenda.

Sub DimensionarNovoControle()

Dim frm As Form, ctl As Control

' Cria novo formulário.

Set frm = CreateForm

' Cria novo botão de comando.

Set ctl = CreateControl(frm.Name, acCommandButton, , , , 500, 500)

' Restaura formulário.

DoCmd.Restore

' Define a propriedade Caption do controle.

ctl.Caption = "Legenda de Controle Extremamente Longa"

' Dimensiona o controle para que nele caiba legenda.

ctl.SizeToFit

End Sub

Ocultando Controles

O exemplo a seguir oculta o campo CódigoDoProduto no modo Folha de Dados do formulário Produtos.

Forms!Produtos!CódigoDoProduto.ColumnHidden = -1

O próximo exemplo também oculta o campo CódigoDoProduto no modo Folha de dados da tabela Produtos. Para definir a propriedade ColumnHidden, o exemplo utiliza os procedimentos ExibirColuna e DefinirPropCampo, os quais estão no módulo padrão do banco de dados.

Dim dbs As Database

Set dbs = CurrentDb

ExibirColuna dbs.TableDefs!Produtos.Fields!CódigoDoProduto, False

Sub ExibirColuna(fldObjeto As Field, intExibir As Integer)

' Define a propriedade ColumnHidden.

DefinirPropCampo fldObjeto, "ColumnHidden", dbLong, Not intExibir

End Sub
 
 

Exemplo da Função Timer

Este exemplo utiliza a função Timer para pausar o aplicativo. O exemplo também utiliza DoEvents para submeter-se a outros processos durante a pausa.

Dim TempoDePausa, Início, Fim, TempoTotal

If (MsgBox("Pressione Sim para pausar por 5 segundos", 4)) = vbYes Then

TempoDePausa = 5 ' Define a duração.

Início = Timer ' Define a hora inicial.

Do While Timer < Início + TempoDePausa

DoEvents ' Submete-se a outros processos. Permite multitarefa

Loop

Fim = Timer ' Define a hora final.

TempoTotal = Fim - Início ' Calcula o tempo total.

MsgBox "Pausou por " & TempoTotal & " segundos"

Else

End

End If
 
 

OUTRO:

Dim TempoDePausa, Início, Fim, TempoTotal

TempoDePausa = InputBox ("Digite o Tempo de pausa")

Início = Timer ' Define a hora inicial.

Do While Timer < Início + TempoDePausa

DoEvents ' Submete-se a outros processos. Permite multitarefa

Loop

Fim = Timer ' Define a hora final.

TempoTotal = Fim - Início ' Calcula o tempo total.

MsgBox "Pausou por " & TempoTotal & " segundos"
 

Formatos numéricos definidos pelo usuário (função Format)

A tabela a seguir identifica caracteres que você pode utilizar para criar formatos numéricos definidos pelo usuário:

Caractere Descrição

Nenhum Exibe o número sem formatação.

(0) Espaço reservado para dígito. Exibe um dígito ou um zero. Se a expressão apresenta um dígito na posição onde o 0 aparece na seqüência de caracteres de formato, exibe-o; caso contrário, exibe um zero nessa posição.Se o número apresenta menos dígitos do que os zeros existentes (de qualquer lado do decimal) na expressão de formato, exibe zeros à esquerda ou à direita. Se o número apresenta mais dígitos à direita do separador decimal do que zeros à direita do separador decimal na expressão de formato, arredonda o número em tantas casas decimais quanto for o número de zeros. Se o número apresenta mais dígitos à esquerda do separador decimal do que zeros à esquerda do separador decimal na expressão de formato, exibe os dígitos extras sem modificação.

(#) Espaço reservado para dígito. Exibe um dígito ou nada. Se a expressão apresenta um dígito onde o # aparece na seqüência de caracteres de formato, exibe-o; caso contrário, não exibe nada nessa posição.Esse símbolo funciona como o espaço reservado para o dígito 0, exceto que os zeros à direita e à esquerda não são exibidos se o número apresentar o mesmo número de dígitos ou menos do que o número de caracteres # de cada lado do separador decimal na expressão de formato.

(.) Espaço reservado decimal. Em algumas localidades, uma vírgula é utilizada como separador decimal. O espaço reservado decimal determina quantos dígitos são exibidos à esquerda e à direita do separador decimal. Se a expressão de formato contém somente sinais numéricos à esquerda desse símbolo, números menores do que 1 começam com um separador decimal. Para exibir um zero à esquerda exibido com números fracionários, utilize 0 como o primeiro espaço reservado de dígito à esquerda do separador decimal. O caractere realmente utilizado como um espaço reservado decimal na saída formatada depende do Formato numérico reconhecido pelo seu sistema.

(%) Espaço reservado de porcentagem. A expressão é multiplicada por 100. O caractere de porcentagem (%) é inserido na mesma posição em que aparece na seqüência de caracteres de formato.

(,) Separador de milhar. Em algumas localidades, um ponto é utilizado como separador de milhar. O separador de milhar separa as centenas dos milhares dentro de um número com quatro ou mais posições à esquerda do separador decimal. A utilização padrão do separador de milhar é especificada se o formato contiver um separador de milhar cercado por espaços reservados para dígitos (0 ou #). Dois separadores de milhar adjacentes ou um separador de milhar imediatamente à esquerda do separador decimal (independente de o decimal ser ou não especificado) significa "escalonar o número dividindo-o por 1000 e arredondando se necessário." Por exemplo, você pode utilizar a seqüência de caracteres de formato "##0,," para representar 100 milhões como 100. Números menores do que 1 milhão são exibidos como 0. Dois separadores de milhar adjacentes em qualquer posição diferente de imediatamente à esquerda do separador decimal são tratados simplesmente como especificação da utilização de um separador de milhar. O caractere realmente utilizado como separador de milhar na saída formatada depende do Formato numérico reconhecido pelo seu sistema.

(:) Separador de tempo. Em algumas localidades, outros caracteres podem ser utilizados para representar o separador de tempo. O separador de tempo separa horas, minutos e segundos quando os valores de tempo são formatados. O caractere realmente utilizado como separador de tempo na saída formatada depende das definições de seu sistema.

(/) Separador de data. Em algumas localidades, outros caracteres podem ser utilizados para representar o separador de data. O separador de data separa o dia, o mês e o ano quando os valores de data são formatados. O caractere realmente utilizado como separador de data na saída formatada depende das definições de seu sistema.

(E- E+ e- e+) Formato científico. Se a expressão de formato contém pelo menos um espaço reservado para dígito (0 ou #) à direita de E-, E+, e-, ou e+, o número é exibido em formato científico e E ou e é inserido entre o número e seu expoente. O número de espaços reservados para dígitos à direita determina o número de dígitos no expoente. Utilize E- ou e- para colocar um sinal de menos ao lado de expoentes negativos. Utilize E+ ou e+ para colocar um sinal de menos ao lado de expoentes negativos e um sinal de mais ao lado de expoentes positivos.

- + $ ( ) Exibe um caractere literal. Para exibir um caractere diferente daqueles listados, anteceda-o com uma barra invertida (\) ou coloque-o entre aspas duplas (" ").

(\) Exibe o próximo caractere na seqüência de caracteres de formato. Para exibir um caractere que apresenta um significado especial como um caractere literal, anteceda-o com uma barra invertida (\). A barra invertida, na verdade, não é exibida. Utilizá-la é a mesma coisa que colocar o próximo caractere entre aspas duplas. Para exibir uma barra invertida, utilize duas barras invertidas (\\).Exemplos de caracteres que não podem ser exibidos como caracteres literais são os caracteres de formatação de data e hora (a, c, d, h, m, n, p, q, s, t, w, y, / e :), os caracteres de formatação numérica (#, 0, %, E, e, vírgula e ponto) e os caracteres de formatação da seqüência de caracteres (@, &, <, > e !).

("ABC") Exibe a seqüência de caracteres dentro de aspas duplas (" "). Para incluir uma seqüência de caracteres em format a partir do código, você deve utilizar Chr(34) para envolver o texto (34 é o código de caractere para uma aspa (")).
 
  1