Views

...

Important:

Quaisquer soluções e/ou desenvolvimento de aplicações pessoais, ou da empresa, que não constem neste Blog podem ser tratados como consultoria freelance.

E-mails

Deixe seu e-mail para receber atualizações...

eBook Promo

Principais Tendências de Análises de Dados em 2017

Principais Tendências de Análises de Dados em 2017

Principais Tendências de Análises de Dados em 2017

Há muito interessante em matérias que falam sobre a análise de dados e sua tendência. O investimento em Business Intelligence e Análises foi extremamente elevada e continua a crescer a um ritmo rápido. É possível que 2017 seja um dos anos mais emocionantes, onde o mercado de Análises moldarão uma série de eventos relacionados aos negócios e além disso. Convido-o a ler sobre aquelas, que acredito, serão as principais tendências de investimento em 2017.



Como sempre, estas são apenas previsões, e o futuro sobre eles mostrará se são mesmo realistas. Independentemente dos exatos resultados dessa especulação para o mercado de Análises em 2017, este ano certamente será um momento interessante para o cenário de negócios, e vamos precisar esperar para ver o impacto das Análises em moldar nossa indústria.



Série Big Data


Business de Big Data



Soluções de Big Data




Envie seus comentários e sugestões e compartilhe este artigo!

brazilsalesforceeffectiveness@gmail.com

✔ Brazil SFE®✔ Brazil SFE®´s Facebook´s Profile  Google+   Author´s Professional Profile  ✔ Brazil SFE®´s Pinterest       ✔ Brazil SFE®´s Tweets

Acessando o AD - Active Directory - com o Excel

Acessando o AD - Active Directory - com o Excel


A exibição do Active Directory no Excel pode ajudar os muito a sua manutenção de várias maneiras. Gerenciar o Active Directory no Excel pode economizar muito o tempo dos administradores de rede.


O que é o Active Directory?

O Active Directory ( AD ) é um Banco de Dados que armazena, entre outras coisas, contas de usuário para uma rede Microsoft, também conhecido como um domínio. O Excel pode trabalhar com AD usando LDAP (Lightweight Directory Access Protocol) que é um protocolo para comunicação com o AD.


Como o Active Directory é importante?

Os administradores de rede podem usar esse aplicativo para baixar dados do AD e criar:


  • Diretórios de telefone
  • Listagens do Departamento
  • Folhetos de roteamento (cartões de simpatia, abordagens RH, etc)
  • E mais.


Os administradores de rede podem usar esse aplicativo para atualizar os números de telefone do usuário ou o departamento / empresa atribuído.
  
Desenvolvedores VBA podem usar esse aplicativo como um guia para trabalhar com o Active Directory.


CASE

Ao instalar recentemente um novo sistema telefônico. Suas extensões foram alteradas. Os números de discagem direta foram mudados. Foi necessárias atualizar o AD. No entanto, o uso do aplicativo Active Directory da Microsoft, embora ótimo para alterações de um usuário, não lida bem com atualizações em massa. Então usei este aplicativo para facilitar esse trabalho.

Ao mesmo tempo, os usuários precisavam de uma lista de diretórios regularmente atualizada. A função de exibição deste aplicativo fornece a lista de diretórios mais atualizada possível sem sobrecarregar o pessoal, matar árvores ou adicionar ao aterro sanitário.


Envie seus comentários e sugestões e compartilhe este artigo!
brazilsalesforceeffectiveness@gmail.com

✔ Brazil SFE®✔ Brazil SFE®´s Facebook´s Profile  Google+   Author´s Professional Profile  ✔ Brazil SFE®´s Pinterest       ✔ Brazil SFE®´s Tweets

Dicionário de Dados em VBA - documentação de sintaxe completa

Dicionário de Dados em VBA - documentação de sintaxe completa



Dicionário de Dados são coleções aprimoradas. Gosto de usá-los em qualquer lugar onde tenha uma coleção, exceto quando uso uma coleção de Classes. Infelizmente, eu não encontrei uma única fonte que documenta o objeto inteiro. Então, para minha própria documentação,  decidi utilizar isso. Ao final do artigo veja a lista de fontes usadas neste artigo.

