web 2.0


Como Segmentar Dados no Excel 2010

É bastante comum a necessidade de segmentação de dados. Neste vídeo, mostro como você pode segmentar dados em diversas planilhas utilizando a ferramenta de tabela dinâmica do Excel 2010. Os passos ensinados neste vídeo também se aplicam ao Excel 2007.



Tags: , ,

Microsoft Office

Excel 2010 Formatação Condicional Barra de Dados

Neste vídeo dou uma rápida prévia sobre a nova formatação condicional utilizando barra de dados no Excel 2010. Como todos já sabem, o Excel 2007 já vem com várias ferramentas de business intelligence e tais ferramentas foram melhoradas no Excel 2010. Neste caso específico, nós saímos de barras de dados simples para barra de dados turbinadas, com muitas novidades para todos os amantes de Excel.



Tags: , , , ,

Microsoft Office

Excel 2010: Novos elementos do copiar e colar

Neste vídeo dou uma rápida prévia sobre o copiar e colar no Office 2010, em especial no Excel 2010. Como todos já sabem, o Office 2010 introduziu o Live Preview que é uma visualização prévia de uma formatação. Pois bem, este live preview foi transferido para o copiar e colar, trazendo grandes ganhos e benefícios para os usuários.

Tags: , , , ,

Microsoft Office

Usando o clipboard com VBA

Dentre os recursos disponíveis no VBA podemos encontrar uma biblioteca chamada DataObjects.

trata-se de um conjunto de objetos que, dentre outras funções, podem ser usados para manipular a area de transferencia do windows.

abaixo segue os métodos basicos da area de transferencia

 

Dim dto As New DataObject

'Envia um conteudo de texto para area de transferencia
Sub EnviaParaAreaTransferencia(sText As String)
    dto.SetText sText
    dto.PutInClipboard
End Sub

'Captura conteudo da area de transferencia
Sub PegaConteudo()
    dto.GetFromClipboard
    EnviaParaAreaTransferencia "teste"
    MsgBox dto.GetText
End Sub
'Limpa a area de transferencia
Sub LimpaAreaTransferencia()
    dto.Clear
End Sub

ate a proxima...

Tags: , , , ,

Microsoft Office | VBA

Curso Excel 2003 sobre ADO e ADOX (ActiveX Data Objects) - Parte 4

CURSO ADO e ADOX COMPLETO

 

Caso você ainda não tenha lido a terceira parte, voce pode acessá-la em ADO ADOX (ActiveX Data Objects).

2.5  Contando registros em um recordset

Uma propriedade importante de um recordset é a propriedade Recordcount. Diferentemente do DAO (onde precisamos mover dentro dos registros e retornar ao primeiro para não obtermos o famigerado -1), no ADO a contagem é feita diretamente, bastando apenas determinar a propriedade.

O código abaixo dará o número de registros contidos na tabela Categorias (pois selecionamos todos os registros ao utilizarmos o asterisco). Em termos gerais, a propriedade retorna o número de registro no recordset o qual pode ou não representar a tabela por completo:

Sub RecordsetRecCount()

    Dim cn      As New ADODB.Connection

    Dim rs      As New ADODB.Recordset

   

    cn.Open strCn

    rs.Open "SELECT * FROM Categorias", cn, adOpenKeyset, adLockPessimistic

   

    Debug.Print rs.RecordCount

   

    rs.Close

    cn.Close

    Set rs = Nothing

    Set cn = Nothing

 

End Sub

2.6.     Abrindo um recordset baseado em critériosAbrindo um recordset baseado em critérios

Abrir uma tabela por completo em um recordset nós somos, de certo modo, redundantes. Com isso quero dizer que normalmente nós desejamos apenas parte dos dados e não todos. Por exemplo, poderíamos querer todos os clientes iniciados pela letra “C”.

Neste caso, nós precisamos determinar na instrução SQL o que desejamos que seja retornado em nosso recordset. Para isso nós utilizamos a cláusula WHERE.

O ideal nestes casos é termos uma string declarada para escrevermos a instrução SQL. Com a string pronta nós a introduzimos no argumento do método Open e o comprimento da instrução é dastricamente reduzido.

Vejamos alguns exemplos de instruções SQL que fazem isso. Aqui vemos como passar um parâmetro, pois como queremos basear a consulta em uma condição não podemos amarrar a condição dentro da rotina.

