sexta-feira, 19 de dezembro de 2014

Bug do Access VBA 2013

Num dia desta semana, nos deparamos com um problema já visto antes mas sem uma explicação exata... Quando programava no Office 2003, em determinados computadores meus códigos simplesmente paravam como se tivesse um ponto de interrupção - breakpoint, mas não havia. Estranhamente a execução parava ali e ao teclar F5 o programa terminava a execução normalmente.
Naquela época, descobrimos por tentativa e erro que o Service Pack 3 do Office 2003 resolvia o problema. Até hoje não sabemos exatamente o que ocasionava tal comportamento.
Muitos anos depois, o mesmo problema volta a acontecer, só que agora no Access 2013 num ponto do programa onde o código é muito simples: uma abertura de um recordset para contagem de registros apenas. O programa simplesmente para na linha do Recordset.Recordcount e em seguida trava o Access.
O acesso utilizado era o ADO.
Num verdadeiro "chute", mudamos a programação para DAO e funcionou sem travar.
Continuaremos sem saber a causa exata do problema, mas fica a dica: tentar acessar as bases com ADO ou DAO alternando quando houver uma ocorrência estranha como essa.
O texto não é conclusivo, mas escrevo-lhes para compartilhar a experiência e um palpite feliz (a troca para o DAO).

;-)

quarta-feira, 19 de novembro de 2014

Site muito bom sobre banco de dados - modelagem

Dica do amigo André R. Fernandes.

Vejam a página "Models", tem muito material praticamente pronto para uso!

http://www.databaseanswers.org/index.htm

;-)

terça-feira, 18 de novembro de 2014

Como obter o último dia do mês

Dando continuidade na dica anterior... esta é velha, mas vou deixar registrado aqui, caso algum visitante esteja procurando. Para obter o ultimo dia do mês por programação: - Basta pegar o primeiro dia do mês seguinte menos um dia! - Como definir se um ano é bissexto ou não? Basta dividir o ano por 4 e verificar se o resto da divisão é zero ou não. Se for zero, o ano é bissexto! No exemplo do Excel abaixo, 2016 será um ano bissexto. ;-)

Atualização de valores - exemplo com IGP-M no VBA do Access

Olá!
Há tempos não publico uma nova dica... então dando continuidade, vai um código para atualizar valores pelo IGP-M (índice geral de preços - mercado).
Antes de mais nada, vale levar em consideração alguns aspectos importantes desta atualização (o cálculo em si é simples):

- Embora o IGP-M seja publicado sempre no final do mês, eu coloquei na minha tabela o primeiro dia apenas para facilitar o SELECT. Poderia criar uma função para entrar sempre com o último dia do mês que é o mais usual nestes casos, foi só uma opção mesmo;

- No site da FVG - http://fgv.br é difícil encontrar as tabelas de índices, geralmente estão em arquivos PDF. No site do Debit é mais fácil e tem uma URL fixa: https://www.debit.com.br/consulta30.php?&indice=igpm;

- Cuidado com as variações negativas: contratos de aluguel por exemplo, costumam ter cláusulas do tipo "correção pela variação positiva do IGP-M" o que equivale a dizer que, caso o índice seja negativo, não haverá redução do valor atualizado, o que pelo cálculo ocorre. Nos meses onde a variação é negativa, o valor "atualizado" é simplesmente mantido. Muito cuidado nesta questão;

- Para conferir os cálculos utilize a calculadora do cidadão no site do Banco Central: https://www3.bcb.gov.br/CALCIDADAO/publico/exibirFormCorrecaoValores.do?method=exibirFormCorrecaoValores

- Como sempre, não esqueçam de marcar a referência Microsoft Activex Data Objects (a versão mais recente que tiver, eu utilizo a 2.8)

Bem, abaixo segue o código e uma imagem da minha tabela para melhor entendimento.

;-)
Option Compare Database
Option Explicit

Dim rst         As ADODB.Recordset
Dim ssql        As String
Dim acumulador  As Double
Dim i           As Integer

Public Function Atualiza_IGPM(MesInicio As Integer, _
                                AnoInicio As Integer, _
                                MesFim As Integer, _
                                AnoFim As Integer, _
                                valor As Double) As Double

    ssql = "SELECT * FROM tabela1 WHERE "
    ssql = ssql & "DataIndice >= #" & MesInicio & "/1/" & AnoInicio & "#"
    ssql = ssql & "ORDER BY DataIndice"
    
    Set rst = New ADODB.Recordset
    rst.Open ssql, CurrentProject.Connection, adOpenKeyset, adLockOptimistic
    rst.MoveFirst
    
    'Primeiro índice
    acumulador = 0
    acumulador = (rst!indice / 100) + 1
    rst.MoveNext
    
    Do While Not rst.EOF
    
        'Acumular taxas
        acumulador = acumulador * ((rst!indice / 100) + 1)
        
        If rst!mes = MesFim And rst!ano = AnoFim Then
            Exit Do
        Else
            rst.MoveNext
        End If
    
    Loop
        
    Atualiza_IGPM = Round(valor * ((acumulador - 1) * 100), 5)

    rst.Close
    Set rst = Nothing