Vantagens dos objetos do dicionário sobre as coleções

  • A propriedade CompareMode especifica a sensibilidade a maiúsculas e minúsculas para Chaves.
  • Um método para determinar se um objeto existe no Dicionário.
  • Um método para extrair todas as chaves numa matriz.
  • Um método para extrair todos os itens numa matriz.
  • Um método para alterar um valor Chave.
  • Um método para remover todos os itens do Dicionário.
  • As chaves do dicionário não estão limitadas ao tipo de dados String.

Observação: uma diferença importante entre o objeto de coleção e o objeto de dicionário é o comportamento da propriedade de item. Se usar a propriedade Item para fazer referência a uma chave inexistente em uma coleção, receberá um erro. Se usar a propriedade Item para fazer referência a uma chave inexistente em um dicionário, essa chave será adicionada ao dicionário. Use o método Exists para determinar se uma chave está ou não presente em um dicionário.

Sintaxe

Crie um objeto de dicionário em qualquer versão do XL
Isso usa um exemplo de ligação tardia que eu prefiro para simplificar a implantação para outros PCs.
Dim dicMyDictionary as Object
Set dicMyDictionary = CreateObject("Scripting.Dictionary")
Definir a sensibilidade das teclas
dicMyDictionary.CompareMode = vbBinaryCompare 'Case Sensitive
dicMyDictionary.CompareMode = vbTextCompare 'Case Insensitive
Adicionar Item
dicMyDictionary.Add ItemKey, myItem
Adicionar ou alterar item
Isso às vezes é chamado de "Silent Add" método. Se uma chave não existir, ela será adicionada.
dicMyDictionary(ItemKey) = myItem
-or-
Set dicMyDictionary(ItemKey) = myObject
Determinar se existe um item
Se você não quiser o recurso "Silent Add", use isso antes de tentar alterar itens.
If dicMyDictionary.Exists(ItemKey) Then ...
Obter Número de Itens
Debug.Print = dicMyDictionary.Count
Obter um item por chave
MyItem = dicMyDictionary(ItemKey)
- or -
Set MyObject = dicMyDictionary(ItemKey)
Obter um item por número
Nota! Os itens do dicionário começam por 0
MyItem = dicMyDictionary.Items()(ItemNumber)
- or -
Set MyObject = dicMyDictionary.Items()(ItemNumber)
Obter uma chave por número
MyKey = dicMyDictionary.Keys()(ItemNumber)
Carregar todos os itens em uma matriz
Dim vArray as Variant
vArray = dicMyDictionary.Items()
Carregar todas as chaves em uma matriz
Dim vArray as Variant
vArray = dicMyDictionary.Keys()
Remover um item
dicMyDictionary.Remove(ItemKey)
Remover todos os itens
dicMyDictionary.RemoveAll


Usos

Eliminar duplicatas
Os dicionários são perfeitos para criar listas exclusivas usando sua função "adicionar silenciosamente".

Função GetDistinct ( ByVal oTarget como Range ) como Variant
     Dim vArray como Variant
     Dim dicMyDictionary como objeto
     Dim v como variante
     Definir dicMyDictionary = CreateObject ("Scripting.Dictionary")
     VArray = oTarget
     Para Cada v em vArray
     DicMyDictionary (v) = v
     Próximo
     GetDistinct = dicMyDictionary.Items ()
Função final



Pesquisa de tabela de código
Se pretendemos fazer referência a uma tabela repetidamente e "aleatoriamente" (em oposição a "sequencialmente"), colocar a tabela em um dicionário é fácil e rápido, bem como fácil e rápido de usar.
Função Pública Tbl2Dic ( ByVal oTarget As Range ) As Object
Dim dicMyDictionary As Object
Dim lRow As Long
Dim lCols As Long
Definir dicMyDictionary = CreateObject ("Scripting.Dictionary")
LCols = oTarget.Columns.Count - 1
Para lRow = 1 Para oTarget.Rows.Count
Com oTarget.Cells (lRow, 1)
Definir dicMyDictionary (.Value) = .Offset (0, 1) .Resize (1, lCols)
Terminar com
Próximo
Definir Tbl2Dic = dicMyDictionary

