Às vezes a gente precisa de versões antigas de programas, seja lá qual for o motivo...
Segue um site com muito material para download:
http://www.oldversion.com/
;-)
Eventualmente dicas sobre outros programas, Windows e hardware.
sábado, 3 de janeiro de 2015
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).
;-)
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
;-)
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.
;-)
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.
;-)
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
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.
;-)
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
quarta-feira, 20 de novembro de 2013
Site com boas informações de programação
Dica do amigo Victor Rubens!
http://wwww.codeproject.com
;-)
http://wwww.codeproject.com
;-)
terça-feira, 15 de outubro de 2013
Mais material bom de VBA
No site da Microsoft.
Tomara que não saia do ar ou mude de lugar.
http://msdn.microsoft.com/en-us/library/bb726436(v=office.12).aspx
Tomara que não saia do ar ou mude de lugar.
http://msdn.microsoft.com/en-us/library/bb726436(v=office.12).aspx
sábado, 12 de outubro de 2013
Comentário em células do Excel
Uma maneira interessante de orientar o usuário quanto ao preenchimento de determinadas colunas é colocar somente a mensagem na validação de dados.
Para isso, selecione a(s) célula(s), clique em Dados > Validação de Dados > Validação de dados > Mensagem de entrada e digite o alerta.
;-)
Para isso, selecione a(s) célula(s), clique em Dados > Validação de Dados > Validação de dados > Mensagem de entrada e digite o alerta.
;-)
Importação de arquivo CSV no VBA
Outro dia me deparei com um problema muito estranho:
Utilizando o trivial "Open/Line Input/Close" para
ler um arquivo CSV, ao fazer a leitura da primeira linha era carregado o
arquivo inteiro (!) na variável string.
Provavelmente o arquivo não tinha o caracter de quebra de
linha no final, mas o comportamento do VBA era muito estranho.
Pesquisando na net não vi nada sobre o assunto.
Ao experimentar com FileSystemObjects o mesmo se comportou
da maneira como eu precisava, ou seja, a leitura seguiu de linha em linha e
pude fazer a importação normalmente.
Ficam abaixo as 2 tentativas para consulta, sendo que o
FileSystemObjects atendeu perfeitamente à necessidade da ocasião.
;-)
Dim arquivo As Variant
Dim fs As New FileSystemObject
Dim linha As String
Set arquivo = fs.OpenTextFile(CurrentProject.Path &
"\*.CSV", ForReading)
linha = arquivo.ReadLine
Debug.Print linha
arquivo.Close
=====
Dim arquivo As String
Dim linha As String
arquivo = Dir("C:\*.CSV")
Open "C:\" & arquivo For
Input As #1
Line Input #1, linha
Debug.Print linha
Close #1
domingo, 22 de setembro de 2013
Aproveitando melhor o espaço em rede com arquivos XLS
Sabemos que no mundo corporativo, o espaço em rede geralmente é limitado e por isso nos vemos obrigados a compactar arquivos sempre que possível.
A dica de hoje é, utilize o formato de arquivo do Excel 2003 quando a planilha contiver somente dados sem formatação e sem os recursos avançados do Excel 2007 e superiores.
No comparativo abaixo, veja que uma arquivo XLS compactado com o WinRar ou WinZip é muito menor do que o mesmo arquivo no formato XLSX compactado.
;-)
A dica de hoje é, utilize o formato de arquivo do Excel 2003 quando a planilha contiver somente dados sem formatação e sem os recursos avançados do Excel 2007 e superiores.
No comparativo abaixo, veja que uma arquivo XLS compactado com o WinRar ou WinZip é muito menor do que o mesmo arquivo no formato XLSX compactado.
|
ORIGINAL
|
WINRAR
|
ZIP
|
||||
|
XSLX
|
2.414.174
|
2.307.292
|
95,6%
|
|
2.361.198
|
97,8%
|
|
XLS
|
4.868.608
|
1.312.301
|
27,0%
|
|
1.626.112
|
33,4%
|
;-)
sexta-feira, 6 de setembro de 2013
Espaço de armazenagem - onde estamos e para onde vamos...
Falar em Terabyte (1.000.000.000.000 de bytes) já não impressiona mais.
É comum ver HD's com 1, 2, 4 ou mais Terabytes de capacidade.
Em breve estaremos comprando HD's de Petabytes (1.000.000.000.000.000 de bytes), Exabytes (10 elevado a 18), Zettabyte (10 elevado a 21) e Yottabyte (10 elevado a 24) .
Ainda me lembro quando comprei meu HD de 1,7 Gb achando que nunca mais veria a mensagem Disk Full...
;-)
É comum ver HD's com 1, 2, 4 ou mais Terabytes de capacidade.
Em breve estaremos comprando HD's de Petabytes (1.000.000.000.000.000 de bytes), Exabytes (10 elevado a 18), Zettabyte (10 elevado a 21) e Yottabyte (10 elevado a 24) .
Ainda me lembro quando comprei meu HD de 1,7 Gb achando que nunca mais veria a mensagem Disk Full...
;-)
Preenchimento de contratos no Access
Tempos atrás eu vi um código que pretendia justificar um texto dentro de um TextBox num relatório e muita gente tentou adaptar o código para criar contratos e preenchê-los com dados de tabelas do Access.
A partir da versão 2007, o Office permitiu a criação de arquivos PDF o que deixou essa tarefa muito mais interessante, pois deixamos de depender de ferramentas de terceiros para gerar o contrato em PDF.
Eu mesmo usei durante muito tempo o PDF Creator, ferramenta muito boa e Open Source.
A dica para facilitar a tarefa é juntar recursos do pacote Office (que eu sempre digo que é uma suíte voltada a produtividade) e usar o melhor de cada um deles de forma integrada:
- Criar o contrato no Word utilizando todos os recursos de justificação de texto, tabelas para posicionar os campos e bookmarks (indicadores) para receber os campos da(s) tabela(s);
- A parte de programação pode ser feita tanto no Access quanto no Word.
Juntando tudo, basta preencher o contrato pelo VBA e gerar a saída no formato PDF.
Detalhes importantes que devem ser de conhecimento para utilizar esta técnica:
- Indicadores do Word;
- Modelos de documento (*.dot ou *.dotx);
- Criação de formulários no Word utilizando-se tabelas;
- Acesso à dados no Access (DAO ou ADO);
- Automação de aplicativos do Office (Access controlando o Word ou vice-versa) e
- Late Binding ou Early Binding.
Sobre este último item eu já devo ter escrito em algum post anterior, mas basicamente o Early Binding vai facilitar muito a programação porém exigirá que o programador saiba para qual versão do Office estará programando. O Late Binding não terá o problema da versão porém a programação será um pouco mais complexa.
;-)
A partir da versão 2007, o Office permitiu a criação de arquivos PDF o que deixou essa tarefa muito mais interessante, pois deixamos de depender de ferramentas de terceiros para gerar o contrato em PDF.
Eu mesmo usei durante muito tempo o PDF Creator, ferramenta muito boa e Open Source.
A dica para facilitar a tarefa é juntar recursos do pacote Office (que eu sempre digo que é uma suíte voltada a produtividade) e usar o melhor de cada um deles de forma integrada:
- Criar o contrato no Word utilizando todos os recursos de justificação de texto, tabelas para posicionar os campos e bookmarks (indicadores) para receber os campos da(s) tabela(s);
- A parte de programação pode ser feita tanto no Access quanto no Word.
Juntando tudo, basta preencher o contrato pelo VBA e gerar a saída no formato PDF.
Detalhes importantes que devem ser de conhecimento para utilizar esta técnica:
- Indicadores do Word;
- Modelos de documento (*.dot ou *.dotx);
- Criação de formulários no Word utilizando-se tabelas;
- Acesso à dados no Access (DAO ou ADO);
- Automação de aplicativos do Office (Access controlando o Word ou vice-versa) e
- Late Binding ou Early Binding.
Sobre este último item eu já devo ter escrito em algum post anterior, mas basicamente o Early Binding vai facilitar muito a programação porém exigirá que o programador saiba para qual versão do Office estará programando. O Late Binding não terá o problema da versão porém a programação será um pouco mais complexa.
;-)
Desfazer ações de macros e/ou VBA
Talvez seja redundante falar em macro e/ou VBA, mas faço essa colocação apenas para diferenciar a criação macro utilizando o gravador de macros do Excel e de códigos criados diretamente no ambiente do VBA (o que no fim das contas acaba sendo a mesma coisa).
Fato é que, qualquer que seja a ação executada pelo código, não há opção de desfazer, portanto é preciso muito cuidado ao testar algum programa em planilhas cujas informações são importantes.
A minha dica é trabalhar sempre numa cópia do arquivo e... testar, testar e testar até ter certeza de que está pronto para ser utilizado em produção.
Backup é sempre recomendável e normalmente a gente só lembra quando acontece uma tragédia...
;-)
Fato é que, qualquer que seja a ação executada pelo código, não há opção de desfazer, portanto é preciso muito cuidado ao testar algum programa em planilhas cujas informações são importantes.
A minha dica é trabalhar sempre numa cópia do arquivo e... testar, testar e testar até ter certeza de que está pronto para ser utilizado em produção.
Backup é sempre recomendável e normalmente a gente só lembra quando acontece uma tragédia...
;-)
Assinar:
Postagens (Atom)
Pesquisar este blog
Quem sou eu
- Kazu
- Administrador de Empresas/Técnico em Processamento de Dados. Microsoft Office User Specialist - Excel Proficient. Pós-graduado em Business Intelligence.
