VBA-Access_Dicas

Access Por ExemploAccessPorExemplo


VBA-ACCESS

VBA-ACCESS

Configurações e Otimizações

DoCmd  

Abrir Relatório
DoCmd.OpenReport “NomeRel”, acViewPreview
Abrir Relatório com filtro
DoCmd.OpenReport “NomeRel”, acViewPreview, , “CampoRel= ” & Me!CampoForm

Gerar Relatório em PDF
DoCmd.OutputTo acOutputReport, “Rel”, acFormatPDF, “c:\_Dsv\Rel.pdf”

Abrir Formulário
DoCmd.OpenForm “Nome Formuário”
Abrir Consulta
DoCmd.OpenQuery “NomeConsulta”, acNormal, acEdit

Atualizar
DoCmd.DoMenuItem acFormBar, acRecordsMenu, 5, , acMenuVer70


Comandos
Renomear   Name NomeOrigem As NomeDestino
CopiarFileCopy CaminhoOrigem, CaminhoDestino
DeletarIf Dir(NomeDestino) <> “” Then      
   Kill NomeDestino
End If

Eco ComandosDoCmd.SetWarnings False


Ribbon (Sim – Mostra comando no cabeçalho)
DoCmd.ShowToolbar “ribbon”, acToolbarYes
DoCmd.SelectObject acTable, , True


Ribbon (Não mostra comando no cabeçalho)
DoCmd.ShowToolbar “ribbon”, acToolbarNo
DoCmd.SelectObject acTable, , True
DoCmd.RunCommand acCmdWindowHide


Cores

Vermelho2037680
Azul Escuro9125192
Azul claro16711680
Verde 5540692
Verde claro3329330
Preto0
Amarelo65535
Branco16777215

Private Sub Detalhe_Paint()
If Me.Rnk = 1 Then
   Me.Rnk.ForeColor = 2037680  ‘ Vermelho
   Me.Rnk.FontBold = True
Else
   Me.Rnk.ForeColor = 0
   Me.Rnk.FontBold = False
End If
End Sub


Aplicativos externos – (Abrir calculadora)

Private Sub Comando_Click()
     Dim Calculadora As Variant
    Calculadora = Shell(“C:\Windows\System32\Calc.exe”, 1)
End Sub
———————————————————-


Gerar Relatório PDF – Individual – Um arquivo para cada Agente

Function PDF_ProduçãoDiáriaAnalítica() ‘ produção Diária – Analítico
DoCmd.SetWarnings False
Dim dbs As Database, qdf As QueryDef, rst, rsDt As Recordset
Dim i As Integer
Dim dtRel, TitRel, TitRel0, TitRel1, Pasta, Relatório As String
Set dbs = CurrentDb
DoCmd.RunSQL (“UPDATE Agente set x2 = false”)
DoCmd.RunSQL (“UPDATE tblDadosDiáriosEmp_01 INNER JOIN Agente ON tblDadosDiáriosEmp_01.[Chave J] = Agente.CHAVE SET Agente.x2 = Yes”) ‘********
DoCmd.RunSQL (“UPDATE Agente set x1 = false”)
Set rst = dbs.OpenRecordset(“qryAgenteImpressão01”)
Set rsDt = dbs.OpenRecordset(“Auxilio”) ‘************** DtDadosDiários
‘****Parâmetros do Relatório ********************************
Pasta = rsDt!PastaPDF
dtRel = Format(Day(rsDt!DtDadosDiários), “00”) & “-” & Format(Month(rsDt!DtDadosDiários), “00”) & “-” & Format(Year(rsDt!DtDadosDiários), “0000”)
Relatório = “971-DadosDiáriosEmpréstimos-Analítico”
TitRel0 = “ECF-Produção Diária – “
TitRel1 = Pasta & TitRel0 & dtRel
‘************************************************************
With rst
.MoveFirst
Do While Not .EOF
.Edit
.X1 = True
.Update
TitRel = TitRel1 & ” – ” & rst!NOME & ” – ” & rst!CHAVE
DoCmd.OutputTo acOutputReport, Relatório, acFormatPDF, TitRel & “.pdf”
DoCmd.Close acReport, Relatório
.Edit
.X1 = False
.Update
.MoveNext
Loop
End With
DoCmd.RunSQL (“UPDATE Agente set x1 = true”)
End Function



Formulário Inicial – Ocultar menu e objetos

Private Sub Form_Load()
DoCmd.SelectObject acForm, “frmUsuário”, True
DoCmd.RunCoMarca todos os registros

mmand acCmdWindowHide ‘ F11
Call ap_DisableShift
DoCmd.ShowToolbar “ribbon”, acToolbarNo



Funções VBA


Operações com Datas
Format() – DiaMêsAno – Partes da Data
format([data];”dd”) –> retorna o dia “dd”
format([data];”mm”) –> retorna o mês “mm”
format([data];”yyyy”) –> retorna o ano “aaaa”
format([data];”mmdd”) –> retorna o mês e dia “mmdd”
format([data];”yyyymmdd”) –> retorna o ano, mês,dia “yyyymmdd”

format([data];”yyyy-mm-dd”) –> retorna o ano, mês,dia “yyyy-mm-dd”



Retorna um intervalo de tempo entre duas datas.
dateDiff(“yyyy”,[Dat1], [Dat2])
– (Retorna nr de anos entre as duas datas)
dateDiff(“d”,[Dat1], [Dat2])
– (Retorna nr de dias entre as duas datas)


DateAdd(“m”, 1, xDat) (Adiciona 1 mês a xDat)
DateAdd(“d”, 1, xDat) (Adiciona 1 dia a xDat)
DateAdd(“yyyy”, 1, xDat) (Adiciona 1 ano a xDat)

VBA-ACCESS

DoCmd  

Abrir Relatório
DoCmd.OpenReport “NomeRel”, acViewPreview
Abrir Relatório com filtro
DoCmd.OpenReport “NomeRel”, acViewPreview, , “CampoRel= ” & Me!CampoForm

Gerar Relatório em PDF
DoCmd.OutputTo acOutputReport, “Rel”, acFormatPDF, “c:\_Dsv\Rel.pdf”

Abrir Formulário
DoCmd.OpenForm “Nome Formuário”
Abrir Consulta
DoCmd.OpenQuery “NomeConsulta”, acNormal, acEdit

Atualizar
DoCmd.DoMenuItem acFormBar, acRecordsMenu, 5, , acMenuVer70


Comandos
Renomear   Name NomeOrigem As NomeDestino
CopiarFileCopy CaminhoOrigem, CaminhoDestino
DeletarIf Dir(NomeDestino) <> “” Then      
   Kill NomeDestino
End If

Eco ComandosDoCmd.SetWarnings False


Ribbon (Sim – Mostra comando no cabeçalho)
DoCmd.ShowToolbar “ribbon”, acToolbarYes
DoCmd.SelectObject acTable, , True


Ribbon (Não mostra comando no cabeçalho)
DoCmd.ShowToolbar “ribbon”, acToolbarNo
DoCmd.SelectObject acTable, , True
DoCmd.RunCommand acCmdWindowHide


Cores

Vermelho2037680
Azul Escuro9125192
Azul claro16711680
Verde 5540692
Verde claro3329330
Preto0
Amarelo65535
Branco16777215

Private Sub Detalhe_Paint()
If Me.Rnk = 1 Then
   Me.Rnk.ForeColor = 2037680  ‘ Vermelho
   Me.Rnk.FontBold = True
Else
   Me.Rnk.ForeColor = 0
   Me.Rnk.FontBold = False
End If
End Sub


Aplicativos externos – (Abrir calculadora)

Private Sub Comando_Click()
     Dim Calculadora As Variant
    Calculadora = Shell(“C:\Windows\System32\Calc.exe”, 1)
End Sub
———————————————————-


Gerar Relatório PDF – Individual – Um arquivo para cada Agente

Function PDF_ProduçãoDiáriaAnalítica() ‘ produção Diária – Analítico
DoCmd.SetWarnings False
Dim dbs As Database, qdf As QueryDef, rst, rsDt As Recordset
Dim i As Integer
Dim dtRel, TitRel, TitRel0, TitRel1, Pasta, Relatório As String
Set dbs = CurrentDb
DoCmd.RunSQL (“UPDATE Agente set x2 = false”)
DoCmd.RunSQL (“UPDATE tblDadosDiáriosEmp_01 INNER JOIN Agente ON tblDadosDiáriosEmp_01.[Chave J] = Agente.CHAVE SET Agente.x2 = Yes”) ‘********
DoCmd.RunSQL (“UPDATE Agente set x1 = false”)
Set rst = dbs.OpenRecordset(“qryAgenteImpressão01”)
Set rsDt = dbs.OpenRecordset(“Auxilio”) ‘************** DtDadosDiários
‘****Parâmetros do Relatório ********************************
Pasta = rsDt!PastaPDF
dtRel = Format(Day(rsDt!DtDadosDiários), “00”) & “-” & Format(Month(rsDt!DtDadosDiários), “00”) & “-” & Format(Year(rsDt!DtDadosDiários), “0000”)
Relatório = “971-DadosDiáriosEmpréstimos-Analítico”
TitRel0 = “ECF-Produção Diária – “
TitRel1 = Pasta & TitRel0 & dtRel
‘************************************************************
With rst
.MoveFirst
Do While Not .EOF
.Edit
.X1 = True
.Update
TitRel = TitRel1 & ” – ” & rst!NOME & ” – ” & rst!CHAVE
DoCmd.OutputTo acOutputReport, Relatório, acFormatPDF, TitRel & “.pdf”
DoCmd.Close acReport, Relatório
.Edit
.X1 = False
.Update
.MoveNext
Loop
End With
DoCmd.RunSQL (“UPDATE Agente set x1 = true”)
End Function



Formulário Inicial – Ocultar menu e objetos

Private Sub Form_Load()
DoCmd.SelectObject acForm, “frmUsuário”, True
DoCmd.RunCoMarca todos os registros

mmand acCmdWindowHide ‘ F11
Call ap_DisableShift
DoCmd.ShowToolbar “ribbon”, acToolbarNo



Funções VBA

Format() – DiaMêsAno – Partes da Data