Função final 
Exemplos:
' Obter a coluna 2 da tabela de 2 colunas denominada "Estados" onde coluna 1 = "VA"
Dim dicStates como objeto
Definir dicStates = Tbl2Dic ([Estados])
     Debug.print dicStates ("VA")
' Obter a coluna 3 a partir da tabela de 3 colunas denominada "Estados" onde a coluna 1 = "VA"   
Dim dicStates como objeto
     Definir dicStates = Tbl2Dic ([Estados])
     Debug.print dicStates ("VA") (1,2)



Classe Container
Eu uso dicionários para armazenar objetos de classe na memória porque os dicionários podem conter qualquer coisa.



Public dicWorksheets as Object
Sub InitMyClass ()
Dim MyWorksheet      A s clsWorksheet
Dim oWks como planilha
Se dicWorksheets não é nada então _
   Definir dicWorksheets = CreateObject ("Scripting.Dictionary")
Para cada oWks neste ThisWorkbook.Worksheets
Set MyWorksheet = Novo clsWorksheet
     Definir MyWorksheet.Worksheet = oWks
     Definir dicWorksheets (oWks.Name) = MyWorksheet
Próximo
Função final

Envie seus comentários e sugestões e compartilhe este artigo!

brazilsalesforceeffectiveness@gmail.com

✔ Brazil SFE®✔ Brazil SFE®´s Facebook´s Profile  Google+   Author´s Professional Profile  ✔ Brazil SFE®´s Pinterest       ✔ Brazil SFE®´s Tweets

Twitando com o VBA - É Possível?

Twittando com o VBA



Estive recentemente trabalhando num projeto baseado em VBA que incorpora a possibilidade de postar atualizações de status para Twitter.

Antes de colocá-lo juntos consultei vários exemplos de códigos, especificações, documentação API, mensagens em blog, fórum, etc ... Estou compartilhando meus esforços aqui na esperança de salvar qualquer outra pessoa trabalhando em um projeto semelhante um pouco de tempo e / ou frustração . Eu também acrescentou um par de características que eu não tinha visto em outros lugares (por exemplo, usando v1.1. Da API do Twitter, incluindo imagens com tweets, integrando ligação encurtamento, etc ...), então (espero!) Eu sou acrescentando algo de novo para o corpo Tweet-via-VBA da literatura.


Alguns aspectos preliminares:
  • Claro, todos têm sua própria maneira de nomear variáveis ​​/ funções / subs, tabs, comentários, etc ... Se algo que estiver implementado aqui não combinar com o seu modo, faça as alterações que achar necessário.
  • Desejei evitar Dlls de terceiros ou add-ins. Assim, estamos usando scripts de controle Microsoft (msscript.ocx), e um par de bibliotecas .Net (o que significa que precisará ter o .NET Framework 1.1 ou posterior instalado). Uma desvantagem para isso é que o Microsoft Script só pode ser usado em versões do MS Office de 32 bits (2007, 2010 e 2013 devem ser todos OK). Nas versões 32 bits ou 64 bits do Windows o código com está sendo executado no Office 64 bits. Se precisar modificar este código para rodar em 64 bits no Office, precisará implementar algumas alterações.
  • Certifique-se de ter adicionado as referências ao Microsoft WinHTTP Services, XML Microsoft e Microsoft Script ao seu projeto (Ferramentas -> Adicione referências no editor VBA)
  • Você encontrará alguns casos óbvios de repetição de código (por exemplo, as funções get_basestring ,  get_status_basestring e  get_media_basestring  são bastante idênticos). Como estava originalmente trabalhando desta maneira, foi mais fácil concentrar a tarefa dessa forma (ou seja, Tweets de texto, Tweets com mídia, obtendo o serviço do Twitter e a informação do estado). Pode-se facilmente refazer as funções anteriores em uma única função, existem oportunidades adicionais para tornar o código mais eficiente / elegante e consistente.
  • Este desenvolvimento foi criado por Greg Williams e está licenciado sob atribuição Creative Commons.
  • O código é fornecido como está. Todo o uso é por sua conta e risco.


