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

SOLUÇÕES VBA

Desenvolvo aplicações com o VBA.

Utilizo a suíte do Microsoft Office para estender soluções aos clientes.

default.aspx?AssetID=ZA101076371046

Desenvolvo aplicações (ferramentas) com o MS Excel, MS Access, MS Powerpoint, MS Word, MS Outlook, MS Sharepoint. 

Procure melhorar os resultados que vem alcançando na sua empresa hoje. Através da automação realizo todas as tarefas que demandariam muito tempo dos usuários.

Já desenvolvi diversas aplicações em planilhas. Aplicações com o MS Access, Exportação automática de gráficos e tabelas do MS Excel para o MS PowerPoint , Envio automático de relatórios através do MS Outlook. Além disso implementei diversos Dashboards com os seus respectivos KPIs (indicadores de desempenho).

80543.jpg

Trabalhe melhor os dados oriundos do seu ERP (SAP, Microsiga, Datasul, ORACLE, BAAN, PEOPLESOFT, etc).

Crie relatórios personalizados, implemento um visual (layout) profissional aos indicadores de sua empresa.

Consulte as condições de pagamento e prazos para desenvolvimento.

Instruções para o comprador

1. Todas as minhas atuações são freelance.

2. O preço e prazos passados variam de acordo com a urgência e complexidade do serviço. Para maiores informações, solicite um orçamento.

3. Ao solicitar um orçamento, envie documento contendo as especificações detalhadas do que necessita ser realizado. Assim identifico melhor a sua necessidade.

Delivery Tempo de entrega em dias: A combinar

Tags: André Luiz Bernardes, TI, Tecnologia da Informação, KPI, KPIs, Key performance Indicator, PMBOK, escopo, stakeholder, Indicadores, DW, Data Warehousing, BSM, Business Scorecard Manager, BSC, Balanced Scorecard, Dashboard


André Luiz Bernardes

A&A® - Work smart, not hard.


VBA Excel - Manipulando Tabela Dinâmica - Refresh Pivot Table

Quando estamos efetuando nossas implementações em Dashboards e preocupados com a performance das suas atualizações, também passa por nossas cabeças a necessidade de que sejam dinâmicos. Para isso torna-se imprescindível saber atualizar as nossas Pivot Tables (Tabelas Dinâmicas) utilizando o VBA. Como fazê-lo?



Quando a planilha for aberta ela pode automaticamente evocar um código que atualize todas as PT (Pivot Table) da nossa planilha

Sub Worksheet_Activate()
    Run "PT_Refresh" 
End Sub


Atualizando uma PT simples:

Sub PT_Refresh()

    Dim pt As PivotTable

    Set pt = ActiveSheet.PivotTables("MyPivot")

    pt.RefreshTable

End Sub

Atualizando várias PTs:

Sub AllWorksheetPTs()

    Dim pt As PivotTable

    For Each pt In ActiveSheet.PivotTables

        pt.RefreshTable

    Next pt

End Sub

Atualiza todas as PTs selecionadas na worksheet:

Sub ChosenPTs()

    Dim pt As PivotTable

    For Each pt In ActiveSheet.PivotTables    

        Select Case pt.Name

            Case "PivotTable1", "PivotTable4", "PivotTable8"

                pt.RefreshTable

            Case Else

        End Select

    Next pt

End Sub


Atualizando PTs selecionadas previamente na planilha:

Sub AllWorkbookPTs()    
    Dim pt As PivotTable
    Dim ws As Worksheet

    For Each ws In ActiveWorkbook.Worksheets

        For Each pt In ws.PivotTables

            pt.RefreshTable
        Next pt

    Next ws
End Sub


bernardes_Ciclo_Dashboard_Pivot_Table_3.png

Talvez você deseja executar um procedimento após a atualização de um PT, como por exemplo enviar por e-mail, atualizar uma base de dados externa, etc...Como automatizar isso?

Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)
     Call ClonaPivot
End Sub

Tags: VBA, PT, Pivot Table, Tabela Dinâmica, refresh, table, workbook, worksheet, automation

André Luiz Bernardes

A&A® - Work smart, not hard.


VBA Excel - Preenchendo lacunas vazias com dados.

Quem está constantemente desenvolvendo soluções através do MS Excel, regularmente depara-se com a seguinte situação:

Primeiro copia-se um determinado Range, recém atualizado, que reflete o resultado de um filtro específico de uma Pivot Table (Tabela Dinâmica).

Segundo, ao colar o Range recém copiados da PT (Pivot Table), percebe que algumas lacunas ficaram vazias, pois a PT em cada coluna, não repete uma série de dados, apenas demonstra a primeira ocorrência desta.



Como fazer para que todo o Range copiado fique com os dados completos, mesmo que repetidos, preparando-os para serem exportados para uma tabela do MS Access por exemplo?



