Excel Tips - Funções de Lógica - Logical functions

Inline image 1

Para utilizarmos bem as funções do MS Excel precisamos ao menos saber que existem e conhecermos onde as podemos aplicar.

O que segue são algumas destas que podemos utilizar extensivamente, agora com um pouco mais de conhecimento.

Tenham em mente que elas estão expressas em inglês, escolhi assim para que pudéssemos ter proveito delas tanto funcionalmente no MS Excel quanto na programação VBA. Sei que na maioria das empresas a instalação está em português, o que pessoalmente acho péssimo, nestes casos poderá procurar pela referência de como escrevê-la em Português.

Ahh e não reclamem, aproveitem para usar o Google Translate se precisarem.

Funções de Lógica

AND
Returns TRUE if all of its arguments are TRUE

FALSE
Returns the logical value FALSE

IF
Specifies a logical test to perform

IFERROR
Returns a value you specify if a formula evaluates to an error; otherwise, returns the result of the formula

NOT
Reverses the logic of its argument

OR
Returns TRUE if any argument is TRUE

TRUE
Returns the logical value TRUE


Tags: Function, Excel, Tips, functions, Logical, lógicas, lógica


Business Intelligence - 04 a 10 - Regras Clássicas para implementação


Antigamente as empresas gastavam muito dinheiro com BI, mas nem sempre conseguiam alcançar os resultados pretendidos. Prova disso são as reclamações generalizadas de usuários sobre a falta da qualidade dos dados e a dificuldade de utilização dos respectivos sistemas e ferramentas de BI. Não raro detectam-se relatórios incompletos e/ou dados imprecisos que impactam severamente na tomada de decisões. Tais deficiências são causadas por fraquezas funcionais e organizacionais na implementação de projetos de Business Intelligence.

Sim meus caros, é essencial aprendermos com os erros de outros projetos de implementação de um Business Intelligence, o que segue são 10 dicas para a implementação de um BI.

4. Ter apoio da Gestão

A equipe do projeto deve ter apoio da gestão. Esta é a única forma de garantir que os objetivos corporativos a curto e longo prazo sejam incorporados. A implementação é monitorizada pela comção de indicadores de desempenho (KPI) permanentes dos rácios operacionais mais importantes.

5. Identificar os Indicadores de Desempenho (KPI) requeridos

São necessários valores operativos a gestão dos processos de uma companhia. A equipa de projecto deve defini-los em conjunto com o departamento especialista. No manuseamento e produção de materiais, por exemplo, indicadores de desempenho tais como "custo do material por cada componente" ou "volume de negócio por colaborador" são variáveis provadas. Isto torna mais fácil determinar se os objetivos foram alcançados ou não.

6. Garantir a integração e qualidade dos dados

Integração dos dados é um fator decisivo o sucesso de um projeto de BI. A equipe deve identificar os sistemas operacionais nos quais a informação requerida está disponível e como os dados devem ser acessados. informação atualizada, o acesso direto é a melhor opção. Se a qualidade dos dados brutos não for suficiente, isso deverá ser melhorado com as ferramentas de software apropriadas acessar todas as fontes de dados.

7. Descubra que ferramentas de BI já estão disponíveis na empresa

Quando um novo projeto é iniciado, é necessário determinar se as ferramentas existentes os usuários finais devem continuar a ser utilizadas ou se devem ser substituídas completamente. Na maioria dos casos, a padronização num único sistema de BI é preferível garantir consistência na disponibilização da informação dentro da empresa.

8. Escolher o Software de BI correto

Com uma Proof-of-Concept (PoC), a equipe de projeto decide o software mais adequado, baseando-se geralmente  em um briefing específico. Este procedimento permite à equipe de projeto garantir com maior grau de certeza de que o software se adequa ao seu negócio.

9. Limitar o tempo de execução do projeto