format(#15/05/2012#,”dd”) :::> retorna o dia 15

format(#15/05/2012#,”mm”) :::> retorna o mês 05

format(#15/05/2012#,”yyyy”) :::> retorna o ano 2012

format(#15/05/2012#,”mmdd”) :::> retorna o mês, seguido do dia 0515

Substituir([DataContratação];”.”;”/”)
– Substitui “.” por “/”, tantas vezes existam na string

Classificar Campo / Filtrar

– Classificar
Me.OrderByOn = True
Me.OrderBy = “CodOrc”     ou   ”CodOrc & Prefixo”

– Filtrar
txtTip1 = Me.txtTip
DoCmd.DoMenuItem acFormBar, acRecordsMenu, 5, , acMenuVer70
Me.Filter = “Tipo = forms!rubricas!txtTip1”
Me.FilterOn = True

Nome do Banco de dados

Set db = CurrentDb()
Set rs = db.OpenRecordset(“Auxílio”)
rs.Edit
rs!nr = Me.CodContrato
rs.Updatedb.Name

Private Sub RodapéDaPágina_Format(Cancel As Integer, FormatCount As Integer)
Dim db As Database
Set db = CurrentDb()
Me.txtEndS.Caption = db.Name
End Sub
obs: [txtEndS] é um Rótulo

Replace ou Substituir
Substituir([DataContratação];”.”;”/”)
– (Substitui “.” por “/”)
Substituir([Data Contratação];”.”;”“)
– (Remove “.”)

DoCmd.RunSQL

‘(Atribui à variável txt o valor da ChaveJ; Altera o campo txtVar da tabela Auxílio; Abre o formulário frmTesteEdição (filtrado pelo campo txtVar).

Obs: Não deve haver espaços entre ‘Apóstrofo’ e “Aspas”, pois seriam acrescidos à variável “txt”, no início e/ou no final. ‘” & txt & “‘

Private Sub NOME_DblClick(Cancel As Integer)

DoCmd.SetWarnings False

Dim txt As String

txt = Me.ChaveJ 

DoCmd.RunSQL (“UPDATE Auxílio set txtVar =‘” & txt & “‘“)

DoCmd.OpenForm “frmTesteEdição”, acNormal

End Sub

Public Function d1AAAAMM(xAAAAMM As String)
‘ Mostra o dia 1º do mês ref à string AAAAMM

Dim x1 As String

Dim y1 As Date

x1 = xAAAAMM

y1 = “01/” & Right(x1, 2) & “/” & Left(x1, 4)

d1AAAAMM = y1

End Function

———————————————

DoCmd.RunSQL

DoCmd.RunSQL (“DELETE * FROM Clientes”)
DoCmd.RunSQL (“UPDATE Age set x = false where age.tipo=’ “paa” ‘ “)
(paa é string)

xReg = Me.NomeRegional
DoCmd.RunSQL (“UPDATE qryAgente00 set x = True where qryAgente00.NomeRegional=’ ” & xReg & ” ‘ “)
(xReg é string)  (sem espações entre Apóstrofos e Aspas) 
 

DoCmd.RunSQL (“UPDATE qryAluguéis set qryAluguéis.X = true where qryAluguéis.Beneficiário = ‘” & Me.txtBeneficiário & “‘”)   ‘ txtBeneficiário = campo form
DoCmd.RunSQL (“INSERT Into tabDestino ( Camp1, Camp2 ) SELECT Camp1, Camp2 From ObjOrig”)

——————————————————-

yRG = Me.Rg

DoCmd.RunSQL (“UPDATE qryUF set x = true where qryUF.RG=’” & yRG & “‘ ” )

DoCmd.DoMenuItem acFormBar, acRecordsMenu, 5, , acMenuVer70

 Exportar para Excel

If MsgBox(“Confirma gerar Excel para ” & [NomeCliente] & “?”, vbYesNo, “Excel para Mala_Lista.xls”) = vbYes Then

DoCmd.TransferSpreadsheet acExport, 8, “qryCadastro”, _

CurrentProject.Path & “\” & “Mala_Lista” & “.xls”, True, “”

Else

MsgBox “Nao gerado”

End If

End Sub

Exemplo:
DoCmd.TransferSpreadsheet acExport, 8, "qry", "C:\_dsv\teste.xls", True, ""

LoadPicture

O exemplo a seguir utiliza a função LoadPicture para carregar um metarquivo em um controle ActiveX de um formulário Funcionários.

Sub ExibirGráfico()

Const strCaminhoBitmapsCon = “C:\Arquivos de Programas\Microsoft Office\Office\Bitmaps\Estilos\”

‘ Declara variáveis de objeto dos tipos Picture e Control.

Dim objFigura As Object, ctl As Control

‘ Define a variável Control para que se refira a um controle ActiveX no formulário.

Set ctl = Forms!Funcionários!AlgumControlePersonalizado

‘ Atribui o valor de retorno de LoadPicture ao objeto Picture.

Set objFigura = LoadPicture(strCaminhoBitmapsCon & “Globo.wmf”)

‘ Define a propriedade Picture de um controle ActiveX.

Set ctl.Picture = objFigura

End Sub

Macro

DoCmd.RunMacro “NomeMacro”

Rodar Consulta ( DoCmd.OpenQuery)
DoCmd.OpenQuery “qryAnoMês_Lançamento0”, acNormal

Abrir Formuário (DoCmd.OpenForm)
DoCmd.OpenForm stDocName, , , stLinkCriteria

Quebra de Página Condicional –
no Rodapé do Grupo onde acontece a quebra – (Nomear o objeto quebra com o nome “QuebraCondicional”

Private Sub RodapéDoGrupo0_Format(Cancel As Integer, FormatCount As Integer)

If Me.Page Mod 2 > 0 Then

Me.QuebraCondicional.Visible = True

Else

Me.QuebraCondicional.Visible = False

End If

End Sub

Ranking – Sql – (Na consulta , modo SQL)

SELECT DISTINCTROW t.Prefixo, t.TipoInfor, t.CodOrc, t.Ano, t.Mes, t.Tip, t.Obs, t.Prod, t.Dot, (select count(*) from [matriz] where obs>t.obs and chave=t.chave)+1 AS Rnk

FROM Matriz AS t ORDER BY t.Obs DESC;

Relatório Zebrado

Private Sub Detalhe_Print(Cancel As Integer, PrintCount As Integer)

dim grade as boolean

Me.Section(0).BackColor = IIf(GRADE, 14935011, 16777215)

GRADE = Not GRADE

End Sub

Caption de Relatório

Private Sub Report_Load()

DoCmd.OpenReport “NomeRelatório”, acViewPreview, “”, “”

Reports![ NomeRelatório].Caption = “Rótulo do Relatório –  ” & Me.MsRef

End Sub

SelectObject

O exemplo a seguir seleciona o formulário Clientes na janela Banco de Dados:

DoCmd.SelectObject acForm, “Clientes”, True

Select Case

SQL

UPDATE

UPDATE é especialmente útil quando você quer alterar vários registros ou quando os registros que você quer alterar estão em várias tabelas.

Você pode alterar vários campos ao mesmo tempo. O exemplo a seguir aumenta os valores de Quantia do Pedido em 10% e os valores de Frete em 3% para transportadores no Reino Unido (UK):

UPDATE Pedidos

SET QuantiaDoPedido = QuantiaDoPedido * 1.1,

Frete = Frete * 1.03

WHERE PaísDeDestino = ‘UK’;

Para testar os exemplos a seguir no Microsoft Access, crie primeiro uma nova consulta no banco de dados de exemplo Northwind. Feche a caixa de diálogo Mostrar Tabela sem especificar uma tabela ou consulta. Alterne para modo SQL, cole um exemplo individual na janela SQL e execute a consulta.

Aviso   Esses exemplos fazem alterações no banco de dados de exemplo Northwind. Antes de começar, talvez você deseje fazer uma cópia de backup do banco de dados de exemplo.

O exemplo a seguir altera os valores do Supervisor para 5 em todos os registros de funcionários que têm atualmente o valor 2 em Supervisor:

UPDATE Funcionários SET Supervisor = 5 WHERE Supervisor = 2;

O próximo exemplo aumenta em 10 por cento o PreçoUnitário de todos os produtos não-descontinuados do fornecedor 8:

UPDATE Produtos SET PreçoUnitário = PreçoUnitário * 1.1

WHERE CódigoDoFornecedor = 8 AND Descontinuado = No;

O exemplo a seguir reduz em 5 por cento o PreçoUnitário de todos os produtos não-descontinuados fornecidos pela Tokyo Traders. As tabelas Produtos e Fornecedores têm um relacionamento muitos-para-um.

UPDATE Fornecedores INNER JOIN Produtos

ON Fornecedores.CódigoDoFornecedor = Produtos.CódigoDoFornecedor SET PreçoUnitário = PreçoUnitário * .95

WHERE NomeDaEmpresa = ‘Tokyo Traders’ AND Descontinuado = No;

INSERT

INSERT INTO Clientes SELECT * FROM NovosClientes;

O próximo exemplo cria um novo registro na tabela Funcionários:

INSERT INTO Funcionários (Nome,Sobrenome, Cargo) VALUES (‘Paulo’, ‘Braga’, ‘Estagiário’);

O próximo exemplo seleciona todos os estagiários de uma suposta tabela Estagiários que tenham sido contratados há mais de 30 dias e adiciona seus registros à tabela Funcionários.

INSERT INTO Funcionários SELECT Estagiários.* FROM Estagiários WHERE DataDaContratação < Now() – 30;

Você pode utilizar a cláusula INSERT INTO para fazer backup de informações em seu banco de dados antes de ele ser alterado. Você pode, por exemplo, fazer backup de informações em uma tabela Funcionários imediatamente antes de um usuário fazer qualquer alteração aos dados dessa tabela.

DELETE

delete Remaneja.* from Remaneja

sql – db.execute (“update

Public Function TesteDelete()

Dim db As Database

Set db = CurrentDb()

Dim StrSQL$

Dim k#

StrSQL = “DELETE * FROM OrcObservado where MESANO=“ & Forms!frmCaptura!MES & Forms!frmCaptura!ANO & “AND SERET=1”

db.Execute (StrSQL)
‘db.Execute (“DELETE * FROM OrcObser

Dim db As Database

Set db = CurrentDb()

db.Execute (“UPDATE Produtos SET Produtos.X = Yes WHERE produtos.obs = ‘1’ “)

DoCmd.DoMenuItem acFormBar, acRecordsMenu, 5, , acMenuVer70

DoCmd.RunSQL (“DELETE * FROM Clientes”)

DoCmd.RunSQL (“UPDATE Age set check = false”)

DoCmd.RunSQL (“UPDATE tabCbo551 INNER JOIN Agente ON tabCbo551.Usuário = Agente.CHAVE SET Agente.x2 = Yes”)

Private Sub NR_REDE_DblClick(Cancel As Integer)

Dim txtRede As String

txtRede = NR_REDE

Dim db As Database

Set db = CurrentDb()

db.Execute (“update age set age.x = false”)

db.Execute (“update age set age.x = true where age.nr_rede = ‘“ & txtRede & “‘“)

DoCmd.DoMenuItem acFormBar, acRecordsMenu, 5, , acMenuVer70

End Sub


Form-ListaRelatoriosImpressao

Imprimir Relatórios Marcados

Private Sub cmdImprimeLote_Click()   ‘  Imprime Relatórios Marcados
DoCmd.SetWarnings False
DoCmd.RunSQL (“UPDATE [Sis-Relatorios-Balancete] set Dt = ” “)
DoCmd.DoMenuItem acFormBar, acRecordsMenu, 5, , acMenuVer70
Dim xComando As String
Dim db As Database
Dim rs As Recordset
Set db = CurrentDb()
Set rs = db.OpenRecordset(“qry-Sis-Relatorios-Balancete”)  ‘ *
Do While Not rs.EOF
    xComando = rs!Rel
    DoCmd.OpenReport xComando, acPreview
    DoCmd.PrintOut acPrintAll, , , acHigh, 1, True
    DoCmd.Close acReport, xComando
    rs.Edit
    rs!dt = “*”
    rs!dt = Now()
    rs.Update
    rs.MoveNext
Loop
MsgBox “Concluído”, vbOKOnly, “Concluído”
End Sub
=======================

Observação: Consulta [Sis-Relatorios-Balancete] - Filtra relatórios escolhidos
SELECT [Sis-Relatorios-Balancete].RelX, [Sis-Relatorios-Balancete].Endereço, [Sis-Relatorios-Balancete].Ordem, [Sis-Relatorios-Balancete].Dt
FROM [Sis-Relatorios-Balancete]
WHERE ((([Sis-Relatorios-Balancete].RelX)=Yes));

———————————————————————————-

InStr ou EmSeq
Localiza uma sequencia de caracteres em um campo.
Retorna um número referente à posição da sequencia no campo. Zero para negativo. No exemplo abaixo, o nº 1 indica que a sequencia será procurada a partir do primeiro caractere do campo.

EmSeq(1;[CampoPesquisado];”Sequencia pesquisada”)

Teclas Especiais

Option Compare DatabaseOption Explicit

‘No exemplo a seguir, a propriedade KeyPreview está definida

‘como True (–1) no procedimento de evento Load do formulário.

‘Isto faz com que o formulário receba eventos de teclado antes

‘que estes sejam recebidos por qualquer outro controle.

‘Em seguida, o evento KeyDown de formulário verifica o valor

‘do argumento KeyCode para determinar se as teclas F2, F3 ou F4

‘foram pressionadas.

Private Sub Form_Load()

Me.KeyPreview = True

End Sub

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)

Select Case KeyCode

Case vbKeyF2

‘ Processa eventos da tecla F2.

MsgBox “Voce pressionou a tecla F2”

Case vbKeyF3

‘ Processa eventos da tecla F3.

MsgBox “Voce pressionou a tecla F3”

Case vbKeyF4

‘ Processa eventos da tecla F4.

MsgBox “Voce pressionou a tecla F4”

Case vbKeyDown

MsgBox “Voce pressionou Seta para baixo”

Case vbKeyPageDown

MsgBox “Voce pressionou Page Down”

Case Else

MsgBox “Voce nao pressionou as teclas solicitadas.”

End Select

End Sub

‘Você pode utilizar as constantes a seguir para representar

‘valores de teclado. Essas constantes podem ser utilizadas

‘no Microsoft Access em procedimentos de evento para os eventos

‘KeyDown e KeyUp.

‘vbKey0         vbKeyF5             vbKeyNumPad4

‘vbKey1         vbKeyF6             vbKeyNumPad5

‘vbKey2         vbKeyF7             vbKeyNumPad6

‘vbKey3         vbKeyF8             vbKeyNumPad7

‘vbKey4         vbKeyF9             vbKeyNumPad8

‘vbKey5         vbKeyF10            vbKeyNumPad9

‘vbKey6         vbKeyF11            vbKeyO

‘vbKey7         vbKeyF12            vbKeyP

‘vbKey8         vbKeyF13            vbKeyPageDown

‘vbKey9         vbKeyF14            vbKeyPageUp

‘vbKeyA         vbKeyF15            vbKeyPause

‘vbKeyAdd       vbKeyF16            vbKeyPrint

‘vbKeyB         vbKeyG              vbKeyQ

‘vbKeyBack      vbKeyH              vbKeyR

‘vbKeyC         vbKeyHelp           vbKeyRButton

‘vbKeyCancel    vbKeyHome           vbKeyReturn

‘vbKeyCapital   vbKeyI              vbKeyRight

‘vbKeyClear     vbKeyInsert         vbKeyS

‘vbKeyControl   vbKeyJ              vbKeySelect

‘vbKeyD         vbKeyK              vbKeySeparator

‘vbKeyDecimal   vbKeyL              vbKeyShift

‘vbKeyDelete    vbKeyLButton        vbKeySnapshot

‘vbKeyDivide    vbKeyLeft           vbKeySpace

‘vbKeyDown      vbKeyM              vbKeySubtract

‘vbKeyE         vbKeyMButton        vbKeyT

‘vbKeyEnd       vbKeyMenu           vbKeyTab

‘vbKeyEscape    vbKeyMultiply       vbKeyU

‘vbKeyExecute   vbKeyN              vbKeyUp

‘vbKeyF         vbKeyNumLock        vbKeyV

‘vbKeyF1        vbKeyNumPad0        vbKeyW

‘vbKeyF2        vbKeyNumPad1        vbKeyX

‘vbKeyF3        vbKeyNumPad2        vbKeyY

‘vbKeyF4        vbKeyNumPad3        vbKeyZ

Comandos Importantes

DoCmd.OpenForm stDocName, , , stLinkCriteria

DoCmd.OpenReport stDocName, acPreview

DoCmd.Close

DoCmd.GoToRecord , , acFirst

DoCmd.GoToRecord , , acPrevious

DoCmd.GoToRecord , , acNext

DoCmd.GoToRecord , , acLast

DoCmd.GoToRecord , , acNewRec

DoCmd.RunMacro stDocName

DoCmd.OpenQuery stDocName, acNormal, acEdit

‘————————————————

(Marca todos os registros com SIM se o primeiro registro for NÃo e vice-versa)

If Me.X = True Then
      DoCmd.RunSQL (“UPDATE Grupos set x = false”)
Else
     DoCmd.RunSQL (“UPDATE Grupos set x = true”)
End If

DoCmd.DoMenuItem acFormBar, acRecordsMenu, 5, , acMenuVer70

‘——————————————————-

Access 2007
DoCmd.SetWarnings False
DoCmd.ShowToolbar “ribbon”, acToolbarNo

———————————————————–

SQL – Insert

Private Sub Comando20_Click()

On Error GoTo Err_Comando20_Click

Dim SQL, sql01, sql02, sql03, sql04, sql05, sql06, sql07, sql08, sql09, sql10 As String

DoCmd.RunSQL (“DELETE * FROM Agente”)

DoCmd.RunSQL (“DELETE * FROM tabCbo551”)

‘*******************************************

sql01 = “INSERT INTO Agente ( CHAVE, CodRegional, CodFunção, CodSupervisor,”

sql02 = “CodGerente, NOME, Piso, TaxaRemuneração, Redutor, TabelaComissão, TabelaComissãoCta,”

sql03 = “CPF, AGÊNCIA, PREFIXO, CONTA, VENCIMENTO, [E-MAIL], TELEFONE, CELULAR, x )”

sql04 = “SELECT Agente1.CHAVE, Agente1.CodRegional, Agente1.CodFunção,”

sql05 = “Agente1.CodSupervisor, Agente1.CodGerente, Agente1.NOME, Agente1.Piso,”

sql06 = “Agente1.TaxaRemuneração, Agente1.Redutor, Agente1.TabelaComissão,”

sql07 = “Agente1.TabelaComissãoCta, Agente1.CPF, Agente1.AGÊNCIA, Agente1.PREFIXO,”

sql08 = “Agente1.CONTA, Agente1.VENCIMENTO, Agente1.[E-MAIL], Agente1.TELEFONE,”

sql09 = “Agente1.CELULAR, Agente1.x “

sql10 = “FROM Agente1”

SQL = sql01 & sql02 & sql03 & sql04 & sql05 & sql06 & sql07 & sql08 & sql09 & sql10

‘MsgBox SQL

CurrentDb.Execute SQL

GERAR PDF INDIVIDUAL
txtAp = Ap
txtCondômino = Condômino
DoCmd.OpenReport “Ap_Pagamentos_02”, acPreview
Reports![Ap_Pagamentos_02].Caption = “Ed PREVI-Extrato – Ap: “ & txtAp & “ – “ & txtCondômino

GERAR PDF INDIVIDUAL

Function PDF_ComEmpAgente()

MsgBox “Marque o PDF Creator como impressora padrão (Painel de Controle”

Dim dbs As Database, qdf As QueryDef, rst, rsDt, rsrub As Recordset

Dim i As Integer

Set dbs = CurrentDb

DoCmd.RunSQL (“UPDATE Agente set x = false”)

Set rst = dbs.OpenRecordset(“qryAgenteImpressão01”)

Set rsDt = dbs.OpenRecordset(“qryCbo551Mes”)

With rst

.MoveFirst

Do While Not .EOF

.Edit

.X = True

.Update

DoCmd.OpenReport “qryComissão-Agente”, acViewPreview, ““, “([Nome]=’“ & rst!NOME & “‘)”

Reports![qryComissão-Agente].Caption = rsDt!ms2 & “ – “ & rst!NOME & “ – “ & rst!CHAVE

DoCmd.PrintOut acPages, 2, 10, acHigh, 1, True

DoCmd.Close acReport, “qryComissão-Agente”

.Edit

.X = False

.Update

.MoveNext

Loop

End With

End Function

Funções

Public Function NrRegTab(xTab As String)  ‘ Qte de Registros em Tabela
Dim db As Database
Dim rs As Recordset
Dim nr As Integer
Set db = CurrentDb()
Set rs = db.OpenRecordset(xTab)
NrRegTab = rs.RecordCount
End Function

Public Function AAAAMM(xDt)   ‘ Ano – Mês de uma data

If xDt & “*” <> “*” Then
AAAAMM = Year(xDt) & “-” & Format(Month(xDt), “00”)
Else
AAAAMM = “0000-00”
End If
End Function

Public Function AAAMMDD(xDt) ‘ Ano – Mês – Dia de uma data
If xDt & “*” <> “*” Then
aaaammdd = Year(xDt) & Format(Month(xDt), “00”) & Format(Day(xDt), “00”)
Else
aaaammdd = “0000000”
End If
End Function

Public Function MMDD(xDt) ‘ Mês Dia de uma data
If xDt & “*” <> “*” Then
MMDD = Format(Month(xDt), “00”) & Format(Day(xDt), “00”)
Else
MMDD = “0000”
End If
End Function

Mostra o dia 1º do mês ref à string AAAAMM, em formato de data
Public Function d1AAAAMM(xAAAAMM As String) ‘
Dim x1 As String
Dim y1 As Date
x1 = xAAAAMM
y1 = “01/” & Right(x1, 2) & “/” & Left(x1, 4)
d1AAAAMM = y1
End Function

———————————–
Incrementa em um mês a string AAAAMM
Public Function Mais1AAAAMM(xDat As String)
Dim y01, y02, yDat As Date
y01 = d1AAAAMM(xDat)  ‘  fornece o dia 1º do mês ref. à string
y02 = y01 + 33
y02 = (y02 – Day(y02)) + 1
Mais1AAAAMM = Year(y02) & Format(Month(y02), “00”)
End Function
—————————————–

Diminui em um mês a string AAAAMM
Public Function Menos1AAAAMM(xDat As String)
Dim y01, y02 As Date
y01 = d1AAAAMM(xDat)
y02 = y01 – 1
y02 = (y02 – Day(y02)) + 1
Menos1AAAAMM = Year(y02) & Format(Month(y02), “00”)
End Function

FERIADOSMÓVEIS
DTDESCRIÇÃO
17/02/2015Ter Carnaval
16/02/2015Seg Carnaval
03/04/2015Paixão de Cristo
04/06/2015Corpus Cristi
19/06/2014Corpus Cristi
18/04/2014Paixão de Cristo
03/03/2014Seg Carnaval
04/03/2014Ter Carnaval
FERIADOSFIXOS
XMESXDIADESCRIÇÃO
11Confraternização Universal
325Libertação Escravos Ceará
421Tiradentes
51Dia do Trabalho
815Nossa Senhora Assunção
97Independência
1012Nossa Senhora Aparecida
112Finados
1115Proclamação da República
1224Natal

Public Function Feriado(xDt)  ‘ Feriados
Dim xQt1, xMs, xDi, yMes, xAno As Integer
Dim AnoMes As Long
Dim xDat As String
Dim db As Database
Dim rsF, rsM As Recordset  ‘ Feriados Fixos / Móveis
Set db = CurrentDb()
Set rsF = db.OpenRecordset(“FeriadosFixos”)
Set rsM = db.OpenRecordset(“FeriadosMóveis”)

Feriado = ““
‘**********************************************************
Do While Not rsF.EOF()   ‘ Feriados Fixos
If MMDD(xDt) = Format(rsF!xMes, “00”) & Format(rsF!xDia, “00”) Then
Feriado = rsF!Descrição
Exit Do
End If
rsF.MoveNext
Loop
‘***********************************************************************
If Feriado = ““ Then
Do While Not rsM.EOF()   ‘ Feriados Móveis
If xDt = rsM!dt Then
Feriado = rsM!Descrição
Exit Do
End If
rsM.MoveNext
Loop
End If
‘***********************************************************************
End Function
—————————————————————–

Public Function Testa()
Dim cTeste As String

cTeste = ddmmaaaa(Date)
cTeste = aaaammdd(Date)
cTeste = dSemana(Date)
cTeste = cMes(Date, 0)
cTeste = cMes(Date, 1)
cTeste = retiraStr(“1.234.840,50”, “.”)
cTeste = Zeros(“85”, 4)
cTeste = Zeros(13, 8)
cTeste = iEquiv(30, 360, 10)

End Function

Public Function ddmmaaaa(yDat)  ‘Retorna a data em formato ddmmaaaa
ddmmaaaa = Right(“0” + LTrim(Str(Day(yDat))), 2) + Right(“0” + LTrim(Str(Month(yDat))), 2) + Right(Str(Year(yDat)), 4)
End Function

—————————————————————————–

Public Function aaaammdd(yDat)  ‘Retorna a data em formato aaaammdd
aaaammdd = Right(Str(Year(yDat)), 4) + Right(“0” + LTrim(Str(Month(yDat))), 2) + Right(“0” + LTrim(Str(Day(yDat))), 2)
End Function

—————————————————————————–
Public Function dSemana(yDat)  ‘ Retorna dia da semana abreviado
dSemana = IIf(WeekDay(yDat) = 1, “Dom”, IIf(WeekDay(yDat) = 2, “Seg”, IIf(WeekDay(yDat) = 3, “Ter”, IIf(WeekDay(yDat) = 4, “Qua”, IIf(WeekDay(yDat) = 5, “Qui”, IIf(WeekDay(yDat) = 6, “Sex”, “Sab”))))))
End Function

Public Function cMes(yDat, nTipo)   ‘ Retorna nome do mês inteiro ou abreviado
‘ nTipo: 0 = abreviado, 1 = completo
ReDim aMes(12)
aMes(1) = (“janeiro”)
aMes(2) = (“fevereiro”)
aMes(3) = (“março”)
aMes(4) = (“abril”)
aMes(5) = (“maio”)
aMes(6) = (“junho”)
aMes(7) = (“julho”)
aMes(8) = (“Agosto”)
aMes(9) = (“setembro”)
aMes(10) = (“outubro”)
aMes(11) = (“novembro”)
aMes(12) = (“dezembro”)
cMes = IIf(nTipo = 0, Left(aMes(Month(yDat)), 3), aMes(Month(yDat)))
‘nMes = IIf(Month(yDat) = 1, “Jan”, IIf(Month(yDat) = 2, “Fev”, IIf(Month(yDat) = 3, “Mar”, IIf(Month(yDat) = 4, “Abr”, IIf(Month(yDat) = 5, “Mai”, IIf(Month(yDat) = 6, “Jun”, IIf(Month(yDat) = 7, “Jul”, IIf(Month(yDat) = 8, “Ago”, IIf(Month(yDat) = 9, “Set”, IIf(Month(yDat) = 10, “Out”, IIf(Month(yDat) = 11, “Nov”, “Dez”)))))))))))
End Function
—————————————————————————–
Public Function iEquiv(yn1, yn2, yi)   ‘ Taxa Equivalente
‘ Período Conhecido, Período Desconhecido, Taxa
iEquiv = (((yi / 100) + 1) ^ (yn2 / yn1) – 1) * 100
End Function
—————————————————————————–
Public Function retiraStr(ByVal varStr As Variant, ByVal strChar As Variant) As String

‘Retira da string a substring indicada, quantas vezes ela apararecer.
‘Recebe string e substring a retirar.

Dim wCharPos As Integer
Dim varTemp As Variant

On Error Resume Next

If IsNull(varStr) Then
retiraStr = ““
Exit Function
Else
If IsNull(strChar) Then strChar = ““
End If

varTemp = ““
wCharPos = InStr(varStr, strChar)
Do Until wCharPos = 0
varTemp = varTemp & Left(varStr, wCharPos – 1)
varStr = Right(varStr, Len(varStr) – Len(strChar) – wCharPos + 1)
wCharPos = InStr(varStr, strChar)
Loop
retiraStr = varTemp & varStr

End Function

—————————————————————————–

‘ Acrescenta zeros à esquerda
Public Function Zeros(pal As Variant, nt As Integer) As String  
Dim nr,zr,i As Integer
Dim pl As String
nr = Len(pal) ‘ numero de caracteres da string
zr = nt – nr  ‘ quantidade de zeros acrescentar
pl = pal      ‘ string resultante
For i = 1 To zr  ‘ acrescentar zeros na frente da string
pl = “0” & pl
Next
Zeros = pl
End Function
———————————————————————
Public Function TempoDecorrido(yDat)
Dim xAno As Double
Dim xMes As Double
Dim xDia As Double
xAno = Int((Date – yDat) / 365)
xMes = Int(((((Date – yDat) / 365) – Int((Date – yDat) / 365))) * 12)
xDia = Int(((((((Date – yDat) / 365) – Int((Date – yDat) / 365))) * 12) – Int((((((Date – yDat) / 365) – Int((Date – yDat) / 365))) * 12))) * 30)
TempoDecorrido = IIf(xAno > 0, Trim(Str(xAno)) & “a”, ““) & IIf(xMes > 0, Trim(Str(xMes)) & “m”, ““) & IIf(xDia > 0, Trim(Str(xDia)) & “d”, ““)
End Function
———————————————————————–
Public Function LocalizaSequencia(xContinente, xSequencia As String) As Integer
Dim iSequencia, TamSequencia, TamContinente As Integer
TamContinente = Len(xContinente)
TamSequencia = Len(xSequencia)
‘MsgBox TamContinente & “ – “ & TamSequencia
LocalizaSequencia = False
For iSequencia = 1 To (TamContinente – TamSequencia + 1)
‘ MsgBox “[“ & Mid(xContinente, iSequencia, TamSequencia) & “] – “ & iSequencia, , xSequencia
If Mid(xContinente, iSequencia, TamSequencia) = xSequencia Then
LocalizaSequencia = iSequencia
Exit For
End If
Next iSequencia

End Function
——————————————————————
Public Function Extenso(Valor As Variant) As String   ‘ Extenso

ReDim cWord(1 To 6) As String, Cifra(6, 2) As String
Dim WExt As String, WExten As String, CodVar As String
Dim Counter As Integer, aa As Integer, Wsa As Integer

WExt = ““
WExten = ““
Counter = 1
aa = 1

For Wsa = 1 To 6
cWord(Wsa) = ““
Next

If VarType(Valor) = 8 Then
Valor = Val(Valor)
End If

CodVar = Format(Valor, “000000000000000.00”)
CodVar = Left(CodVar, 15) & “0” & Right(CodVar, 2)

Cifra(1, 1) = “TRILHAO”
Cifra(1, 2) = “TRILHOES”
Cifra(2, 1) = “BILHAO”
Cifra(2, 2) = “BILHOES”
Cifra(3, 1) = “MILHAO”
Cifra(3, 2) = “MILHOES”
Cifra(4, 1) = “MIL”
Cifra(4, 2) = “MIL”

Cifra(5, 1) = “REAL”
Cifra(5, 2) = “REAIS”
Cifra(6, 1) = “CENTAVO”
Cifra(6, 2) = “CENTAVOS”

While Counter <= 6
WExt = Extenso_Aux(Mid(CodVar, aa, 3))
If Not VarEmpty(WExt) Then
WExt = WExt + IIf(WExt = “UM “, Cifra(Counter, 1), Cifra(Counter, 2))
cWord(Counter) = WExt
End If
aa = aa + 3
Counter = Counter + 1
Wend

WExten = ““

For aa = 1 To 5
WExten = WExten + IIf(Not VarEmpty(cWord(aa)), cWord(aa), ““)
If aa < 5 Then If Not VarEmpty(cWord(aa + 1)) And Not VarEmpty(WExten) Then WExten = WExten & “, “ End If End If Next If VarEmpty(cWord(5)) And VarEmpty(cWord(4)) And Not VarEmpty(WExten) Then WExten = WExten + (“ DE “ + Cifra(5, 2)) ElseIf VarEmpty(cWord(5)) And Not VarEmpty(cWord(4)) Then WExten = WExten + (“ “ + IIf(Left(cWord(4), 3) = “UM”, Cifra(5, 1), Cifra(5, 2))) End If ‘Verifica Centavos WExten = WExten + IIf(Not VarEmpty(cWord(6)), IIf(Not VarEmpty(WExten), “ E “ + cWord(6), cWord(6)), ““) Extenso = WExten End Function Public Function VarEmpty(C As Variant) As Boolean Dim VTy As Integer Dim MyVar As String VTy = VarType(MyVar) If VTy = vbEmpty Or VTy = vbNull Then VarEmpty = True ElseIf VTy >= vbInteger And VTy <= vbCurrency Then
If C = 0 Then
VarEmpty = True
End If
ElseIf VTy = vbDate Then
If C = “  /  /  “ Then
VarEmpty = True
End If
ElseIf VTy = vbString Then
MyVar = StrTran(C, Chr(0), Chr(32))
If Len(Trim(MyVar)) = 0 Then
VarEmpty = True
End If
End If

End Function
————————————————————————–
Public Function StrTran(Texto As Variant, Acha As Variant, Troca As Variant) As String

Dim InicioString As Integer
Dim FinalString As Integer
Dim Temp As String

If VarType(Texto) <> vbString Or VarType(Acha) <> vbString Or VarType(Troca) <> vbString Then
If VarType(Texto) = vbNull Then
Temp = ““
Else
Temp = Texto
End If
ElseIf InStr(Texto, Acha) = 0 Then
Temp = Texto
Else
Do
InicioString = InStr(Texto, Acha)
FinalString = InicioString + IIf(Len(Acha) = 0, 1, Len(Acha))
Texto = Mid(Texto, 1, InicioString – 1) & Troca & Mid(Texto, FinalString)
Loop While InStr(Texto, Acha) <> 0
Temp = Texto
End If
StrTran = Temp
End Function

Public Function Extenso_Aux(ByVal Part As String) As String

Dim Posi As Integer, ii As Integer
Dim cWordExtenso As String, C1 As String, C2 As String, C3 As String
ReDim A_Num(1 To 37) As String

A_Num(1) = “001UM “
A_Num(2) = “002DOIS “
A_Num(3) = “003TRES “
A_Num(4) = “004QUATRO “
A_Num(5) = “005CINCO “
A_Num(6) = “006SEIS “
A_Num(7) = “007SETE “
A_Num(8) = “008OITO “
A_Num(9) = “009NOVE “
A_Num(10) = “010DEZ “
A_Num(11) = “011ONZE “
A_Num(12) = “012DOZE “
A_Num(13) = “013TREZE “
A_Num(14) = “014QUATORZE “
A_Num(15) = “015QUINZE “
A_Num(16) = “016DEZESSEIS “
A_Num(17) = “017DEZESSETE “
A_Num(18) = “018DEZOITO “
A_Num(19) = “019DEZENOVE “
A_Num(20) = “020VINTE “
A_Num(21) = “030TRINTA “
A_Num(22) = “040QUARENTA “
A_Num(23) = “050CINQUENTA “
A_Num(24) = “060SESSENTA “
A_Num(25) = “070SETENTA “
A_Num(26) = “080OITENTA “
A_Num(27) = “090NOVENTA “
A_Num(28) = “100CEM “
A_Num(29) = “200DUZENTOS “
A_Num(30) = “300TREZENTOS “
A_Num(31) = “400QUATROCENTOS “
A_Num(32) = “500QUINHENTOS “
A_Num(33) = “600SEISCENTOS “
A_Num(34) = “700SETECENTOS “
A_Num(35) = “800OITOCENTOS “
A_Num(36) = “900NOVECENTOS “
A_Num(37) = “000 “
C1 = Left(Part, 1)
C2 = Mid(Part, 2, 1)
C3 = Right(Part, 1)
Posi = 0
cWordExtenso = ““
For ii = 1 To 37
If Left(A_Num(ii), 3) = Part Then
Posi = ii
Exit For
End If
Next
If Posi <> 0 Then
cWordExtenso = Mid(A_Num(Posi), 4)
Else
Posi = 0
For ii = 1 To 37
If Left(A_Num(ii), 3) = Format(Val(Part) – Val(C3), “000”) Then
Posi = ii
Exit For
End If
Next
If Posi <> 0 Then
cWordExtenso = Mid(A_Num(Posi), 4) + “E “
If cWordExtenso = “CEM E “ And Val(C3) <> 0 Then
cWordExtenso = “CENTO E “
End If
Posi = 0
For ii = 1 To 37
If Left(A_Num(ii), 3) = Format(Val(C3), “000”) Then
Posi = ii
Exit For
End If
Next
cWordExtenso = cWordExtenso + Mid(A_Num(Posi), 4)
Else
Posi = 0
For ii = 1 To 37
If Left(A_Num(ii), 3) = Format(Val(Part) – Val((C2 + C3)), “000”) Then
Posi = ii
Exit For
End If
Next
cWordExtenso = Mid(A_Num(Posi), 4) + “E “
If cWordExtenso = “CEM E “ Then
cWordExtenso = “CENTO E “
End If
Posi = 0
For ii = 1 To 37
If Left(A_Num(ii), 3) = Format(Val((C2 + C3)), “000”) Then
Posi = ii
Exit For
End If
Next
If Posi <> 0 Then
cWordExtenso = cWordExtenso + Mid(A_Num(Posi), 4)
Else
Posi = 0
For ii = 1 To 37
If Left(A_Num(ii), 3) = Format(Val((C2 + C3)) – Val(C3), “000”) Then
Posi = ii
Exit For
End If
Next
cWordExtenso = cWordExtenso + Mid(A_Num(Posi), 4) + “E “
Posi = 0
For ii = 1 To 37
If Left(A_Num(ii), 3) = Format(Val(C3), “000”) Then
Posi = ii
Exit For
End If
Next
cWordExtenso = cWordExtenso + Mid(A_Num(Posi), 4)
End If
End If
End If

Extenso_Aux = cWordExtenso

End Function

Valida CPF

Function FU_ValidaCPF(CPF As String) As Integer

Dim soma As Integer
Dim Resto As Integer
Dim i As Integer

‘Valida
argumento
If Len(CPF) <> 11 Then
FU_ValidaCPF = False
Exit Function
End If

soma
= 0
For i = 1 To 9
soma = soma + Val(Mid$(CPF, i, 1)) * (11 – i)
Next i
Resto = 11 – (soma – (Int(soma / 11) * 11))
If Resto = 10 Or Resto = 11 Then Resto = 0
If Resto <> Val(Mid$(CPF, 10, 1)) Then
FU_ValidaCPF = False
Exit Function
End If

soma
= 0
For i = 1 To 10
soma = soma + Val(Mid$(CPF, i, 1)) * (12 – i)
Next i
Resto = 11 – (soma – (Int(soma / 11) * 11))
If Resto = 10 Or Resto = 11 Then Resto = 0
If Resto <> Val(Mid$(CPF, 11, 1)) Then
FU_ValidaCPF = False
Exit Function
End If

FU_ValidaCPF
= True

End
Function

Function FU_ValidaCGC(CGC As String) As Integer
Dim retorno, a, j, i, d1, d2
If Len(CGC) = 8 And Val(CGC) > 0 Then
a = 0
j = 0
d1 = 0
For i = 1 To 7
a = Val(Mid(CGC, i, 1))
If (i Mod 2) <> 0 Then
a = a * 2
End If
If a > 9 Then
j = j + Int(a / 10) + (a Mod 10)
Else
j = j + a
End If
Next i
d1 = IIf((j Mod 10) <> 0, 10 – (j Mod 10), 0)
If d1 = Val(Mid(CGC, 8, 1)) Then
FU_ValidaCGC = True
Else
FU_ValidaCGC = False
End If
Else
If Len(CGC) = 14 And Val(CGC) > 0 Then
a = 0
i = 0
d1 = 0
d2 = 0
j = 5
For i = 1 To 12 Step 1
a = a + (Val(Mid(CGC, i, 1)) * j)
j = IIf(j > 2, j – 1, 9)
Next i
a = a Mod 11
d1 = IIf(a > 1, 11 – a, 0)
a = 0
i = 0
j = 6
For i = 1 To 13 Step 1
a = a + (Val(Mid(CGC, i, 1)) * j)
j = IIf(j > 2, j – 1, 9)
Next i
a = a Mod 11
d2 = IIf(a > 1, 11 – a, 0)
If (d1 = Val(Mid(CGC, 13, 1)) And d2 = Val(Mid(CGC, 14, 1))) Then
FU_ValidaCGC = True
Else
FU_ValidaCGC = False
End If
Else
FU_ValidaCGC = False
End If
End If
End Function

Substituir([DataContratação];”.”;”/”)
– Substitui “.” por “/”, tantas vezes existam na string

Classificar Campo / Filtrar

– Classificar
Me.OrderByOn = True
Me.OrderBy = “CodOrc”     ou   ”CodOrc & Prefixo”

– Filtrar
txtTip1 = Me.txtTip
DoCmd.DoMenuItem acFormBar, acRecordsMenu, 5, , acMenuVer70
Me.Filter = “Tipo = forms!rubricas!txtTip1”
Me.FilterOn = True

Nome do Banco de dados

Set db = CurrentDb()
Set rs = db.OpenRecordset(“Auxílio”)
rs.Edit
rs!nr = Me.CodContrato
rs.Updatedb.Name

Private Sub RodapéDaPágina_Format(Cancel As Integer, FormatCount As Integer)
Dim db As Database
Set db = CurrentDb()
Me.txtEndS.Caption = db.Name
End Sub
obs: [txtEndS] é um Rótulo

Replace ou Substituir
Substituir([DataContratação];”.”;”/”)
– (Substitui “.” por “/”)
Substituir([Data Contratação];”.”;”“)
– (Remove “.”)

DoCmd.RunSQL

‘(Atribui à variável txt o valor da ChaveJ; Altera o campo txtVar da tabela Auxílio; Abre o formulário frmTesteEdição (filtrado pelo campo txtVar).

Obs: Não deve haver espaços entre ‘Apóstrofo’ e “Aspas”, pois seriam acrescidos à variável “txt”, no início e/ou no final. ‘” & txt & “‘

Private Sub NOME_DblClick(Cancel As Integer)

DoCmd.SetWarnings False

Dim txt As String

txt = Me.ChaveJ 

DoCmd.RunSQL (“UPDATE Auxílio set txtVar =‘” & txt & “‘“)

DoCmd.OpenForm “frmTesteEdição”, acNormal

End Sub

Public Function d1AAAAMM(xAAAAMM As String)
‘ Mostra o dia 1º do mês ref à string AAAAMM

Dim x1 As String

Dim y1 As Date

x1 = xAAAAMM

y1 = “01/” & Right(x1, 2) & “/” & Left(x1, 4)

d1AAAAMM = y1

End Function

———————————————

DoCmd.RunSQL

DoCmd.RunSQL (“DELETE * FROM Clientes”)
DoCmd.RunSQL (“UPDATE Age set x = false where age.tipo=’ “paa” ‘ “)
(paa é string)

xReg = Me.NomeRegional
DoCmd.RunSQL (“UPDATE qryAgente00 set x = True where qryAgente00.NomeRegional=’ ” & xReg & ” ‘ “)
(xReg é string)  (sem espações entre Apóstrofos e Aspas) 
 

DoCmd.RunSQL (“UPDATE qryAluguéis set qryAluguéis.X = true where qryAluguéis.Beneficiário = ‘” & Me.txtBeneficiário & “‘”)   ‘ txtBeneficiário = campo form
DoCmd.RunSQL (“INSERT Into tabDestino ( Camp1, Camp2 ) SELECT Camp1, Camp2 From ObjOrig”)

——————————————————-

yRG = Me.Rg

DoCmd.RunSQL (“UPDATE qryUF set x = true where qryUF.RG=’” & yRG & “‘ ” )

DoCmd.DoMenuItem acFormBar, acRecordsMenu, 5, , acMenuVer70

 Exportar para Excel

If MsgBox(“Confirma gerar Excel para ” & [NomeCliente] & “?”, vbYesNo, “Excel para Mala_Lista.xls”) = vbYes Then

DoCmd.TransferSpreadsheet acExport, 8, “qryCadastro”, _

CurrentProject.Path & “\” & “Mala_Lista” & “.xls”, True, “”

Else

MsgBox “Nao gerado”

End If

End Sub

Exemplo:
DoCmd.TransferSpreadsheet acExport, 8, "qry", "C:\_dsv\teste.xls", True, ""

LoadPicture

O exemplo a seguir utiliza a função LoadPicture para carregar um metarquivo em um controle ActiveX de um formulário Funcionários.

Sub ExibirGráfico()

Const strCaminhoBitmapsCon = “C:\Arquivos de Programas\Microsoft Office\Office\Bitmaps\Estilos\”

‘ Declara variáveis de objeto dos tipos Picture e Control.

Dim objFigura As Object, ctl As Control

‘ Define a variável Control para que se refira a um controle ActiveX no formulário.

Set ctl = Forms!Funcionários!AlgumControlePersonalizado

‘ Atribui o valor de retorno de LoadPicture ao objeto Picture.

Set objFigura = LoadPicture(strCaminhoBitmapsCon & “Globo.wmf”)

‘ Define a propriedade Picture de um controle ActiveX.

Set ctl.Picture = objFigura

End Sub

Macro

DoCmd.RunMacro “NomeMacro”

Rodar Consulta ( DoCmd.OpenQuery)
DoCmd.OpenQuery “qryAnoMês_Lançamento0”, acNormal

Abrir Formuário (DoCmd.OpenForm)
DoCmd.OpenForm stDocName, , , stLinkCriteria

Quebra de Página Condicional –
no Rodapé do Grupo onde acontece a quebra – (Nomear o objeto quebra com o nome “QuebraCondicional”

Private Sub RodapéDoGrupo0_Format(Cancel As Integer, FormatCount As Integer)

If Me.Page Mod 2 > 0 Then

Me.QuebraCondicional.Visible = True

Else

Me.QuebraCondicional.Visible = False

End If

End Sub

Ranking – Sql – (Na consulta , modo SQL)

SELECT DISTINCTROW t.Prefixo, t.TipoInfor, t.CodOrc, t.Ano, t.Mes, t.Tip, t.Obs, t.Prod, t.Dot, (select count(*) from [matriz] where obs>t.obs and chave=t.chave)+1 AS Rnk

FROM Matriz AS t ORDER BY t.Obs DESC;

Relatório Zebrado

Private Sub Detalhe_Print(Cancel As Integer, PrintCount As Integer)

dim grade as boolean

Me.Section(0).BackColor = IIf(GRADE, 14935011, 16777215)

GRADE = Not GRADE

End Sub

Caption de Relatório

Private Sub Report_Load()

DoCmd.OpenReport “NomeRelatório”, acViewPreview, “”, “”

Reports![ NomeRelatório].Caption = “Rótulo do Relatório –  ” & Me.MsRef

End Sub

SelectObject

O exemplo a seguir seleciona o formulário Clientes na janela Banco de Dados:

DoCmd.SelectObject acForm, “Clientes”, True

Select Case

SQL

UPDATE

UPDATE é especialmente útil quando você quer alterar vários registros ou quando os registros que você quer alterar estão em várias tabelas.

Você pode alterar vários campos ao mesmo tempo. O exemplo a seguir aumenta os valores de Quantia do Pedido em 10% e os valores de Frete em 3% para transportadores no Reino Unido (UK):

UPDATE Pedidos

SET QuantiaDoPedido = QuantiaDoPedido * 1.1,

Frete = Frete * 1.03

WHERE PaísDeDestino = ‘UK’;

Para testar os exemplos a seguir no Microsoft Access, crie primeiro uma nova consulta no banco de dados de exemplo Northwind. Feche a caixa de diálogo Mostrar Tabela sem especificar uma tabela ou consulta. Alterne para modo SQL, cole um exemplo individual na janela SQL e execute a consulta.

Aviso   Esses exemplos fazem alterações no banco de dados de exemplo Northwind. Antes de começar, talvez você deseje fazer uma cópia de backup do banco de dados de exemplo.

O exemplo a seguir altera os valores do Supervisor para 5 em todos os registros de funcionários que têm atualmente o valor 2 em Supervisor:

UPDATE Funcionários SET Supervisor = 5 WHERE Supervisor = 2;

O próximo exemplo aumenta em 10 por cento o PreçoUnitário de todos os produtos não-descontinuados do fornecedor 8:

UPDATE Produtos SET PreçoUnitário = PreçoUnitário * 1.1

WHERE CódigoDoFornecedor = 8 AND Descontinuado = No;

O exemplo a seguir reduz em 5 por cento o PreçoUnitário de todos os produtos não-descontinuados fornecidos pela Tokyo Traders. As tabelas Produtos e Fornecedores têm um relacionamento muitos-para-um.

UPDATE Fornecedores INNER JOIN Produtos

ON Fornecedores.CódigoDoFornecedor = Produtos.CódigoDoFornecedor SET PreçoUnitário = PreçoUnitário * .95

WHERE NomeDaEmpresa = ‘Tokyo Traders’ AND Descontinuado = No;

INSERT

INSERT INTO Clientes SELECT * FROM NovosClientes;

O próximo exemplo cria um novo registro na tabela Funcionários:

INSERT INTO Funcionários (Nome,Sobrenome, Cargo) VALUES (‘Paulo’, ‘Braga’, ‘Estagiário’);

O próximo exemplo seleciona todos os estagiários de uma suposta tabela Estagiários que tenham sido contratados há mais de 30 dias e adiciona seus registros à tabela Funcionários.

INSERT INTO Funcionários SELECT Estagiários.* FROM Estagiários WHERE DataDaContratação < Now() – 30;

Você pode utilizar a cláusula INSERT INTO para fazer backup de informações em seu banco de dados antes de ele ser alterado. Você pode, por exemplo, fazer backup de informações em uma tabela Funcionários imediatamente antes de um usuário fazer qualquer alteração aos dados dessa tabela.

DELETE

delete Remaneja.* from Remaneja

sql – db.execute (“update

Public Function TesteDelete()

Dim db As Database

Set db = CurrentDb()

Dim StrSQL$

Dim k#

StrSQL = “DELETE * FROM OrcObservado where MESANO=“ & Forms!frmCaptura!MES & Forms!frmCaptura!ANO & “AND SERET=1”

db.Execute (StrSQL)
‘db.Execute (“DELETE * FROM OrcObser

Dim db As Database

Set db = CurrentDb()

db.Execute (“UPDATE Produtos SET Produtos.X = Yes WHERE produtos.obs = ‘1’ “)

DoCmd.DoMenuItem acFormBar, acRecordsMenu, 5, , acMenuVer70

DoCmd.RunSQL (“DELETE * FROM Clientes”)

DoCmd.RunSQL (“UPDATE Age set check = false”)

DoCmd.RunSQL (“UPDATE tabCbo551 INNER JOIN Agente ON tabCbo551.Usuário = Agente.CHAVE SET Agente.x2 = Yes”)

Private Sub NR_REDE_DblClick(Cancel As Integer)

Dim txtRede As String

txtRede = NR_REDE

Dim db As Database

Set db = CurrentDb()

db.Execute (“update age set age.x = false”)

db.Execute (“update age set age.x = true where age.nr_rede = ‘“ & txtRede & “‘“)

DoCmd.DoMenuItem acFormBar, acRecordsMenu, 5, , acMenuVer70

End Sub


Form-ListaRelatoriosImpressao

Imprimir Relatórios Marcados

Private Sub cmdImprimeLote_Click()   ‘  Imprime Relatórios Marcados
DoCmd.SetWarnings False
DoCmd.RunSQL (“UPDATE [Sis-Relatorios-Balancete] set Dt = ” “)
DoCmd.DoMenuItem acFormBar, acRecordsMenu, 5, , acMenuVer70
Dim xComando As String
Dim db As Database
Dim rs As Recordset
Set db = CurrentDb()
Set rs = db.OpenRecordset(“qry-Sis-Relatorios-Balancete”)  ‘ *
Do While Not rs.EOF
    xComando = rs!Rel
    DoCmd.OpenReport xComando, acPreview
    DoCmd.PrintOut acPrintAll, , , acHigh, 1, True
    DoCmd.Close acReport, xComando
    rs.Edit
    rs!dt = “*”
    rs!dt = Now()
    rs.Update
    rs.MoveNext
Loop
MsgBox “Concluído”, vbOKOnly, “Concluído”
End Sub
=======================

Observação: Consulta [Sis-Relatorios-Balancete] - Filtra relatórios escolhidos
SELECT [Sis-Relatorios-Balancete].RelX, [Sis-Relatorios-Balancete].Endereço, [Sis-Relatorios-Balancete].Ordem, [Sis-Relatorios-Balancete].Dt
FROM [Sis-Relatorios-Balancete]
WHERE ((([Sis-Relatorios-Balancete].RelX)=Yes));


———————————————————————————-

InStr ou EmSeq
Localiza uma sequencia de caracteres em um campo.
Retorna um número referente à posição da sequencia no campo. Zero para negativo. No exemplo abaixo, o nº 1 indica que a sequencia será procurada a partir do primeiro caractere do campo.

EmSeq(1;[CampoPesquisado];”Sequencia pesquisada”)

Teclas Especiais

Option Compare DatabaseOption Explicit

‘No exemplo a seguir, a propriedade KeyPreview está definida

‘como True (–1) no procedimento de evento Load do formulário.

‘Isto faz com que o formulário receba eventos de teclado antes

‘que estes sejam recebidos por qualquer outro controle.

‘Em seguida, o evento KeyDown de formulário verifica o valor

‘do argumento KeyCode para determinar se as teclas F2, F3 ou F4

‘foram pressionadas.

Private Sub Form_Load()

Me.KeyPreview = True

End Sub

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)

Select Case KeyCode

Case vbKeyF2

‘ Processa eventos da tecla F2.

MsgBox “Voce pressionou a tecla F2”

Case vbKeyF3

‘ Processa eventos da tecla F3.

MsgBox “Voce pressionou a tecla F3”

Case vbKeyF4

‘ Processa eventos da tecla F4.

MsgBox “Voce pressionou a tecla F4”

Case vbKeyDown

MsgBox “Voce pressionou Seta para baixo”

Case vbKeyPageDown

MsgBox “Voce pressionou Page Down”

Case Else

MsgBox “Voce nao pressionou as teclas solicitadas.”

End Select

End Sub

‘Você pode utilizar as constantes a seguir para representar

‘valores de teclado. Essas constantes podem ser utilizadas

‘no Microsoft Access em procedimentos de evento para os eventos

‘KeyDown e KeyUp.

‘vbKey0         vbKeyF5             vbKeyNumPad4

‘vbKey1         vbKeyF6             vbKeyNumPad5

‘vbKey2         vbKeyF7             vbKeyNumPad6

‘vbKey3         vbKeyF8             vbKeyNumPad7

‘vbKey4         vbKeyF9             vbKeyNumPad8

‘vbKey5         vbKeyF10            vbKeyNumPad9

‘vbKey6         vbKeyF11            vbKeyO

‘vbKey7         vbKeyF12            vbKeyP

‘vbKey8         vbKeyF13            vbKeyPageDown

‘vbKey9         vbKeyF14            vbKeyPageUp

‘vbKeyA         vbKeyF15            vbKeyPause

‘vbKeyAdd       vbKeyF16            vbKeyPrint

‘vbKeyB         vbKeyG              vbKeyQ

‘vbKeyBack      vbKeyH              vbKeyR

‘vbKeyC         vbKeyHelp           vbKeyRButton

‘vbKeyCancel    vbKeyHome           vbKeyReturn

‘vbKeyCapital   vbKeyI              vbKeyRight

‘vbKeyClear     vbKeyInsert         vbKeyS

‘vbKeyControl   vbKeyJ              vbKeySelect

‘vbKeyD         vbKeyK              vbKeySeparator

‘vbKeyDecimal   vbKeyL              vbKeyShift

‘vbKeyDelete    vbKeyLButton        vbKeySnapshot

‘vbKeyDivide    vbKeyLeft           vbKeySpace

‘vbKeyDown      vbKeyM              vbKeySubtract

‘vbKeyE         vbKeyMButton        vbKeyT

‘vbKeyEnd       vbKeyMenu           vbKeyTab

‘vbKeyEscape    vbKeyMultiply       vbKeyU

‘vbKeyExecute   vbKeyN              vbKeyUp

‘vbKeyF         vbKeyNumLock        vbKeyV

‘vbKeyF1        vbKeyNumPad0        vbKeyW

‘vbKeyF2        vbKeyNumPad1        vbKeyX

‘vbKeyF3        vbKeyNumPad2        vbKeyY

‘vbKeyF4        vbKeyNumPad3        vbKeyZ

Comandos Importantes

DoCmd.OpenForm stDocName, , , stLinkCriteria

DoCmd.OpenReport stDocName, acPreview

DoCmd.Close

DoCmd.GoToRecord , , acFirst

DoCmd.GoToRecord , , acPrevious

DoCmd.GoToRecord , , acNext

DoCmd.GoToRecord , , acLast

DoCmd.GoToRecord , , acNewRec

DoCmd.RunMacro stDocName

DoCmd.OpenQuery stDocName, acNormal, acEdit

‘————————————————

(Marca todos os registros com SIM se o primeiro registro for NÃo e vice-versa)

If Me.X = True Then
      DoCmd.RunSQL (“UPDATE Grupos set x = false”)
Else
     DoCmd.RunSQL (“UPDATE Grupos set x = true”)
End If

DoCmd.DoMenuItem acFormBar, acRecordsMenu, 5, , acMenuVer70

‘——————————————————-

Access 2007
DoCmd.SetWarnings False
DoCmd.ShowToolbar “ribbon”, acToolbarNo

———————————————————–

SQL – Insert

Private Sub Comando20_Click()

On Error GoTo Err_Comando20_Click

Dim SQL, sql01, sql02, sql03, sql04, sql05, sql06, sql07, sql08, sql09, sql10 As String

DoCmd.RunSQL (“DELETE * FROM Agente”)

DoCmd.RunSQL (“DELETE * FROM tabCbo551”)

‘*******************************************

sql01 = “INSERT INTO Agente ( CHAVE, CodRegional, CodFunção, CodSupervisor,”

sql02 = “CodGerente, NOME, Piso, TaxaRemuneração, Redutor, TabelaComissão, TabelaComissãoCta,”

sql03 = “CPF, AGÊNCIA, PREFIXO, CONTA, VENCIMENTO, [E-MAIL], TELEFONE, CELULAR, x )”

sql04 = “SELECT Agente1.CHAVE, Agente1.CodRegional, Agente1.CodFunção,”

sql05 = “Agente1.CodSupervisor, Agente1.CodGerente, Agente1.NOME, Agente1.Piso,”

sql06 = “Agente1.TaxaRemuneração, Agente1.Redutor, Agente1.TabelaComissão,”

sql07 = “Agente1.TabelaComissãoCta, Agente1.CPF, Agente1.AGÊNCIA, Agente1.PREFIXO,”

sql08 = “Agente1.CONTA, Agente1.VENCIMENTO, Agente1.[E-MAIL], Agente1.TELEFONE,”

sql09 = “Agente1.CELULAR, Agente1.x “

sql10 = “FROM Agente1”

SQL = sql01 & sql02 & sql03 & sql04 & sql05 & sql06 & sql07 & sql08 & sql09 & sql10

‘MsgBox SQL

CurrentDb.Execute SQL

GERAR PDF INDIVIDUAL
txtAp = Ap
txtCondômino = Condômino
DoCmd.OpenReport “Ap_Pagamentos_02”, acPreview
Reports![Ap_Pagamentos_02].Caption = “Ed PREVI-Extrato – Ap: “ & txtAp & “ – “ & txtCondômino

GERAR PDF INDIVIDUAL

Function PDF_ComEmpAgente()

MsgBox “Marque o PDF Creator como impressora padrão (Painel de Controle”

Dim dbs As Database, qdf As QueryDef, rst, rsDt, rsrub As Recordset

Dim i As Integer

Set dbs = CurrentDb

DoCmd.RunSQL (“UPDATE Agente set x = false”)

Set rst = dbs.OpenRecordset(“qryAgenteImpressão01”)

Set rsDt = dbs.OpenRecordset(“qryCbo551Mes”)

With rst

.MoveFirst

Do While Not .EOF

.Edit

.X = True

.Update

DoCmd.OpenReport “qryComissão-Agente”, acViewPreview, ““, “([Nome]=’“ & rst!NOME & “‘)”

Reports![qryComissão-Agente].Caption = rsDt!ms2 & “ – “ & rst!NOME & “ – “ & rst!CHAVE

DoCmd.PrintOut acPages, 2, 10, acHigh, 1, True

DoCmd.Close acReport, “qryComissão-Agente”

.Edit

.X = False

.Update

.MoveNext

Loop

End With

End Function

Funções

Public Function NrRegTab(xTab As String)  ‘ Qte de Registros em Tabela
Dim db As Database
Dim rs As Recordset
Dim nr As Integer
Set db = CurrentDb()
Set rs = db.OpenRecordset(xTab)
NrRegTab = rs.RecordCount
End Function

Public Function AAAAMM(xDt)   ‘ Ano – Mês de uma data

If xDt & “*” <> “*” Then
AAAAMM = Year(xDt) & “-” & Format(Month(xDt), “00”)
Else
AAAAMM = “0000-00”
End If
End Function

Public Function AAAMMDD(xDt) ‘ Ano – Mês – Dia de uma data
If xDt & “*” <> “*” Then
aaaammdd = Year(xDt) & Format(Month(xDt), “00”) & Format(Day(xDt), “00”)
Else
aaaammdd = “0000000”
End If
End Function

Public Function MMDD(xDt) ‘ Mês Dia de uma data
If xDt & “*” <> “*” Then
MMDD = Format(Month(xDt), “00”) & Format(Day(xDt), “00”)
Else
MMDD = “0000”
End If
End Function

Mostra o dia 1º do mês ref à string AAAAMM, em formato de data
Public Function d1AAAAMM(xAAAAMM As String) ‘
Dim x1 As String
Dim y1 As Date
x1 = xAAAAMM
y1 = “01/” & Right(x1, 2) & “/” & Left(x1, 4)
d1AAAAMM = y1
End Function

———————————–
Incrementa em um mês a string AAAAMM
Public Function Mais1AAAAMM(xDat As String)
Dim y01, y02, yDat As Date
y01 = d1AAAAMM(xDat)  ‘  fornece o dia 1º do mês ref. à string
y02 = y01 + 33
y02 = (y02 – Day(y02)) + 1
Mais1AAAAMM = Year(y02) & Format(Month(y02), “00”)
End Function
—————————————–

Diminui em um mês a string AAAAMM
Public Function Menos1AAAAMM(xDat As String)
Dim y01, y02 As Date
y01 = d1AAAAMM(xDat)
y02 = y01 – 1
y02 = (y02 – Day(y02)) + 1
Menos1AAAAMM = Year(y02) & Format(Month(y02), “00”)
End Function

FERIADOSMÓVEIS
DT DESCRIÇÃO
17/02/2015 Ter Carnaval
16/02/2015 Seg Carnaval
03/04/2015 Paixão de Cristo
04/06/2015 Corpus Cristi
19/06/2014 Corpus Cristi
18/04/2014 Paixão de Cristo
03/03/2014 Seg Carnaval
04/03/2014 Ter Carnaval

FERIADOSFIXOS
XMES XDIA DESCRIÇÃO
1 1 Confraternização Universal
3 25 Libertação Escravos Ceará
4 21 Tiradentes
5 1 Dia do Trabalho
8 15 Nossa Senhora Assunção
9 7 Independência
10 12 Nossa Senhora Aparecida
11 2 Finados
11 15 Proclamação da República
12 24 Natal

Public Function Feriado(xDt)  ‘ Feriados
Dim xQt1, xMs, xDi, yMes, xAno As Integer
Dim AnoMes As Long
Dim xDat As String
Dim db As Database
Dim rsF, rsM As Recordset  ‘ Feriados Fixos / Móveis
Set db = CurrentDb()
Set rsF = db.OpenRecordset(“FeriadosFixos”)
Set rsM = db.OpenRecordset(“FeriadosMóveis”)

Feriado = ““
‘**********************************************************
Do While Not rsF.EOF()   ‘ Feriados Fixos
If MMDD(xDt) = Format(rsF!xMes, “00”) & Format(rsF!xDia, “00”) Then
Feriado = rsF!Descrição
Exit Do
End If
rsF.MoveNext
Loop
‘***********************************************************************
If Feriado = ““ Then
Do While Not rsM.EOF()   ‘ Feriados Móveis
If xDt = rsM!dt Then
Feriado = rsM!Descrição
Exit Do
End If
rsM.MoveNext
Loop
End If
‘***********************************************************************
End Function
—————————————————————–

Public Function Testa()
Dim cTeste As String

cTeste = ddmmaaaa(Date)
cTeste = aaaammdd(Date)
cTeste = dSemana(Date)
cTeste = cMes(Date, 0)
cTeste = cMes(Date, 1)
cTeste = retiraStr(“1.234.840,50”, “.”)
cTeste = Zeros(“85”, 4)
cTeste = Zeros(13, 8)
cTeste = iEquiv(30, 360, 10)

End Function

Public Function ddmmaaaa(yDat)  ‘Retorna a data em formato ddmmaaaa
ddmmaaaa = Right(“0” + LTrim(Str(Day(yDat))), 2) + Right(“0” + LTrim(Str(Month(yDat))), 2) + Right(Str(Year(yDat)), 4)
End Function

—————————————————————————–

Public Function aaaammdd(yDat)  ‘Retorna a data em formato aaaammdd
aaaammdd = Right(Str(Year(yDat)), 4) + Right(“0” + LTrim(Str(Month(yDat))), 2) + Right(“0” + LTrim(Str(Day(yDat))), 2)
End Function

—————————————————————————–
Public Function dSemana(yDat)  ‘ Retorna dia da semana abreviado
dSemana = IIf(WeekDay(yDat) = 1, “Dom”, IIf(WeekDay(yDat) = 2, “Seg”, IIf(WeekDay(yDat) = 3, “Ter”, IIf(WeekDay(yDat) = 4, “Qua”, IIf(WeekDay(yDat) = 5, “Qui”, IIf(WeekDay(yDat) = 6, “Sex”, “Sab”))))))
End Function

Public Function cMes(yDat, nTipo)   ‘ Retorna nome do mês inteiro ou abreviado
‘ nTipo: 0 = abreviado, 1 = completo
ReDim aMes(12)
aMes(1) = (“janeiro”)
aMes(2) = (“fevereiro”)
aMes(3) = (“março”)
aMes(4) = (“abril”)
aMes(5) = (“maio”)
aMes(6) = (“junho”)
aMes(7) = (“julho”)
aMes(8) = (“Agosto”)
aMes(9) = (“setembro”)
aMes(10) = (“outubro”)
aMes(11) = (“novembro”)
aMes(12) = (“dezembro”)
cMes = IIf(nTipo = 0, Left(aMes(Month(yDat)), 3), aMes(Month(yDat)))
‘nMes = IIf(Month(yDat) = 1, “Jan”, IIf(Month(yDat) = 2, “Fev”, IIf(Month(yDat) = 3, “Mar”, IIf(Month(yDat) = 4, “Abr”, IIf(Month(yDat) = 5, “Mai”, IIf(Month(yDat) = 6, “Jun”, IIf(Month(yDat) = 7, “Jul”, IIf(Month(yDat) = 8, “Ago”, IIf(Month(yDat) = 9, “Set”, IIf(Month(yDat) = 10, “Out”, IIf(Month(yDat) = 11, “Nov”, “Dez”)))))))))))
End Function
—————————————————————————–
Public Function iEquiv(yn1, yn2, yi)   ‘ Taxa Equivalente
‘ Período Conhecido, Período Desconhecido, Taxa
iEquiv = (((yi / 100) + 1) ^ (yn2 / yn1) – 1) * 100
End Function
—————————————————————————–
Public Function retiraStr(ByVal varStr As Variant, ByVal strChar As Variant) As String

‘Retira da string a substring indicada, quantas vezes ela apararecer.
‘Recebe string e substring a retirar.

Dim wCharPos As Integer
Dim varTemp As Variant

On Error Resume Next

If IsNull(varStr) Then
retiraStr = ““
Exit Function
Else
If IsNull(strChar) Then strChar = ““
End If

varTemp = ““
wCharPos = InStr(varStr, strChar)
Do Until wCharPos = 0
varTemp = varTemp & Left(varStr, wCharPos – 1)
varStr = Right(varStr, Len(varStr) – Len(strChar) – wCharPos + 1)
wCharPos = InStr(varStr, strChar)
Loop
retiraStr = varTemp & varStr

End Function

—————————————————————————–

‘ Acrescenta zeros à esquerda
Public Function Zeros(pal As Variant, nt As Integer) As String  
Dim nr,zr,i As Integer
Dim pl As String
nr = Len(pal) ‘ numero de caracteres da string
zr = nt – nr  ‘ quantidade de zeros acrescentar
pl = pal      ‘ string resultante
For i = 1 To zr  ‘ acrescentar zeros na frente da string
pl = “0” & pl
Next
Zeros = pl
End Function
———————————————————————
Public Function TempoDecorrido(yDat)
Dim xAno As Double
Dim xMes As Double
Dim xDia As Double
xAno = Int((Date – yDat) / 365)
xMes = Int(((((Date – yDat) / 365) – Int((Date – yDat) / 365))) * 12)
xDia = Int(((((((Date – yDat) / 365) – Int((Date – yDat) / 365))) * 12) – Int((((((Date – yDat) / 365) – Int((Date – yDat) / 365))) * 12))) * 30)
TempoDecorrido = IIf(xAno > 0, Trim(Str(xAno)) & “a”, ““) & IIf(xMes > 0, Trim(Str(xMes)) & “m”, ““) & IIf(xDia > 0, Trim(Str(xDia)) & “d”, ““)
End Function
———————————————————————–
Public Function LocalizaSequencia(xContinente, xSequencia As String) As Integer
Dim iSequencia, TamSequencia, TamContinente As Integer
TamContinente = Len(xContinente)
TamSequencia = Len(xSequencia)
‘MsgBox TamContinente & “ – “ & TamSequencia
LocalizaSequencia = False
For iSequencia = 1 To (TamContinente – TamSequencia + 1)
‘ MsgBox “[“ & Mid(xContinente, iSequencia, TamSequencia) & “] – “ & iSequencia, , xSequencia
If Mid(xContinente, iSequencia, TamSequencia) = xSequencia Then
LocalizaSequencia = iSequencia
Exit For
End If
Next iSequencia

End Function
——————————————————————
Public Function Extenso(Valor As Variant) As String   ‘ Extenso

ReDim cWord(1 To 6) As String, Cifra(6, 2) As String
Dim WExt As String, WExten As String, CodVar As String
Dim Counter As Integer, aa As Integer, Wsa As Integer

WExt = ““
WExten = ““
Counter = 1
aa = 1

For Wsa = 1 To 6
cWord(Wsa) = ““
Next

If VarType(Valor) = 8 Then
Valor = Val(Valor)
End If

CodVar = Format(Valor, “000000000000000.00”)
CodVar = Left(CodVar, 15) & “0” & Right(CodVar, 2)

Cifra(1, 1) = “TRILHAO”
Cifra(1, 2) = “TRILHOES”
Cifra(2, 1) = “BILHAO”
Cifra(2, 2) = “BILHOES”
Cifra(3, 1) = “MILHAO”
Cifra(3, 2) = “MILHOES”
Cifra(4, 1) = “MIL”
Cifra(4, 2) = “MIL”

Cifra(5, 1) = “REAL”
Cifra(5, 2) = “REAIS”
Cifra(6, 1) = “CENTAVO”
Cifra(6, 2) = “CENTAVOS”

While Counter <= 6
WExt = Extenso_Aux(Mid(CodVar, aa, 3))
If Not VarEmpty(WExt) Then
WExt = WExt + IIf(WExt = “UM “, Cifra(Counter, 1), Cifra(Counter, 2))
cWord(Counter) = WExt
End If
aa = aa + 3
Counter = Counter + 1
Wend

WExten = ““

For aa = 1 To 5
WExten = WExten + IIf(Not VarEmpty(cWord(aa)), cWord(aa), ““)
If aa < 5 Then If Not VarEmpty(cWord(aa + 1)) And Not VarEmpty(WExten) Then WExten = WExten & “, “ End If End If Next If VarEmpty(cWord(5)) And VarEmpty(cWord(4)) And Not VarEmpty(WExten) Then WExten = WExten + (“ DE “ + Cifra(5, 2)) ElseIf VarEmpty(cWord(5)) And Not VarEmpty(cWord(4)) Then WExten = WExten + (“ “ + IIf(Left(cWord(4), 3) = “UM”, Cifra(5, 1), Cifra(5, 2))) End If ‘Verifica Centavos WExten = WExten + IIf(Not VarEmpty(cWord(6)), IIf(Not VarEmpty(WExten), “ E “ + cWord(6), cWord(6)), ““) Extenso = WExten End Function Public Function VarEmpty(C As Variant) As Boolean Dim VTy As Integer Dim MyVar As String VTy = VarType(MyVar) If VTy = vbEmpty Or VTy = vbNull Then VarEmpty = True ElseIf VTy >= vbInteger And VTy <= vbCurrency Then
If C = 0 Then
VarEmpty = True
End If
ElseIf VTy = vbDate Then
If C = “  /  /  “ Then
VarEmpty = True
End If
ElseIf VTy = vbString Then
MyVar = StrTran(C, Chr(0), Chr(32))
If Len(Trim(MyVar)) = 0 Then
VarEmpty = True
End If
End If

End Function
————————————————————————–
Public Function StrTran(Texto As Variant, Acha As Variant, Troca As Variant) As String

Dim InicioString As Integer
Dim FinalString As Integer
Dim Temp As String

If VarType(Texto) <> vbString Or VarType(Acha) <> vbString Or VarType(Troca) <> vbString Then
If VarType(Texto) = vbNull Then
Temp = ““
Else
Temp = Texto
End If
ElseIf InStr(Texto, Acha) = 0 Then
Temp = Texto
Else
Do
InicioString = InStr(Texto, Acha)
FinalString = InicioString + IIf(Len(Acha) = 0, 1, Len(Acha))
Texto = Mid(Texto, 1, InicioString – 1) & Troca & Mid(Texto, FinalString)
Loop While InStr(Texto, Acha) <> 0
Temp = Texto
End If
StrTran = Temp
End Function

Public Function Extenso_Aux(ByVal Part As String) As String

Dim Posi As Integer, ii As Integer
Dim cWordExtenso As String, C1 As String, C2 As String, C3 As String
ReDim A_Num(1 To 37) As String

A_Num(1) = “001UM “
A_Num(2) = “002DOIS “
A_Num(3) = “003TRES “
A_Num(4) = “004QUATRO “
A_Num(5) = “005CINCO “
A_Num(6) = “006SEIS “
A_Num(7) = “007SETE “
A_Num(8) = “008OITO “
A_Num(9) = “009NOVE “
A_Num(10) = “010DEZ “
A_Num(11) = “011ONZE “
A_Num(12) = “012DOZE “
A_Num(13) = “013TREZE “
A_Num(14) = “014QUATORZE “
A_Num(15) = “015QUINZE “
A_Num(16) = “016DEZESSEIS “
A_Num(17) = “017DEZESSETE “
A_Num(18) = “018DEZOITO “
A_Num(19) = “019DEZENOVE “
A_Num(20) = “020VINTE “
A_Num(21) = “030TRINTA “
A_Num(22) = “040QUARENTA “
A_Num(23) = “050CINQUENTA “
A_Num(24) = “060SESSENTA “
A_Num(25) = “070SETENTA “
A_Num(26) = “080OITENTA “
A_Num(27) = “090NOVENTA “
A_Num(28) = “100CEM “
A_Num(29) = “200DUZENTOS “
A_Num(30) = “300TREZENTOS “
A_Num(31) = “400QUATROCENTOS “
A_Num(32) = “500QUINHENTOS “
A_Num(33) = “600SEISCENTOS “
A_Num(34) = “700SETECENTOS “
A_Num(35) = “800OITOCENTOS “
A_Num(36) = “900NOVECENTOS “
A_Num(37) = “000 “
C1 = Left(Part, 1)
C2 = Mid(Part, 2, 1)
C3 = Right(Part, 1)
Posi = 0
cWordExtenso = ““
For ii = 1 To 37
If Left(A_Num(ii), 3) = Part Then
Posi = ii
Exit For
End If
Next
If Posi <> 0 Then
cWordExtenso = Mid(A_Num(Posi), 4)
Else
Posi = 0
For ii = 1 To 37
If Left(A_Num(ii), 3) = Format(Val(Part) – Val(C3), “000”) Then
Posi = ii
Exit For
End If
Next
If Posi <> 0 Then
cWordExtenso = Mid(A_Num(Posi), 4) + “E “
If cWordExtenso = “CEM E “ And Val(C3) <> 0 Then
cWordExtenso = “CENTO E “
End If
Posi = 0
For ii = 1 To 37
If Left(A_Num(ii), 3) = Format(Val(C3), “000”) Then
Posi = ii
Exit For
End If
Next
cWordExtenso = cWordExtenso + Mid(A_Num(Posi), 4)
Else
Posi = 0
For ii = 1 To 37
If Left(A_Num(ii), 3) = Format(Val(Part) – Val((C2 + C3)), “000”) Then
Posi = ii
Exit For
End If
Next
cWordExtenso = Mid(A_Num(Posi), 4) + “E “
If cWordExtenso = “CEM E “ Then
cWordExtenso = “CENTO E “
End If
Posi = 0
For ii = 1 To 37
If Left(A_Num(ii), 3) = Format(Val((C2 + C3)), “000”) Then
Posi = ii
Exit For
End If
Next
If Posi <> 0 Then
cWordExtenso = cWordExtenso + Mid(A_Num(Posi), 4)
Else
Posi = 0
For ii = 1 To 37
If Left(A_Num(ii), 3) = Format(Val((C2 + C3)) – Val(C3), “000”) Then
Posi = ii
Exit For
End If
Next
cWordExtenso = cWordExtenso + Mid(A_Num(Posi), 4) + “E “
Posi = 0
For ii = 1 To 37
If Left(A_Num(ii), 3) = Format(Val(C3), “000”) Then
Posi = ii
Exit For
End If
Next
cWordExtenso = cWordExtenso + Mid(A_Num(Posi), 4)
End If
End If
End If

Extenso_Aux = cWordExtenso

End Function

Function FU_ValidaCPF(CPF As String) As Integer

Dim soma As Integer
Dim Resto As Integer
Dim i As Integer

‘Valida argumento
If Len(CPF) <> 11 Then
FU_ValidaCPF = False
Exit Function
End If

soma = 0
For i = 1 To 9
soma = soma + Val(Mid$(CPF, i, 1)) * (11 – i)
Next i
Resto = 11 – (soma – (Int(soma / 11) * 11))
If Resto = 10 Or Resto = 11 Then Resto = 0
If Resto <> Val(Mid$(CPF, 10, 1)) Then
FU_ValidaCPF = False
Exit Function
End If

soma = 0
For i = 1 To 10
soma = soma + Val(Mid$(CPF, i, 1)) * (12 – i)
Next i
Resto = 11 – (soma – (Int(soma / 11) * 11))
If Resto = 10 Or Resto = 11 Then Resto = 0
If Resto <> Val(Mid$(CPF, 11, 1)) Then
FU_ValidaCPF = False
Exit Function
End If

FU_ValidaCPF = True

End Function

Function FU_ValidaCGC(CGC As String) As Integer
Dim retorno, a, j, i, d1, d2
If Len(CGC) = 8 And Val(CGC) > 0 Then
a = 0
j = 0
d1 = 0
For i = 1 To 7
a = Val(Mid(CGC, i, 1))
If (i Mod 2) <> 0 Then
a = a * 2
End If
If a > 9 Then
j = j + Int(a / 10) + (a Mod 10)
Else
j = j + a
End If
Next i
d1 = IIf((j Mod 10) <> 0, 10 – (j Mod 10), 0)
If d1 = Val(Mid(CGC, 8, 1)) Then
FU_ValidaCGC = True
Else
FU_ValidaCGC = False
End If
Else
If Len(CGC) = 14 And Val(CGC) > 0 Then
a = 0
i = 0
d1 = 0
d2 = 0
j = 5
For i = 1 To 12 Step 1
a = a + (Val(Mid(CGC, i, 1)) * j)
j = IIf(j > 2, j – 1, 9)
Next i
a = a Mod 11
d1 = IIf(a > 1, 11 – a, 0)
a = 0
i = 0
j = 6
For i = 1 To 13 Step 1
a = a + (Val(Mid(CGC, i, 1)) * j)
j = IIf(j > 2, j – 1, 9)
Next i
a = a Mod 11
d2 = IIf(a > 1, 11 – a, 0)
If (d1 = Val(Mid(CGC, 13, 1)) And d2 = Val(Mid(CGC, 14, 1))) Then
FU_ValidaCGC = True
Else
FU_ValidaCGC = False
End If
Else
FU_ValidaCGC = False
End If
End If
End Function