sexta-feira, 30 de agosto de 2013

Indicação de livro para programadores VB/VBA iniciando em C#

Livro muito interessante para quem está iniciando no acesso a banco de dados com o C# e que já possuem algum conhecimento em VB/VBA.
O conteúdo é bem objetivo, sem entrar em detalhes da estrutura do C# vai direto ao assunto com exemplos bem didáticos e de fácil entendimento.
O preço gira em torno de R$ 35,00 (bem acessível) e na minha opinião vale o investimento.

Editora O'Reilly/Novatec.
Autor: Michael Schmalz
ISBN: 978-85-7522-315-4

;-)





Access: cuidados ao desabilitar avisos em macros e no VBA

As vezes quando damos manutenção em sistemas complexos e com sequências longas de comandos, é comum deixar passar um pequeno detalhe que pode ser crucial para localizar um possível erro aparentemente sem explicação.
Ao criarmos uma macro quase sempre iniciamos com o comando "Definir Avisos - Não" para que o Access não exiba mensagens de confirmação a cada consulta executada. O equivalente no VBA é o DoCmd.SetWarnings False.
O problema é que os comandos acima desabilitam também as mensagens de erro.
Imaginem uma tabela com um campo numérico onde a instrução é alterar o conteúdo para uma letra. Óbvio que será exibida uma mensagem de erro, mas veja que na sequência abaixo isso não ocorrerá pois os avisos foram desabilitados:

Sub teste_aviso()

    DoCmd.SetWarnings False
        DoCmd.RunSQL "UPDATE Tabela1 SET campo_numerico = 'A'"
    DoCmd.SetWarnings True    

    MsgBox "Consulta executada"

End Sub  


A dica portanto é, na hora de depurar a macro ou código VBA, executar consulta por consulta e acompanhar as mensagens de alerta do Access. Dá trabalho, demora, é necessário muita paciência e atenção.
Somente após ter certeza de que tudo está "ok", aí sim podemos desabilitar as mensagens seja por "Definir Avisos - Não" ou "DoCmd.SetWarnings False".

;-)

quarta-feira, 21 de agosto de 2013

Como a tecnologia evolue

Curiosidades... A primeira foto é de um HD de 4 Mb, um "monstro" para a época.
Mede pouco mais de um metro e meio de altura.
Na segunda foto, o meu HD portátil de 320Gb (que já é ultrapassado...).

VBA - Função de arredondamento com incremento personalizado

Outro dia precisei de uma função para transformar 1,1 em 2 e assim por diante (arredondar para cima sempre que a decimal for maior que zero) e com a ajuda do grande mestre Gib@ que conseguiu garimpar no suporte da Microsoft, deixo aqui para futuras consultas, pois os materiais da Microsoft costumam mudar de lugar ou simplesmente sumir. O link original: http://support.microsoft.com/kb/155696/pt-br

O exemplo a seguir cria um procedimento chamado RoundToNearest, que aceita três parâmetros:

   Parameter     Value

   ---------     ---------------------------------------------------------

   Amt           The numeric value you want to round

   RoundAmt      The increment to which Amt will be rounded

   Direction     Constant indicating which direction to round (up or down)

                                  

Por exemplo, RoundToNearest (3,33, 0,1, vb_roundup) retorna o valor 3.4.

1.       Crie um módulo e digite as seguintes linhas na seção declarações:

2.             Option Explicit

3.             Public Const vb_roundup = 1

      Public Const vb_rounddown = 0

Observação: Versões 1. x e 2.0, use a palavra "Global" em vez de "Público".

4.       Crie o procedimento a seguir.

Observação: No código de exemplo a seguir, um sublinhado (_) ao final de uma linha é usado como um caractere de 
continuação de linha. Remova o sublinhado do final da linha quando recriar esse código no Access Basic.

5.             Function RoundToNearest (Amt As Double, RoundAmt As Variant, _

6.                                      Direction As Integer) As Double

7.                On Error Resume Next

8.                Dim Temp As Double

9.                Temp = Amt / RoundAmt

10.            If Int(Temp) = Temp Then

11.               RoundToNearest = Amt

12.            Else

13.               If Direction = vb_rounddown Then

14.                  Temp = Int(Temp)

15.               Else

16.                  Temp = Int(Temp) + 1

17.               End If

18.               RoundToNearest = Temp * RoundAmt

19.            End If

20.         End Function

                                                 

21.   Para testar essa função, digite cada uma das linhas a seguir na janela Depurar 
(ou janela Verificação imediata no 1. x e 2.0) e, em seguida, pressione ENTER.

? RoundToNearest (0.25, vb_roundup, 1.36)

Observe que o procedimento retorna 1.5.

? RoundToNearest (1.36, 0.05, vb_rounddown)

Observe que o procedimento retorna 1.35.

? RoundToNearest (1.36, 0.75, vb_roundup)

Observe que o procedimento retorna 1.5, que é dois incrementos de 0,75.

Observação: Para usar a função acima na propriedade OrigemDoControle de um controle em um formulário, 
você precisará substituir as constantes vb_roundup e vb_rounddown com seus valores de número inteiro.

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.