Funções da API do Windows e declarações de tipo

Primeiro, vamos definir um par de funções da API do Windows usando o Declare  palavra-chaveTambém vamos criar alguns tipos de dados definidos pelo usuário usando o  Tipo  comunicado.

#If VBA7 Then
    Public Declare PtrSafe Sub GetSystemTime Lib "Kernel32" (lpSystemTime As SYSTEMTIME)
    Public Declare PtrSafe Function SystemTimeToFileTime Lib "Kernel32" (lpSystemTime As SYSTEMTIME, lpFileTime As FILETIME) As LongPtr
    Public Declare PtrSafe Function LocalFileTimeToFileTime Lib "Kernel32" (lpLocalFileTime As FILETIME, lpFileTime As FILETIME) As LongPtr
    Public Declare PtrSafe Function FileTimeToSystemTime Lib "Kernel32" (lpFileTime As FILETIME, lpSystemTime As SYSTEMTIME) As LongPtr
#Else
    Public Declare Sub GetSystemTime Lib "Kernel32" (lpSystemTime As SYSTEMTIME)
    Public Declare Function SystemTimeToFileTime Lib "Kernel32" (lpSystemTime As SYSTEMTIME, lpFileTime As FILETIME) As Long
    Public Declare Function LocalFileTimeToFileTime Lib "Kernel32" (lpLocalFileTime As FILETIME, lpFileTime As FILETIME) As Long
    Public Declare Function FileTimeToSystemTime Lib "Kernel32" (lpFileTime As FILETIME, lpSystemTime As SYSTEMTIME) As Long
#End If
 
Public Type FILETIME
    dwLowDateTime As Long
    dwHighDateTime As Long
End Type
 
Public Type SYSTEMTIME
    wYear As Integer
    wMonth As Integer
    wDayOfWeek As Integer
    wDay As Integer
    wHour As Integer
    wMinute As Integer
    wSecond As Integer
    wMilliseconds As Integer
End Type

A sintaxe  #If VBA7 Então ... # Else ... # End If,  PtrSafe  palavra-chave, e  LongPtr  tipo de dados são usados para permitir que o código seja executado na versão 64 bits do Office (ver  este artigo MSDN  para mais informações).
Novamente, conforme mencionado acima, o código como está (usando o Microsoft Script Control), não será executado no Office 64 bitsMas, se decidir escrever alternativas / uso que não precisam Microsoft Script Control (ou no caso aparentemente improvável que a Microsoft lança uma versão de 64 bits do msscript.ocx), vai ser útil para ter suas declarações de função API 64-bit de pronto.

CONSTANTES
A seguir, vamos definir algumas constantes. Para obtermos as chaves de API do Twitter necessárias e os tokens, precisaremos nos inscrever no Twitter como um desenvolvedor, em seguida, registrar o aplicativo.

Neste exemplo, também usaremos encurtador de links do Google  para encurtar os links incluídos nos tweets. Se quiser fazer o mesmo, precisará se inscrever como um desenvolvedor do Google e obter uma chave de API.
Const cnsAPIMethodP As String = "POST"
Const cnsAPIMethodG As String = "GET"
Const cnsOauthConsumerKey As String = "yourtwitterconsumerkey"
Const cnsOauthConsumerSecret As String = "yourtwitterconsumersecret"
Const cnsOauthToken As String = "yourtwitteraccesstoken"
Const cnsOauthTokenSecret As String = "yourtwitteraccesstokensecret"
Const cnsURLPost As String = "https://api.twitter.com/1.1/statuses/update.json"
Const cnsURLMedia As String = "https://api.twitter.com/1.1/statuses/update_with_media.json"
Const cnsURLStatus As String = "https://api.twitter.com/1.1/help/configuration.json"
Const cnsMethod As String = "HMAC-SHA1"
Const cnsOauthVersion As String = "1.0"
'Following only necessary if using Google's goo.gl link shortener API
Const cnsGoogleShortenerURL As String = "https://www.googleapis.com/urlshortener/v1/url"
Const cnsGoogleShortenerKey As String = "yourgoogleshortenerkeyhere"