Aqui aplica-se a velha regra: "Tudo o que dure mais que seis meses deixa de ser um projeto e passa a ser um problema." Quando se implementa um novo projeto de BI, os departamentos especializados devem estar centrados e proceder em claros passos definidos. Os subprojetos devem ser desenvolvidos que os primeiros módulos executáveis e operacionais estejam disponíveis depois de dois ou três meses.

10. Um projeto de BI é um processo constante

Os requisitos das companhias mudam constantemente e o mesmo se aplica a uma aplicação de BI. Todas as soluções de BI têm de ser continuamente desenvolvidas e otimizadas em uma base permanente. Esta é a única forma que têm de cumprir os requisitos.


Tags: BI, Business Inteligence,

Office 2013- Access 2013 - 10 Pontos Positivos Relevantes



Temos algumas poucas semanas de desenvolvimento com a nova versão do MS Access 2013, mas já podemos compartilhar algumas impressões que podem ajudá-lo a saber se deve mudar da versão 2010 ou não.

 1 - Desenvolvimento baseado no SQL Server.

     O MS Access costumava ter o seu próprio motor de banco de dados, conhecido originalmente como JET,
     o qual agora chama-se ACE. Poderemos sempre converter um banco de dados para o SQL Server e continuarmos
     usando o MS Access como front-end no novo banco de dados SQL Server. No entanto, a conversão 
     nunca ficava livre de problemas e havia diferenças suficientes entre o motor JET / ACE e o SQL Server
     em algumas incompatibilidades.

     Em termos de conversão o seu banco de dados terá um excelente escalabilidade com o SQL Server como backend .

     A equipe do MS Access está reunida com o pessoal do SQL Server em base regular como nunca estiveram antes,
     esperando oportunidades maiores e melhores de colaboração entre os grupos.

 2 - Podemos continuar usando a nossa aplicação, os nossos relatórios com outras melhorias.

     Outra esplêndida adição é a Tecnologia Web ao nosso ao banco de dados legado. 
     
     Normalmente projetamos aplicações complexas, e sejamos sinceros, é muito improvável que as convertamos para aplicações web. No entanto,
     o fato de que podemos nos conectar ao SQL Server significa que podemos continuar usando os nossos aplicativos legados, desfrutando de todas
     as características espetaculares que o MS Access tem a oferecer. É um constante ganha-ganha.

 3 - As conexões continuam sendo suportadas.

     Podemos usar o SQL Server Reporting Services, MS Excel ou quaisquer outras ferramentas que suportarem conexão
     com o SQL Azure / SQL Server ODBC para gerar os relatórios. 

     Muitos dos nossos projetos normalmente têm as planilhas MS Excel como relatórios de saída. Por outros vários motivos,com a
     funcionalidade ODC, é possível criarmos planilhas com dados do Web Access Service.

 4 - Nessa nova versão os desenvolvedores são liberados de preocupar-se com a "forma", concentrando-se na normalização.

     Alguns programadores ficarão horrorizados com essa aparente perda de controle.

     Não poderão mais colocar um botão perfeito no pixel exato.

     Mas, pense bem, não somos contratados para fazer aplicações bonitas, ou somos? Ao meu modo de ver, o layout diz muito de uma
     aplicação. Ignorar isso é jogar fora toda a teoria aplicada que a Apple conseguiu aplicar vez, após vez. A interface é sim importante.

     Mas, o ponto de vista da Microsoft para o MS Access é o de que estamos ali para implementarmos aplicações funcionais com aderência
     aos respectivos modelos de negócio que estamos desenvolvendo, fazendo um design de formulário simples. E a equipe de Redmon imaginar
     presentear-nos com duas grandes coisas: 1) Consistência e 2) Interface intuitiva.

 5 - O recurso built-in foi estendido para a busca e a filtragem.

     O MS Access fornece uma visão de lista, que sempre mostra a caixa de pesquisa com uma lista de registros. Não há 
     necessidade de código para obtê-lo, e os usuários podem simplesmente clicar em um registro para ver os seus
     respectivos detalhes.

     Em vez de adicionarmos um formulário de pesquisa e codificá-lo para fazê-lo funcionar, este é construído automática
     e gratuitamente.

 6 - Navegação built-in. Foco no processo, ao invés de nos mecanismos de obtenção.

     Quando adicionamos uma tabela, uma nova guia aparece na página principal e pode, opcionalmente ser escondida.

     Além disso, quando um registro contiver um campo de pesquisa sobre ele, este poderá ser exibido como um link que
     poderá ser usado para abrir um formulário mostrando os detalhes desse registro relacionado. Este também está
     relacionado com os controles de itens que tornam o acesso fácil. Tudo isso sem nenhum código.

 7 - Interface de pesquisa melhorada - Facilidade para a construção de Chaves Estrangeiras.

     Nas versões anteriores, os campos de pesquisa exigiam 5 passos no assistente para configurarmos a pesquisa. Agora obtemos o
     mesmo num único passo, e a descrição tornou-se muito mais fácil de seguir para que uma pessoa que nunca tenha ouvido falar dos
     termos tais como "restrição de chave estrangeira", possam facilmente criar pesquisas. Evitando a digitação de dados errados.

 8 - Barra de Ação - Agora disponível como uma Barra personalizável.

     Muitas vezes, descobrimos que a Barra de Navegação nem sempre seria apropriada - por vezes, acabamos por ter de 
     fornecer a nossa própria Barra de Navegação apenas com o intuito de sermos capazes de escrevermos código para a
     verificação das condições em que a navegação no registro for realizada e cancelá-la se necessário. 

     Bem, as Barra de Ação estão agora totalmente programáveis, por isso temos muito mais controle sobre a verificação
     das condições, permitindo as ações sem termos que re-inventar a roda. Mais uma vez, uma grande economia de tempo
     para nós.

 9 - A janela de propriedades está como pop-up.

     Gosto muito do modo como as propriedades dos controles aparecem agora apenas quando precisamos delas como pop-ups.
     Não mais precisamos ficar caçando-as numa lista.