Assim que o Range estiver selecionado, aplique-lhe a seguinte série de códigos:

' Prepara os dados para serem enviados a uma tabela no MS Access.
Selection.SpecialCells(xlCellTypeBlanks).Select

Let Application.CutCopyMode = False
Let Selection.FormulaR1C1 = "=R[-1]C"

Tags: Bernardes, VBA, Office, Excel, Range, select, copy, Pivot Table, PT, Tabela Dinâmica, fill, data, lacuna, preenchendo


André Luiz Bernardes

A&A® - Work smart, not hard.



VBA Excel - Como selecionar um range de tamanho variável para cópia.

Ocorre incontáveis vezes, a necessidade de copiarmos um determinado Range (Sendo este em alguma ocasiões, o resultado da atualização de uma Pivot Table (Tabela Dinâmica)) para outro local, como fazê-lo?

    ' Marcar e copia o range de Dados atualizado.
    Range ("B6:E" & LastLine()).Select          ' Seleciona a área com dados.

    Selection.Copy                                       ' Copia a área com dados.

    Range ("G6").Select                                ' Seleciona o local para onde os dados serão copiados.

    ' Cola os dados selecionados.
    Selection.PasteSpecial _
    Paste:=xlPasteValues, _
    Operation:=xlNone, _
    SkipBlanks:=False, _
    Transpose:=False

Para determinarmos qual a última linha com dados, usamos aqui uma antiga e familiar funcionalidade deste Blog. Replico-a abaixo:

Function LastLine() As Variant

    ' Demonstra a última linha com conteúdo.
    Let LastLine = Worksheets ("[NOME DA TAB]").Cells(Worksheets("[NOME DA TAB]").Rows.Count, 5).End(xlUp).Row - 1
    
End Function


Tags: Bernardes, VBA, Office, Excel, Range, select, copy, Pivot Table, PT, Tabela Dinâmica


André Luiz Bernardes

A&A® - Work smart, not hard.


VBA Excel - Selecionar dados numa Tabela Dinâmica - Select Data in Pivot Table

Partindo do ponto que a Pivot Table (Tabela Dinâmica) já existe e tem o nome de 'PT_DDD01'*, o código necessário para selecioná-la inteira será:

' Seleciona toda a Pivot Table.
ActiveSheet.PivotTables("PT_DDD01").PivotSelect "", xlDataAndLabel, True

* Ahh, você não sabe como atribuir um nome a PT (Pivot Table)?
 
É simples: 
- Clique em qualquer parte da PT
- Selecione o Menu Opções do MS Excel
- No cantos superior esquerdo você enxerga o nome da PT, podendo alterá-lo se desejar.




Tags: Bernardes, VBA, Office, Excel, Pivot Table, PT, Tabela Dinâmica, Select


André Luiz Bernardes

A&A® - Work smart, not hard.


VBA Tips - Evocando chamada ao Painel de Controle


Sei que há alguns posts atrás falei sobre como é rápido usarmos as funcionalidades das APIs dentro do VBA.

Controlling Windows Regional Settings From Vba
VBA controlling IE confirmation popup box
VBA to open control panel's "Internet Date & Time" applet
VBA: How To: Floating VBA Control Panel for Initialization
Panel Class
Controlling Windows Regional Settings from VBA
controlling IE using vba from within a worksheet additional info
Controlling external programs using vba
VBA controlling Acrobat Distiller


Agora, quero fazer uma abordagem distinta,  por usar o comendo SHELL.

Para chamar qualquer tela do Painel de Controle não precisamos necessariamente evocar uma API

'Para chamar a tela principal do Painel de Controle:
Call Shell("rundll32.exe shell32.dll,Control_RunDLL", vbNormalFocus)

'Para chamar a tela Adicionar ou Remover Programas:
Call Shell("rundll32.exe shell32.dll,Control_RunDLL appwiz.cpl,,1", vbNormalFocus)

'Para chamar a tela Adicionar ou Remover Programas, na aba
'Instalao do Windows:
Call Shell("rundll32.exe shell32.dll,Control_RunDLL appwiz.cpl,,2", vbNormalFocus)

'Para chamar a tela Adicionar ou Remover Programas, na aba
'Disco de Inicializao:
Call Shell("rundll32.exe shell32.dll,Control_RunDLL appwiz.cpl,,3", vbNormalFocus)

'Para chamar a tela Vdeo, na aba Segundo Plano:
Call Shell("rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,0", vbNormalFocus)

'Para chamar a tela Vdeo, na aba Proteo de Tela:
Call Shell("rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,1", vbNormalFocus)

'Para chamar a tela Vdeo, na aba Aparncia:
Call Shell("rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,2", vbNormalFocus)

'Para chamar a tela Vdeo, na aba Configurao:
Call Shell("rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,3", vbNormalFocus)