Funções auxiliares

Em seguida, olharemos para algumas funções auxiliares para criar / enviar nossos tweets.
O  LocalTimeToUTC  função converte um valor de data em formato UTC. Graças ao código do Allen Wyatt.
Public Function LocalTimeToUTC(dteTime As Date) As Date
    Dim dteLocalFileTime As FILETIME
    Dim dteFileTime As FILETIME
    Dim dteLocalSystemTime As SYSTEMTIME
    Dim dteSystemTime As SYSTEMTIME
 
    dteLocalSystemTime.wYear = CInt(Year(dteTime))
    dteLocalSystemTime.wMonth = CInt(Month(dteTime))
    dteLocalSystemTime.wDay = CInt(Day(dteTime))
    dteLocalSystemTime.wHour = CInt(Hour(dteTime))
    dteLocalSystemTime.wMinute = CInt(Minute(dteTime))
    dteLocalSystemTime.wSecond = CInt(Second(dteTime))
 
    Call SystemTimeToFileTime(dteLocalSystemTime, _
      dteLocalFileTime)
    Call LocalFileTimeToFileTime(dteLocalFileTime, _
      dteFileTime)
    Call FileTimeToSystemTime(dteFileTime, dteSystemTime)
 
    LocalTimeToUTC = CDate(dteSystemTime.wMonth & "/" & _
      dteSystemTime.wDay & "/" & _
      dteSystemTime.wYear & " " & _
      dteSystemTime.wHour & ":" & _
      dteSystemTime.wMinute & ":" & _
      dteSystemTime.wSecond)
End Function
Twitter usa o OAuth Autorization para validar todas as solicitações. Um dos parâmetros necessários do OAuth é um timestamp (ou seja, o número de segundos decorridos desde 1 de janeiro de 1970 00:00:00 GMT). função get_timestamp  fornece uma seqüência timestamp no formato exigido.