10 - Divulgação dos dados através da publicação no Office365 2013.

     Sim, a criação do nosso próprio servidor web não é uma tarefa trivial. Existem detalhes cansativos de serem implementados e
     ninguém quer fazer um investimento tão grande de tempo apenas para descobrir que exagerou ou fez tudo errado. Configurar 
     uma conta de assinatura é comparativamente muito menos arriscado em comparação com o grande esforço exigido na obtenção de 
     um aplicativo para execução web. Acredito, sim, ser uma grande melhoria.

E você, tem tido experiências com a versão do MS Access 2013? Se assim for, deixe-nos saber seus pensamentos nos comentários abaixo!


Tags: Access, Access 2013, features, características, 10 Pontos, JET, ACE, SQL, SQL Server, front-end, backend, web technology, SQL Server Reporting Services, SQL Azure, ODBC, ODC,  Web Access Service



VBA Tips - Apagando Arquivos - Delete Files and Folders


Veja também:

MS Excel – Diversas Funções Úteis

É bem provável que já tenha precisado de algo similar no MS Excel, mas não teve a oportunidade de encontrar essa informação de modo organizado, como estou propondo colocar abaixo.

Ao gerarmos os nossos diversos Relatórios, inclusive Dashboards, invariavelmente precisaremos gravar as versões em pastas.

Digamos que deseje gravar as informações geradas nas pastas customizadas, talvez com a data do momento da geração. Precisaríamos criar uma pasta para a transferência dos mesmos.

É importante frisar que não há como recuperar o arquivo excluído uma vez que o tenhamos deletado. O arquivo não é enviado para a lixeira do Windows.

Em qualquer um dos códigos listados neste artigo, ao executar um código VBA que inclua a instrução Kill, o código poderá excluir todos os arquivos armazenados em uma pasta ou em um servidor de rede.