'Para chamar a tela Configuraes Regionais, na aba
'Configuraes Regionais:
Call Shell("rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,0", vbNormalFocus)

'Para chamar a tela Configuraes Regionais, na aba
'Nmero:
Call Shell("rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,1", vbNormalFocus)

'Para chamar a tela Configuraes Regionais, na aba 
'Moeda:
Call Shell("rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,2", vbNormalFocus)

'Para chamar a tela Configuraes Regionais, na aba'Hora:
Call Shell("rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,3", vbNormalFocus)

'Para chamar a tela Configuraes Regionais, na aba'Data:
Call Shell("rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,4", vbNormalFocus)

'Para chamar a tela Joystick:
Call Shell("rundll32.exe shell32.dll,Control_RunDLL joy.cpl", vbNormalFocus)

'Para chamar a tela Mouse:
Call Shell("rundll32.exe shell32.dll,Control_RunDLL main.cpl @0", vbNormalFocus)

'Para chamar a tela Teclado:
Call Shell("rundll32.exe shell32.dll,Control_RunDLL main.cpl @1", vbNormalFocus)

'Para chamar a tela Impressoras:
Call Shell("rundll32.exe shell32.dll,Control_RunDLL main.cpl @2", vbNormalFocus)

'Para chamar a tela Fontes:
Call Shell("rundll32.exe shell32.dll,Control_RunDLL main.cpl @3", vbNormalFocus)

'Para chamar a tela Mail e Fax:
Call Shell("rundll32.exe shell32.dll,Control_RunDLL mlcfg32.cpl", vbNormalFocus)

'Para chamar a tela Multimdia, na aba Audio:
Call Shell("rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,0", vbNormalFocus)

'Para chamar a tela Multimdia, na aba Vdeo:
Call Shell("rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,1", vbNormalFocus)

'Para chamar a tela Multimdia, na aba MIDI:
Call Shell("rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,2", vbNormalFocus)

'Para chamar a tela Multimdia, na aba Msica de CD:
Call Shell("rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,3", vbNormalFocus)

'Para chamar a tela Multimdia, na aba Dispositivos:
Call Shell("rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,4", vbNormalFocus)

'Para chamar a tela Som:
Call Shell("rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl @1", vbNormalFocus)

'Para chamar a tela Modem:
Call Shell("rundll32.exe shell32.dll,Control_RunDLL modem.cpl", vbNormalFocus)

'Para chamar a tela Rede:
Call Shell("rundll32.exe shell32.dll,Control_RunDLL netcpl.cpl", vbNormalFocus)

'Para chamar a tela Senhas:
Call Shell("rundll32.exe shell32.dll,Control_RunDLL password.cpl", vbNormalFocus)

'Para chamar a tela Sistema, na aba Geral:
Call Shell("rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl,,0", vbNormalFocus)

'Para chamar a tela Sistema, na aba Gerenciador'de Dispositivos:
Call Shell("rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl,,1", vbNormalFocus)

'Para chamar a tela Sistema, na aba Perfis deHardware:
Call Shell("rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl,,2", vbNormalFocus)

'Para chamar a tela Sistema, na aba Performance:
Call Shell("rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl,,3", vbNormalFocus)

'Para chamar a tela Opes de Acessibilidade, na aba'Teclado:
Call Shell("rundll32.exe shell32.dll,Control_RunDLL access.cpl,,1", vbNormalFocus)

'Para chamar a tela Opes de Acessibilidade, na aba'Som:
Call Shell("rundll32.exe shell32.dll,Control_RunDLL access.cpl,,2", vbNormalFocus)

'Para chamar a tela Opes de Acessibilidade, na aba'Vdeo:
Call Shell("rundll32.exe shell32.dll,Control_RunDLL access.cpl,,3", vbNormalFocus)

'Para chamar a tela Opções de Acessibilidade, na aba'Mouse:
Call Shell("rundll32.exe shell32.dll,Control_RunDLL access.cpl,,4", vbNormalFocus)

'Para chamar a tela Opes de Acessibilidade, na aba'Geral:
Call Shell("rundll32.exe shell32.dll,Control_RunDLL access.cpl,,5", vbNormalFocus)

'Para chamar a tela do Assistente (Adicionar novo'Hardware):
Call Shell("rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl @1", vbNormalFocus)

'Para chamar a tela Data e Hora:
Call Shell("rundll32.exe shell32.dll,Control_RunDLL timedate.cpl", vbNormalFocus)

'Para chamar a tela DiskCopy:
Call Shell("rundll32 diskcopy.dll,DiskCopyRunDll", vbNormalFocus)



Reference: 
Tags: Bernardes, VBA, Office, SHELL, API, rundll32.exe, Painel de Controle, Control Painel,



eBooks VBA na AMAZOM.com.br

LinkWithinBrazilVBAExcelSpecialist

Related Posts Plugin for WordPress, Blogger...

Vitrine