Public Function get_timestamp() As String
    get_timestamp = DateDiff("s", #1/1/1970#, LocalTimeToUTC(Now))
End Function

função EncodeBase64 recebe um array de bytes e converte para uma string codificada em base64É usado para converter dados binários em uma cadeia de caracteres ASCIIPensava que esta era uma técnica escorregadia; criar um documento XML (usando o objeto MSXML2.DOMDocument), crie um nó e e atribuia os dados binários para ele. Em seguida, basta ler a propriedade de texto do mesmo nó (MSMXL2.DOMDocument irá lidar com a conversão automaticamente). Graças a Tim Hastings  para o código.
Public Function EncodeBase64(ByRef arrData() As Byte) As String
 
    Dim objXML As MSXML2.DOMDocument
    Dim objNode As MSXML2.IXMLDOMElement
 
    Set objXML = New MSXML2.DOMDocument
 
    ' byte array to base64
    Set objNode = objXML.createElement("b64")
    objNode.DataType = "bin.base64"
    objNode.nodeTypedValue = arrData
    EncodeBase64 = objNode.Text
 
    Set objNode = Nothing
    Set objXML = Nothing
 
End Function
Base64_HMACSHA1 é uma função que utiliza um par de classes do namespace .Net Sistema de hash uma string em um SHA-1 digere e calcula um código de autenticação HMAC usando uma chave secreta. (você pode usar o método VBA CreateObject para utilizar quaisquer classes .Net que são 'explicitamente expostas como componentes COM') Graças ao código da HK1.
Public Function Base64_HMACSHA1(ByVal sTextToHash As String, ByVal sSharedSecretKey As String) As String
 
    Dim asc As Object
    Dim enc As Object
    Dim TextToHash() As Byte
    Dim SharedSecretKey() As Byte
 
    Set asc = CreateObject("System.Text.UTF8Encoding")
    Set enc = CreateObject("System.Security.Cryptography.HMACSHA1")
 
    TextToHash = asc.Getbytes_4(sTextToHash)
    SharedSecretKey = asc.Getbytes_4(sSharedSecretKey)
    enc.key = SharedSecretKey
 
    Dim bytes() As Byte
    bytes = enc.ComputeHash_2((TextToHash))
    Base64_HMACSHA1 = EncodeBase64(bytes)
    Set asc = Nothing
    Set enc = Nothing
 
End Function
função binary_file_to_string  recebe um arquivo binário (como um arquivo de imagem) e a converte para uma stringVamos eventualmente usar esta função quando quisermos incluir imagens em nossos tweetsNada muito complicado aqui; apenas ler um arquivo binário em um array de bytes, em seguida, usaremos a função VBA built-in  StrConv para converter a matriz de bytes para uma cadeia Unicode.

Public Function binary_file_to_string(strFileName) As String
 
    Dim bytArr() As Byte
 
    Dim strConvData As String
 
    Dim intFile As Integer
    intFile = FreeFile
 
    Open strFileName For Binary Access Read As intFile
 
    If LOF(intFile) > 0 Then
        ReDim bytArr(0 To LOF(intFile) - 1) As Byte
        Get intFile, , bytArr
        strConvData = StrConv(bytArr, vbUnicode)
    End If
 
    Close intFile
 
    binary_file_to_string = strConvData
 
End Function

Mais tarde, em nosso código, precisaremos gerar valores únicos. A função get_GUID fornece uma maneira fácil de gerar tal string (retira caracteres não-alfanumérico, daí a remoção dos hífens do GUID e das chaves exteriores.) Graças ao código do Oorang via vbaexpress.com.

Public Function get_GUID() As String
    get_GUID = Replace(Mid$(CreateObject("Scriptlet.TypeLib").Guid, 2, 36), "-", "")
End Function
A função strToByteArray recebe uma string e a converte para um array de bytes utilizando a função StrConv do VBA. Ao incluir uma imagem no tweet, vamos usar esta função para preparar o corpo da solicitação HTTP.

Private Function strToByteArray(sText As String) As Byte()
    strToByteArray = StrConv(sText, vbFromUnicode)
End Function

A  função UrlEncode converte caracteres não-ASCII em um formato codificado por percentual. Essa função cria um MSScriptControl.ScriptControl objeto e define o idioma para JScript (a implementação MS de JavaScript). Podemos, então, executar funções de JavaScript, especificamente, o built-in da função encodeURIComponent, que irá adequadamente texto UrlEncode passado para ele.

Public Function UrlEncode(str As String)
 
    Dim objEnc As MSScriptControl.ScriptControl
    Set objEnc = New MSScriptControl.ScriptControl
    objEnc.Language = "JScript"
 
    objEnc.AddCode "function encode(str) {return encodeURIComponent(str);}"
    Dim encoded As String
 
    encoded = objEnc.Run("encode", str)
    UrlEncode = encoded
 
End Function

Funções do Twitter

Com o nosso exército de funções auxiliares prontos para lançar dentro, é hora de twittar!
A fim de postar uma atualização de status (ou seja, tweet), vamos (amplamente) precisa:
  1. Calcular uma assinatura de autenticação especial
  2. Enviar um pedido http adequadamente construído
Parece bastante simples, mas o cálculo da assinatura envolve algumas etapas distintas. Vamos expandir nossa lista de tarefas:
  1. Calcular uma assinatura de autenticação especial
    • Criar uma cadeia de texto aleatório que é susceptível de ser exclusivo
    • Calcular um timestamp época
    • Criar uma cadeia de base com a qual para calcular a nossa assinatura de autenticação
    • Criar uma chave especial com o qual calcular a nossa assinatura de autenticação
    • Criar assinatura de autenticação
  2. Enviar um pedido http construída adequadamente
Nós tomaremos cada seção em ordem.

Aguarde os próximos artigos...

Deixe seus comentários, compartilhe este artigo!

brazilsalesforceeffectiveness@gmail.com
✔ Brazil SFE®✔ Brazil SFE®´s Facebook´s Profile  Google+   Author´s Professional Profile  ✔ Brazil SFE®´s Pinterest       ✔ Brazil SFE®´s Tweets




eBooks VBA na AMAZOM.com.br

LinkWithinBrazilVBAExcelSpecialist

Related Posts Plugin for WordPress, Blogger...

Vitrine