Sub DelSample001()
 ' Você pode usar este código para apagar todos os arquivos na pasta de teste.
    On Error Resume Next

    Kill "E:\Bernardes\Dashboards\*.*"

    On Error GoTo 0
End Sub

Sub DelSample002()
 ' Você pode usar este código para apagar todos os arquivos xl? na pasta de teste.
    On Error Resume Next
    Kill "E:\Bernardes\Dashboards\*.xl*"
    On Error GoTo 0
End Sub

Sub DelSample003()
 ' Você pode usar este código para apagar um arquivo xls na pasta de teste.
    On Error Resume Next

    Kill "E:\Bernardes\Dashboards\ron.xls"
    On Error GoTo 0
End Sub

Sub DelSample004()
 ' Você pode usar este código para apagar a pasta inteira.
 ' Note: RmDir delete only a empty folder
    On Error Resume Next

    Kill "E:\Bernardes\Dashboards\*.*"    ' delete all files in the folder

    RmDir "E:\Bernardes\Dashboards\"  ' delete folder

    On Error GoTo 0
End Sub

Sub Delete_Whole_Folder()
' Você pode usar este código para apagar a pasta inteira sem remover os 1ºs arquivos como na função DelSample004.
    Dim FSO As Object
    Dim MyPath As String

    Set FSO = CreateObject("scripting.filesystemobject")

    MyPath = "C:\Users\Ron\Test"  '<< Change

    If Right(MyPath, 1) = "\" Then
        MyPath = Left(MyPath, Len(MyPath) - 1)
    End If

    If FSO.FolderExists(MyPath) = False Then
        MsgBox MyPath & " não existe."

        Exit Sub
    End If

    FSO.deletefolder MyPath

End Sub

Sub Clear_All_Files_And_SubFolders_In_Folder()
' Apaga todos os arquivos nas subpastas.
' Certifique-se de que não haja nenhum arquivo aberto na pasta.
    Dim FSO As Object
    Dim MyPath As String

    Set FSO = CreateObject("scripting.filesystemobject")

    MyPath = "E:\Bernardes\Dashboards\Test"  '<< Change

    If Right(MyPath, 1) = "\" Then
        MyPath = Left(MyPath, Len(MyPath) - 1)
    End If

    If FSO.FolderExists(MyPath) = False Then
        MsgBox MyPath & " não existe."
        Exit Sub
    End If

    On Error Resume Next

    ' Apaga os arquivos.
    FSO.deletefile MyPath & "\*.*", True

    ' Apaga as pastas.
    FSO.deletefolder MyPath & "\*.*", True

    On Error GoTo 0

End Sub

Para impedir que os arquivos sejam excluídos pela instrução Kill, certifique-se de que as declarações de Kill sempre refiram-se a um caminho válido e a um nome de arquivo válido. Os exemplos a seguir demonstram a sintaxe que devemos utilizar:

   Kill "\\server\share\myfiles\*.old"
   Kill "E:\myfiles\*.old"
   Dim FileList As String
   FileList = "*.old"
   Kill "\\server\share\myfiles\" & FileList
   Dim FileList As String, NetPath As String
   NetPath = "\\server\share\myfiles\"
   FileList = "*.old"
   Kill NetPath & FileList
Esses são usos válidos da instrução Kill. 

Tags: VBA, Tips, Ron de Bruin, delete, files, file, folder, kill




VBA Word - Abra um documento e encontre uma Palavra nele - Function to open/get a Word document and Find a string

Inline image 1












O propósito da função VBA disponibilizada a seguir é o de abrir um documento do MS Word e encontrar a próxima ocorrência de uma seqüência específica. Além disso, teremos mais um excelente exemplo do uso do late binding com essa automação vinculada à função AppActivate. Ahh, e sim, este é um post para usuários avançados.

