VBA-Access – Dicas

Access Por ExemploAccessPorExemplo


VBA-ACCESS 

10/04/2023

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 Macro
DoCmd.RunMacro “NomeMacro”

Filtrar dados do Formulário
xCodBacia = [Forms]![frmBacias]![txtCodBacia]
DoCmd.ApplyFilter , “CodBacia = ” & xCodBacia      ‘ Campo Numérico

DoCmd.ApplyFilter , “LastName = ‘Silva'”                    ‘ Campo Texto

Abrir Consulta
DoCmd.OpenQuery “NomeConsulta”, acNormal, acEdit

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


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 diaMov, TitRel 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
diaMov = Format(Day(rsDt!DtDadosDiários), “00”) & “-” & Format(Month(rsDt!DtDadosDiários), “00”) & “-” & Format(Year(rsDt!DtDadosDiários), “0000”)
With rst
.MoveFirst
Do While Not .EOF
.Edit
.X1 = True
.Update
       DoCmd.OpenReport “971-DadosDiáriosEmpréstimos-Analítico”, acViewPreview, “”, “([Nome]='” & rst!NOME & “‘)” ‘*****************
TitRel = “C:\_DSV\RealValor\” & diaMov & ” – ” & rst!NOME & ” – ” & rst!CHAVE
        DoCmd.OutputTo acOutputReport, “971-DadosDiáriosEmpréstimos-Analítico”, acFormatPDF, TitRel & “.pdf”
DoCmd.Close acReport, “971-DadosDiáriosEmpréstimos-Analítico”    ‘*****
.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.RunCommand acCmdWindowHide ‘ F11
Call ap_DisableShift
DoCmd.ShowToolbar “ribbon”, acToolbarNo
Me.Senha1 = “”
Me.txtUsuario = “”
Me.txtNovaSenha.Visible = False
Me.txtNovaSenhaConfirma.Visible = False
Me.RotNovaSenha.Visible = False
Me.RotNovaSenhaConfirma.Visible = False
Me.btTrocarSenha.Visible = False
Me.btIncluir.Visible = False
Me.txtNovoUsuário.Visible = False
Me.btEfetivaInclusão.Visible = False
Me.txtPerfil.Visible = False
Me.rotPerfil.Visible = False

End Sub


Formatar Formulário – Fechar Menus

Private Sub Form_GotFocus()
DoCmd.RunCommand acCmdWindowHide ‘ F11
DoCmd.ShowToolbar “ribbon”, acToolbarNo
End Sub


Marcar ou Desmarcar campo Booleano
Private Sub btnSimNao_Click()
DoCmd.SetWarnings False
If Ok Then
DoCmd.RunSQL (“UPDATE Calendário1 set X = True”)
Ok = False
Me.btnSimNao.Caption = “N”
Me.btnSimNao.ForeColor = “00255”     ‘ Muda cor do botão
Else
DoCmd.RunSQL (“UPDATE Calendário1 set X = False”)
Ok = True
Me.btnSimNao.Caption = “S”
Me.btnSimNao.ForeColor = “135206235”  ‘ Muda cor do botão
End If
DoCmd.DoMenuItem acFormBar, acRecordsMenu, 5, , acMenuVer70
End Sub


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


Enviar para Área de TransferênciaMétodo RunCommand com a constante acCmdCopy para copiar o conteúdo do controle ativo de um formulário ou relatório para a Área de Transferência.
O exemplo a seguir copiar o conteúdo de uma caixa de texto (txt) para a Área de Transferência.

Private Sub EnviaParaÁreaDeTranferência_Click()
Me!txt.SetFocus

    DoCmd.RunCommand acCmdCopy
End Sub

Trazer da Área de Transferência – Método RunCommand com a constante acCmdCopy para trazer conteúdo da Área de Transferência e depositar no controle ativo de um formulário ou relatório.
O exemplo a seguir copiar o conteúdo da Área de Transferência para uma caixa de texto (txt).

Private Sub TrazDaÁreaDeTranferência_Click()
    Me!txt.SetFocus
    DoCmd.RunCommand acCmdPaste
End Sub


Private Sub DtAtuaçãoMês_DblClick(Cancel As Integer)
Dim X As String
X = Me.DtAtuaçãoMês
Me.Filter = “DtAtuaçãoMês = ‘” & X & “‘”
Me.FilterOn = True
DoCmd.DoMenuItem acFormBar, acRecordsMenu, 5, , acMenuVer70
End Sub


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


Nome do Projeto nos Objetos 
Public Function ProjetoTítulo()
ProjetoTítulo = DLookup(“[ProjetoTítulo]”, “tblSisCadastro”, _
“[CodCadastro] = 1”)
End Function
————————————
tblSisCadastro

ProjetoTítulo CodCadastro
NomeProjeto 1

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

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

DoCmd.RunSQL
DoCmd.RunSQL (“DELETE * FROM Clientes”)
DoCmd.RunSQL (“UPDATE Age set x = false where age.tipo= ‘ “ & txt & ” ‘ )
(txt é uma variável tipo string )

xReg = Me.NomeRegional
DoCmd.RunSQL (“UPDATE qryAgente00 set x = True where qryAgente00.NomeRegional='” & xReg & “‘”)  
‘ (xReg é string)

DoCmd.RunSQL (“INSERT Into tabDestino ( Camp1, Camp2 ) SELECT Camp1, Camp2 From ObjOrig”)


SQL INSERT
Public Function AnexaDadosDiários()
Dim sql1, sql2, sql3, sql4, sql5 As String

DoCmd.RunSQL (“DELETE tblDadosDiáriosEmp_00.* FROM tblDadosDiáriosEmp_00;”)

sql1 = “INSERT INTO tblDadosDiáriosEmp_00 ( CodRegional, [Chave J], ValorFinanciado, ValorFinanciadoLíquido, Vr, Parcelas, Dt, DtContrato, Status, NrProp, CodConv, CodProd, Subcanal, Perc, Prefixo ) ”

sql2 = “SELECT Agente.CodRegional, ExcelDiaEmp.ChaveJ, [Valor Financiado]/100 AS Expr1, [Valor Financiado Líquido]/100 AS Expr2, [Valor Financiado Líquido]/100 AS Expr3, ExcelDiaEmp.Parcelas, ExcelDiaEmp.[Data Movimento], ExcelDiaEmp.[Data Proposta], ExcelDiaEmp.Status, ExcelDiaEmp.[Número Proposta], ExcelDiaEmp.[Código Convênio], ExcelDiaEmp.[Código Produto], ExcelDiaEmp.[Tipo de Subcanal] AS Expr4, [Taxa Mensal de Juros]/100 AS tx, Format([Prefixo Ag# Responsável],’0000′) AS Expr5 ”

sql3 = “FROM Agente RIGHT JOIN ExcelDiaEmp ON Agente.ChaveJ = ExcelDiaEmp.ChaveJ ”

sql4 = “WHERE(((ExcelDiaEmp.MCI)=123456789) AND ((ExcelDiaEmp.ChaveJ) Is Not Null And (ExcelDiaEmp.ChaveJ)<>’ChaveJ’)) ”

sql5 = “ORDER BY Agente.CodRegional, ExcelDiaEmp.ChaveJ;”

sql0 = sql1 + sql2 + sql3 + sql4 + sql5
DoCmd.RunSQL (sql0)

End Function


yRG = Me.Rg

DoCmd.RunSQL (“UPDATE qryUF set x = true where qryUF.RG=’ ” & yRG & ” ‘ ” )
(quando yRG for string – não deixar espaços entre  ” ‘ “ aspas e apóstrofos)
DoCmd.RunSQL (“UPDATE qryUF set x = true where qryUF.RG=”& yRG )
(quando yRG for numérico)

DoCmd.DoMenuItem acFormBar, acRecordsMenu, 5, , acMenuVer70
(atualiza)


Criar Tabela – Código

Public Function CriaTabela()
Dim dbs As Database
Set dbs = CurrentDb ‘OpenDatabase(“teste.mdb”)
dbs.Execute “CREATE TABLE Tabela1 ” _
& “(Nome CHAR(30), DtNasc Date);”
dbs.Close
End Function
————————————————————

Criar Tabela – Consulta (Modo SQL)

CREATE TABLE EixoAtuação
(CodEixo AUTOINCREMENT,
[CodBacia] integer,
[NomeEixo] TEXT(50)
)

——————————–

Criar Tabela – Código 

Public Function CriaTabela()
  Dim dbs As Database
  Set dbs = CurrentDb 'OpenDatabase("teste.mdb")
  dbs.Execute "CREATE TABLE Tabela1 " _
      & "(Nome CHAR(30), DtNasc Date);"
  dbs.Close
End Function


Criar Tabela - Consulta (Modo SQL)

CREATE TABLE EixoAtuação 
(CodEixo AUTOINCREMENT, 
[CodBacia] integer, 
[NomeEixo] TEXT(50) 
)

 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:_dsvteste.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 ProgramasMicrosoft OfficeOfficeBitmapsEstilos”

‘ 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


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


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


Imprimir Relatórios Marcados
Form-ListaRelatoriosImpressao

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 ddmmaaaa(yDat)
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)
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)
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)
‘ 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)   ‘ Período Conhecida, 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


Função Extenso
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