Sub executarRs()

    Call RecordsetWhere(1)

End Sub

 

Sub RecordsetWhere(ByVal código As Long)

    Dim cn          As New ADODB.Connection

    Dim rs          As New ADODB.Recordset

    Dim strSQL      As String

   

    strSQL = "SELECT * FROM Produtos WHERE CódigoDaCategoria=" & código

    cn.Open strCn

   

    With rs

        .Open strSQL, cn, adOpenKeyset, adLockPessimistic

        .MoveFirst

        Debug.Print "Registros para o recordset da categoria " _

            & código & " --> " & .RecordCount

        Debug.Print vbCr & "NOMES DOS PRODUTOS"

        Do While Not .EOF

            Debug.Print !NomeDoProduto

            .MoveNext

        Loop

    End With

   

    rs.Close

    cn.Close

    Set rs = Nothing

    Set cn = Nothing

 

End Sub

Uma vez executado, teremos a seguinte impressão na janela imediata;

 

 

 

 

Figura 23 Resultado da impressão do recordset

O exemplo acima assume uma passagem de parâmetro numérica. Suponha um outro cenário onde o que queremos é retornar todos os produtos contendo uma string qualquer, como proceder?

O próximo exemplo será um pouco mais elaborado e utilizaremos o comparador LIKE. Precisaremos de um formulário como segue:

 

Figura 24 Formulário de seleção

No formulário digitaremos o que buscamos e escolheremos o tipo de busca. O botão Executar deve conter a seguinte instrução:

Private Sub cmdExecutar_Click()

    Call RecordsetLike(Me.txtBusca, Me.cboTipo.Value)

End Sub

A rotina RecordsetLike recebe dois argumento: 1) texto de busca e 2) o tipo de busca.

Sub RecordsetLike(ByVal strBusca As String, ByVal Tipo As String)

    Dim cn          As New ADODB.Connection

    Dim rs          As New ADODB.Recordset

    Dim strSQL      As String

    Dim lngLin      As Long

   

    On Error GoTo Err_Handler

   

'   Determina a opcao escolhida pelo usuário para remontar

'   a string de busca

    Select Case UCase(Tipo)

 

'       Se for registros que "terminam em" alguma coisa

'       adicionar o apóstrofo e sinal de percentual

'       para indicar que termina na string digitada pela usuário

        Case "TERMINA EM"

            strBusca = "'%" & strBusca & "'"

           

        Case "COMEÇA EM"

            strBusca = "'" & strBusca & "%'"

           

        Case "CONTÉM"

            strBusca = "'%" & strBusca & "%'"

           

        Case Else

            MsgBox "Opção de busca inválida. Cancelando a operação...", _

                vbExclamation

            Exit Sub

    End Select

   

           

   

    strSQL = "SELECT * FROM Produtos"

    strSQL = strSQL & " WHERE NomeDoProduto Like " & strBusca

    cn.Open strCn

   

    lngLin = 3

    With rs

        .Open strSQL, cn, adOpenKeyset, adLockPessimistic

        .MoveFirst

       ActiveSheet.Cells(1, 1) = "Registros para o recordset da categoria " _

            & strBusca & " --> " & .RecordCount

        ActiveSheet.Cells(2, 1) = "NOMES DOS PRODUTOS"

        Do While Not .EOF

             ActiveSheet.Cells(lngLin, 1) = !NomeDoProduto

             lngLin = lngLin + 1

            .MoveNext

        Loop

    End With

   

Limpar:

    On Error Resume Next

    rs.Close

    cn.Close

    Set rs = Nothing

    Set cn = Nothing

    Exit Sub

 

Err_Handler:

    MsgBox Err.Description, vbCritical, Err.Number

    Resume Limpar

End Sub

Diferentemente do caso numérico, aqui nós precisamos envelopar a string em apóstrofos. Também utilizamos o sinal de percentual para determinar o tipo de busca, isto é se o sinal aparece no início da string a busca é para produtos terminados com aquela string.

Por outro lado, se o sinal aparece no final da string a busca é para produtos iniciados por aquela string. E, finalmente, se a string contiver um sinal no início e fim, então a busca é por produtos que contenham a string.

CURSO ADO e ADOX COMPLETO

Tags: , , , , , ,

Microsoft Office | VBA