É sempre bom relembrar que uma das vantagens de usarmos late binding (uso de objetos genéricos, como o objWd na função), é o de não sermos obrigados a fazermos uma referência a uma biblioteca em particular. Termos a liberdade de não efetuarmos uma referência direta liber-nos da necessidade de sabermos qual a versão do MS Word que está sendo usada pelo usuário final da aplicação. Mas como não existe almoço de graça, a desvantagem é a de que precisamos definir um constante para ser usado no MS Word, razão pela qual o wdFindContinue foi definido.

O AppActivate torna fácil ativarmos um aplicativo específico que estiver aberto na tela. Como? Fazendo referência direta a legenda contida no título da respectiva janela ativa. Neste caso, quando o texto não é encontrado, o documento do MS Word ainda fica ativo, sendo necessário apenas ativar o código do aplicativo em execução antes de mostrarmos a caixa de mensagem. Se não tivéssemos esse cuidado o usuário poderia acabar por ouvir aquele 'ding' quando a caixa de mensagem aparecesse, sendo coberta pelo documento do MS Word e despercebida pelo usuário.

Caso utilize um documento do MS Word como um manual do usuário para o seu aplicativo, digamos do MS Access, por exemplo, poderá usar essa função VBA no evento Click de um botão que abra o documento e detecte a posição da palavra ou expressão desejada num determinado título u trecho do texto no documento. Mas, caso clicasse no botão novamente, quando o documento já estivesse aberto, a próxima ocorrência do texto seria encontrada, tornando-se uma maneira simples de fornecer ajuda sensível ao contexto. Chique hein!

Function OpenAndFindWordExpression (WordFileName As String, Optional WordFindText) As Boolean
' If the Microsoft Word file specified in WordFileName is not open yet, it will
' be opened.  If a value for WordFindText is specified, it will find the next
' occurance of the value.
' Copyright © 2009 Extra Mile Data

On Error GoTo Err_OpenWordAndFind
   
    Dim strPrompt As String
    Dim objWd As Object
    Dim strAppName As String
    Dim intPos As Integer
    Const wdFindContinue As Integer = 1
    
    ' Get the name of the Word document from the path in WordFileName
    ' by finding the last \ and grabbing all the characters to the right
    ' of that position.

    Let intPos = InStrRev(WordFileName, "\")
    Let strAppName = Right(WordFileName, Len(WordFileName) - intPos)
    
    ' Se o documento do Word estiver aberto ele efetuará a busca, caso não esteja aberto, o abrirá.    
    ' Torna a aplicação visível.
    Let objWd.Application.Visible = True
  
    If Not IsMissing(WordFindText) Then
        With objWd.Application.Selection.Find
            Let .Text = WordFindText
            Let .Forward = True
            Let .Wrap = wdFindContinue
            Let .Format = False
            Let .MatchCase = False
            Let .MatchWholeWord = False
            Let .MatchWildcards = False
            Let .MatchSoundsLike = False
            Let .MatchAllWordForms = False
            
            .Execute            
      
            If Not .Found Then      
                AppActivate Application.Name

                Let strPrompt = "O termo de busca '" & WordFindText & "' não pôde ser encontrado."
                MsgBox strPrompt, vbInformation + vbOKOnly, "Não encontrado!"

                AppActivate strAppName

                Let OpenWordAndFind = False

                GoTo Exit_OpenWordAndFind
            End If
        End With
    End If
    
    AppActivate strAppName
    
    Let OpenWordAndFind = True
    
Exit_OpenWordAndFind:
    On Error Resume Next

    Set objWd = Nothing
    Exit Function
    
Err_OpenWordAndFind:
    Select Case Err.Number
    Case 432

        strPrompt = "Este documento do MS Word não pôde ser encontrado:" _
        & vbCrLf & vbCrLf & WordFileName
        MsgBox strPrompt, vbInformation, "Não encontrado!"
    Case Else
        MsgBox Err.Number & " " & Err.Description, , "OpenWordAndFind"
    End Select
    
    Let OpenWordAndFind = False
    Resume Exit_OpenWordAndFind
End Function


Tags: VBA, Word, late binding, find, document, busca, procura, search,