End Function


sábado, 18 de outubro de 2014

Excluindo partes do nome de um arquivo

Quem me conhece, sabe que sou fã do mp3 e gosto de ter meus arquivos organizados.
Às vezes ao baixar algum arquivo, me deparo com nomes dos arquivos acrescidos do nome do site de onde estou baixando ou mesmo o nome de quem "ripou" o CD.
Por exemplo:
ABBA - When I Kissed The Teacher [NomeDeQuemRipou].mp3
Para excluir esse "[NomeDeQuemRipou]" resolvi criar um código muito simples, mas que ajuda bastante.
Cansei de fazer um por um ... :-)

Segue o código:

Option Compare Database
Option Explicit

Public Sub RenomeiaArquivos()

    Dim caminho As String
    Dim origem As String
    Dim destino As String
    Dim eliminar As String
    Dim arquivo As String
   
    caminho = "C:\Documents and Settings\Kazu\Meus documentos\Downloads\Bee Gees\"
    eliminar = "[NomeDeQuemRipou]"
   
    arquivo = Dir(caminho & "*.mp3")
   
    Do Until arquivo = ""
        DoEvents
        origem = arquivo
        arquivo = Replace(arquivo, eliminar, "")
        FileCopy caminho & origem, caminho & arquivo
        Kill caminho & origem
        arquivo = Dir
    Loop
   
    MsgBox "OK", vbOKOnly
    Exit Sub
   
   
End Sub

Provider no VBA do Access

Na empresa onde trabalho, temos diversas versões do Access em uso e além disso, vários bancos de dados que ainda estão no formato .mdb.
Ao alterar um código onde estava acessando um mdb, precisei ajustar o provider para JET.OLEDB.4.0 e resolvi tentar o seguinte: por que não colocar o provider do Access 2010 em todos?
Ficou assim:
Provider=Microsoft.ACE.OLEDB.12.0

Ficou mais fácil, aí não precisamos se o acesso vai ser num arquivo accdb ou mdb.

;-)


quarta-feira, 1 de outubro de 2014

Colocar senha em arquivo ZIP no Windows 7

Uma das (boas) funcionalidades do Windows XP que era a possibilidade de colocar senha em arquivos compactados pelo próprio sistema operacional (através do comando Enviar Para > Pasta Compactada) simplesmente sumiu no Windows 7.

Numa breve pesquisa no site da Microsoft, é recomendado utilizar um compactador de terceiros que, segundo o site custa a partir de U$ 30.

Sabemos que existem vários compactadores “free” como o 7Zip, mas era interessante ter no próprio Windows, pois nem todas as empresas que utilizam softwares licenciados costumam instalar programas gratuitos por motivos diversos.

Uma pena...

 

L

 

terça-feira, 8 de julho de 2014

Excel VBA - copiando e colando num único comando

Range("A1").Copy Destination:=Range("B1")

 

;-)

segunda-feira, 26 de maio de 2014

Reduzindo o tamanho do arquivo de PowerPoint

Se o arquivo ficou muito grande para enviar por e-mail, compacte as imagens:
Janela "Salvar como..." > Ferramentas > Compactar Imagens
Num teste rápido aqui, uma apresentação de 7Mb baixou para 1,2 Mb, uma redução bastante significativa.

;-)

terça-feira, 25 de fevereiro de 2014

Mudando a posição de aplicativos na barra de tarefas - Windows 7

O Windows 7 oferece uma facilidade que não havia nas versões anteriores: mudar a posição dos aplicativos na barra de tarefas.
Bem simples, basta clicar e arrastar.
Costumo usar sempre o Outlook como primeiro item da barra de tarefas e antigamente sempre abria o outlook antes de começar a trabalhar.
Com este recurso posso abrir os programas em qualquer sequencia e organizá-los da forma que eu quiser.

;-)

 
 

quarta-feira, 12 de fevereiro de 2014

Mais links de bons sites com dicas de Office

http://sharonparq.com/

http://gregmaxey.mvps.org/

;-)

Pesquisar este blog

Arquivo do blog

Quem sou eu

Minha foto
Administrador de Empresas/Técnico em Processamento de Dados. Microsoft Office User Specialist - Excel Proficient. Pós-graduado em Business Intelligence.