Excel 2010 PowerPivot: Parte 1

O Excel 2010 PowerPivot é o novo  nome do Projeto Gemini. Em termos básicos, o PowerPivot é um Tabela Dinâmica (PivotTable) bombada.

O PowerPivot é um addin que permite criar pastas de trabalho Excel para visualização de dados através de objetos já conhecidos de todos nós: tabelas dinâmicas e gráficos dinâmicos. A diferença é no volume de dados analisados.

Enquanto o Excel possui uma limitação no quesito linha-coluna, o PowerPivot remove esta limitação. Outro ponto importante diz respeito a compressão dos dados que são armazenados na pasta de trabalho. O arquivo final não somente conterá as análises como também os dados, porém, em um arquivo extremamente compacto e maleável.

Vejamos como colocar o PowerPivot para funcionar. Os passos abaixo assumem que você já baixou e instalou o Office 2010 e o PowerPivot está presente, porém a guia não aparece. Neste caso, siga os passos abaixo:

·         Clique em “File” à Excel Options à Add-Ins à COM Add-Ins à Go

·         Selecione o Add-In Microsoft.AnalysisServices.Modeler.FieldList.Addin.Integration

·         Clique em OK

Você agora terá uma nova guia para o PowerPivot conforme abaixo:


Figura 1: Guia do PowerPivot

 O próximo passo é abrir a janela do PowerPivot. Simplesmente, clique no botão PowerPivot Windows. A janela se abrirá:


Figura 2: Janela do PowerPivot

Há várias opções para se obter dados externos tais como banco de dados (SQL, Access, etc), arquivos (Excel, texto, etc)... No caso específico, escolherei um banco de dados Access. Selecionado o arquivo, você poderá testar a conexão:


Figura 3: Conexão de dados

No próximo passo você deve escolher de onde virão os dados que serão importados. Escolha a opção bem como a tabela/consulta que contém os dados. Finalmente, a importação ocorrerá:


Figura 4: Importação bem-sucedida dos dados

A importação de cerca de 1,2 milhões de registros levou cerca de 90 segundos em uma máquina virtual. Podemos considerar um excelente desempenho.

No próximo artigo, continuarei com a criação da tabela dinâmica utilizando o PowerPivot.

 

Tags: , , ,

Microsoft Office

Curso Excel 2003 sobre ADO e ADOX (ActiveX Data Objects) - Parte 2

Neste tópico veremos alguns dos objetos importantes do ADO tais como “Connection” e “Recordset” assim como propriedades e métodos destes objetos os quais utilizamos para efetuar tarefas em nosso banco de dados. Você pode checar o primeiro artigo sobre ADO ADOX (ActiveX Data Objects).

Inicio pela conexão, pois nós precisamos de uma conexão aberta para abrir conjuntos de registros (recordsets) e efetuar operações em registros e tabelas como inserção, exclusão e edição de registros.

Vejamos então como abrir uma conexão em ADO.

Via de regra, para abrir um conexão ADO nós utilizamos o método Open de um objeto Connection. A parte importante aqui é a string de conexão. Conforme já explicado, podemos obter tal string diretamente do banco de dados através da propriedade Connection do objeto CurrentProject. Feito isso, basta copiar a string para utilização no seu projeto Excel.

Uma outra alternativa é utilizar um Data Link. Data Link será discutido mais adiante no curso.

Se a fonte de dados muda, então uma string é mais apropriada, pois não está ligada a uma fonte específica, bastando apenas adaptar conforme necessário (ou criar uma função para retornar a string dado certos parâmetros). De qualquer modo, a decisão final ficará a cargo mesmo de quem programa.

Para abrir a conexão podemos utilizar o seguinte código:

Sub conexao()

    Dim cn      As ADODB.Connection

    Dim strCn   As String

   

    strCn = "Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;"

    strCn = strCn & "Data Source=C:\Northwind.mdb;"

   

    Set cn = New ADODB.Connection

    cn.Open strCn

End Sub

Note que acima, primeiramente declaramos o objeto, em seguida o instanciamos e finalmente o abrimos utilizando o método Open  do objeto Connection para abrir a conexão. Uma alternativa a isso é simplesmente declarar e instanciar ao meu tempo e logo a seguir abrir a conexão:

Sub conexao()

    Dim cn      As New ADODB.Connection

    Dim strCn   As String

   

    strCn = "Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;"

    strCn = strCn & "Data Source=C:\Northwind.mdb;"

   

    cn.Open strCn

   

End Sub

Uma vez que a conexão esteja aberta e tenhamos terminado o seu uso, nós precisamos fazer duas coisas com ela:

1.Fechá-la

2.Limpá-la da memória

Para fechar uma conexão nós utilizamos o método Close do objeto. Para limpar o objeto da memória nós o setamos como sendo Nothing (nada):

cn.Close

Set cn = Nothing

Portanto, o processo completo entre declaração, abertura, fechamento e limpeza da conexão ficará:

Sub conexao()

    Dim cn      As New ADODB.Connection

   

    cn.Open strCn

   

'   Executaremos algo neste espaço

   

    cn.Close

    Set cn = Nothing

 

End Sub

Agora que o leitor já sabe como efetuar os passos acima, vejamos como abrir um recordset (conjunto de registros) o qual depende de uma conexão aberta para ser viável.

Tags: , , , ,

Microsoft Office | VBA

Listando Arquivos

Algumas vezes, precisamos criar Ferramentas em VBA, nas quais é necessário listar os arquivos ou pastas em determinado drive da máquina.
Podemos realizar esta tarefa usando o Scripting RunTime, ou mesmo o Shell, porém existe um recurso nativo que permite obter o mesmo resultado.
No exemplo a seguir são retornados todos os arquivos Excel na pasta D:\Projetos

 

Sub ListarArquivos()

Dim Files As Variant

Files = Dir("D:\Projetos\*.xls*", vbArchive)

While Files <> ""

    Debug.Print Files

    Files = Dir(, vbArchive)

Wend

End Sub

Com ela também é possível retornar as pastas, basta usar vbDirectory, ao invés de vbArchive, ou usar filtros com o nome de arquivo. Por exemplo usando 

Files = Dir("D:\Projetos\B*.xls*", vbArchive)

Será retornado todos os arquivos Excel que começam com a letra B.

 

Bom é isto ai, até uma próxima!



Bruno Leite

Office developer

 

Tags: , ,

Microsoft Office | VBA

Userform Builtin VBA Calendar (Calendário criado em Userform)

É de conhecimento de todos que desenvolvem que existem dois (ou ate mais)  componentes activex de calendário, o Microsoft Calendar Control e o Month View Activex Control são alguns dos exemplos, para uso em projetos VB/VBA.

Especificamento em projetos VBA, o uso desses controles implica em validações de segurança no uso de componentes externos por parte dos aplicativos Office, como o Excel por exemplo. Isso significa que não há como fugir de algumas caixas de dialogos de aviso (nem mesmo via VBA, e não ha como desativa-las facilmente).

Um exemplo tipicos dessas mensagens é a de que componentes externos estão sendo inicializados pelo Excel;

 

image

Para contornar esse tipo de situação especificamente para o MS Calendar, resolvi criar o meu proprio controle de calendário totalmente em VBA

 

 

Para usa-lo é bem simples:

  1. Crie uma varável do tipo frmCalendar
  2. Exiba o formulário (Show)
  3. Aguarde a data que será clicada.

Segue abaixo um esboço do codigo

 

Instruções de Uso
 
'Uso do Form calendar para retorno da data selecionada
Sub UsoCalendar()
  'Declarar uma variável do tipo frmCalendar
   Dim FC As frmCalendar
   Dim dtData As Date
  'Instancia
   Set FC = New frmCalendar
   'Exibi o form e aguarda o dia selecionado
   FC.Show
   'Devolve a data que foi clicado
   dtData = FC.SelectDate
   'Descarrega o form
   Unload FC
   MsgBox dtData
End Sub

Clique aqui para Baixar o arquivo

Att. Adelson RM Silva

 

Tags: , , , , ,

Microsoft Office | VBA

Renomear Arquivos

Sabe com renomear arquivos via VBA ?.

Existem algumas formas de fazer isso como por ex: via Shell Automation, WMI...

mais uma maneira bastante simples e direta, e totalmente VBA é usar a função Name

 

Ex:

Code:

Sub RenomearArquivo()

 

Name "c:\arquivo.txt" as "c:\novo_arquivo.txt"

 

End Sub

Tags: , , , , ,

Microsoft Office | VBA