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

No que 7 Bilhões de pessoas estão envolvidas neste momento?




Em que estão envolvidas os 7 Bilhões de pessoas no Mundo?

Depois de crescer muito lentamente durante a maior parte da história humana, o número de pessoas na Terra mais do que duplicou nos últimos 50 anos. 



Deixe os seus comentários! Envie este artigo, divulgue este link na sua rede social...



Excel Tips - Populando Combo Box - Multi-Column




Crie um Combobox

Os usuários da versões Excel 2010 e Excel 2007 podem clicar em Inserir a partir da aba Desenvolvedor, clicando no Combo Box na seção de Controles ActiveX.


Os usuários da versão Excel 2003. Clicarão no ícone do Combo Box na caixa de ferramentas.



Agora desenhe o combo Box na sua planilha:



Adicionando itens no Combobox

Para adicionar itens ao seu combobox, execute os seguintes passos.

1. Adicione o código abaixo na área de código de abertura da sua planilha (Workbook Open event), ou o adicione a outro módulo do seu código.

With Sheet1.ComboBox1
   .AddItem "Paris"
   .AddItem "New York"
   .AddItem "London"
End With


Nota: Use Sheet2 se o seu combobox estiver localizado na sua segunda worksheet.

Resultado:


2. Para conectar o conteúdo do combobox a uma célula, clique com o botão direito do mouse no combobox (certifique-se de estar no modo design) e clique em Propriedades. Preencha E2 como a célula a ser preenchida.



Como popular um combobox nos formulários?

Nível da implementação: Intermediário.
Versão em que foi testada: 2000 - 2013.
Descrição: Um combobox é disponibilizado com 10 linhas e treze colunas de informação.

Segue o 1º exemplo:

Option Explicit

Private Sub UserForm_activate()
Dim MyList(10, 10) 'Definindo como array.
' O combobox neste exemplo contém 3 colunas - Implemente quantas colunas desejar

With ComboBox1
.ColumnCount = 3
.ColumnWidths = 75
.Width = 220
.Height = 15
.ListRows = 6
End With

' Definindo tanto a lista como o local de onde obter os dados (Colunas A, D, G)
With ActiveSheet
' MyList (Linha{0 to 9}, Coluna{primeira}) = (Coluna A neste exemplo) ' Não se esqueça de continuar acrescentando para LINHA e COLUNA ' iniciando do zero Não de um MyList(0, 0) = .Range("A1")
MyList(1, 0) = .Range("A2")
MyList(2, 0) = .Range("A3")
MyList(3, 0) = .Range("A4")
MyList(4, 0) = .Range("A5")
MyList(5, 0) = .Range("A6")
MyList(6, 0) = .Range("A7")
MyList(7, 0) = .Range("A8")
MyList(8, 0) = .Range("A9")
MyList(9, 0) = .Range("A10")
' MyList (Linha {0 to 9}, Coluna{segunda}) = (Coluna D neste exemplo) MyList(0, 1) = .Range("D1")
MyList(1, 1) = .Range("D2")
MyList(2, 1) = .Range("D3")
MyList(3, 1) = .Range("D4")
MyList(4, 1) = .Range("D5")
MyList(5, 1) = .Range("D6")
MyList(6, 1) = .Range("D7")
MyList(7, 1) = .Range("D8")
MyList(8, 1) = .Range("D9")
MyList(9, 1) = .Range("D10")
' MyList (Linha {0 to 9}, Coluna {Terceira}) = (Coluna G neste exemplo) MyList(0, 2) = .Range("G1")
MyList(1, 2) = .Range("G2")
MyList(2, 2) = .Range("G3")
MyList(3, 2) = .Range("G4")
MyList(4, 2) = .Range("G5")
MyList(5, 2) = .Range("G6")
MyList(6, 2) = .Range("G7")
MyList(7, 2) = .Range("G8")
MyList(8, 2) = .Range("G9")
MyList(9, 2) = .Range("G10")
End With

' Agora populamos o Combobox
ComboBox1.List() = MyList
End Sub 

Como usar:
Abra uma planilha MS Excel
Selecione Editor Visual Basic (Tools/Macro/Visual Basic Editor)
Na janela do editor VBA (VBE window), selecione Insert/UserForm
Selecione ComboBox a partir da caixa de ferramentas (toolbox), cole-o no Formulário
Clique o botão direito do mouse no formulário
Selecione Inserir código
Então copie e cole o código acima
Testando o código:
Digite alguns dados nas colunas A, D e G na planilha
Exiba o formulário novamente, agora verá as três colunas preenchidas no Combobox

Segue o 2º exemplo:
Populando o controle:

Option Explicit 
 
Private Sub UserForm_Initialize() 
     
    With Me.ComboBox1 
        .AddItem "Item 1" 
        .AddItem "Item 2" 
    End With 
     
End Sub 

Populando a partir da seleção de um range na planilha:

Option Explicit 
 
Private Sub CommandButton1_Click() 
     
    With Sheet1 'code name
        .Range("A1") = Me.ComboBox1.Value 
    End With 
     
End Sub 

Outro:

Private Sub UserForm_Initialize()
    With Worksheets("Sheet1")
        ComboBox1.List = .Range("A1:A" & .Range("A" & .Rows.Count).End(xlUp).Row).Value
    End With
End Sub

Deixe os seus comentários! Envie este artigo, divulgue este link na sua rede social...

Tags:
VBA, Office, Application, Automation, field,  Plan, planilhas, column, Excel, Multi-Collumn, populando, combobox, 


Excel Tips - Ordene Alfabéticamente as suas Abas - Sort your worksheets




O que segue, é a possibilidade de ordenarmos todas as worksheets (abas) contidas numa planilha (arquivo workbook).

Os nossos Dashboards e Scorecards contém diversas pastas num mesmo arquivo do MS Excel.

Em alguns casos precisamos deixar as abas organizadas, em especial no caso da geração automatizada de abas, geradas a partir das consultas efetuadas nos filtros dos Dashboards.

Sim, torna-se necessário que as nossas abas estejam organizada. 

Claro que essa solução também será útil para os noobs que criarem várias pastas, impedindo que estes fiquem perdidos com várias abas nas nossas planilhas.

Esta funcionalidade automatiza a nossa necessidade de organização, fazendo todo o cansativo e enfadonho serviço de organização por nós, colocando as abas em ordem alfabética.

Apenas cole o código abaixo em um novo módulo da planilha que deseja organizar e faça chamadas a ele. Podem evocá-la na abertura e fechamento da mesma, ou através de um comando por combinação de teclas, um botão, ou o que desejar. 

Option Explicit

Function SheetsAlphaSort()
' Author: Date: Contact:
' André Bernardes 13/10/2008 11:07 bernardess@gmail.com
' Ordena de forma alfabética todas as pastas em uma planilha MS Excel.

Dim i As Integer
Dim j As Integer
Dim PrimPastaOrdenar As Integer
Dim UltiPastaOrdenar As Integer
Dim DescrescOrdem As Boolean

Let DescrescOrdem = False

If ActiveWindow.SelectedSheets.Count = 1 Then

'Altera o 1 para o número da pasta que deseja ordenar primeiro.
Let PrimPastaOrdenar = 1
Let UltiPastaOrdenar = Worksheets.Count
Else
With ActiveWindow.SelectedSheets
For i = 2 To .Count
If .Item(i - 1).Index <> .Item(i).Index - 1 Then
MsgBox "Não há como ordenar PASTAS não-adjacentes!"
Exit Sub
End If
Next i

Let PrimPastaOrdenar = .Item(1).Index
Let UltiPastaOrdenar = .Item(.Count).Index
End With
End If

For j = PrimPastaOrdenar To UltiPastaOrdenar
For i = j To UltiPastaOrdenar
If DescrescOrdem = True Then
If UCase(Worksheets(i).Name) > UCase(Worksheets(j).Name) Then
Worksheets(i).Move Before:=Worksheets(j)
End If
Else
If UCase(Worksheets(i).Name) < UCase(Worksheets(j).Name) Then
Worksheets(i).Move Before:=Worksheets(j)
End If
End If
Next i
Next j

End Function


Deixe os seus comentários! Envie este artigo, divulgue este link na sua rede social...

Tags: VBA, 
Office, Excel, automation, alfabética, ordem, ordenar, ascending, descendin, order, sort, workbook, worksheet, sheet


Excel Tips - 10 Dicas para desenvolvedores





Nestas 10 Dicas para reduzir os erros durante o desenvolvimento, não eliminaremos todos os Bugs do nosso código VBA, mas evitaremos alguns percalços comuns durante a criação e o processo de desenvolvimento. Geralmente tais cuidados requererão alguns ajustes mínimos na maneira como desenvolvemos as nossas aplicações.

  Option Explicit - Coloque essa expressão logo no início dos seus módulos. 

Isso forçará você a inicializar quaisquer variáveis que por ventura crie no seu código.

Sim, você será obrigado a definir os tipos de todas as suas variáveis e assim saberá o conteúdo delas.

E sim, isso lhe acrescentará um pouco de trabalho, mas o retorno será excelente, pois lhe poupará problemas como utilizar tipos diferentes de variáveis, escrever erroneamente o nome delas.

O melhor de tudo? As suas rotinas serão executadas mais rapidamente.

  Idente o seu código - Adapte-se a essa ideia

A identação ajuda a compreender o fluxo de ideias que o seu código quer transmitir. 

A identação serve de ajuda quanto a identificar certos procedimentos no código.

Ao utilizar FOR...NEXT, WHILE, IF, CASE, por exemplo, considere a identação como um modo de facilitar, em muito, a identificação destes.

  Cuidado com a expressão On Error Resume Next

Esta instância faz com que o MS Excel ignore quaisquer erros e continue o processamento.

Em algumas situações isso fará com que o MS Excel ignore os erros que não devem ser ignorados.

Imagine só, talvez existam erros no seu código que sequer tenha percebido, por causa deste comando. 

  Use comentários, não economize com eles.

Nada pode ser mais frustrante do que ao revisitar um código desenvolvido a uns meses e perceber que não deixou ali nenhuma "cola" para ajudar no seu trabalho.

Não tenha preguiça, adicione alguns comentários para descrever sua lógica, isso poderá lhe poupar muito tempo em eventuais manutenções que requeiram velocidade. 

  Codifique Simplificadamente

Escreva os seus códigos em módulos pequenos.

Escreva-os de forma simples, direta e bem definida.

Torne rápido uma posterior compreensão por parte de outros analistas e  programadores. 

  Não envergonhe - se: Use o gravador de Macros

O gravado de macro é o professor ideal para muitos que estão aprendendo a programar. 

Analise o modo como soluciona certos procedimentos corriqueiros.

Poupe muito tempo! 

  A primeira solução talvez não seja a melhor

Este é um excelente hábito para se tornar um excelente desenvolvedor.

Considere soluções diferentes para o mesmo problema.

Não é raro demorarmos para implementar uma solução que não se adeqüa muito bem a aplicação como um todo, mas resolve momentaneamente o nosso problema.

Sim, olhe para o lado e desenvolva algo, muitas vezes, totalmente diferente da sua primeira solução. Tal código provavelmente se encaixará melhor na solução total da aplicação.

Gastarei mais um pouco de tempo neste tópico para compartilhar alguns aos de experiência:

Quando nossas mentes estão sobrecarregadas com a pressão da entrega do projeto e ao mesmo tempo dividida com o desenvolvimento técnico do algoritmo, certamente não ficaremos tão absortos quanto gostaríamos.

Muito provavelmente os nossos cérebros estejam focados em terminar o projeto e não em ter as melhores e mais amplas considerações.

O mais importante é usar as suas melhores ideias e não necessariamente as primeiras ideias.

Volte e transforme o seu resultado final em algo melhor - Quando tiver ultrapassado o estágio final da entrega, volte-se para os códigos que envolvem o kernel da nossa aplicação.

Será que usei a melhor solução? 

Tive chance de ver outros códigos desenvolvidos com essa preocupação? 

Há uma harmonia geral deste com o todo?

Sim, ninguém fará isso por você! Desenvolva essa auto disciplina para voltar e melhorar um código que poderá trazer transtornos no futuro, por não ter sido tão abrangente, ou cuidado.

  Fique amigo do Debugador

O debugador é uma excelente ferramenta quando usada plenamente.

Habitue-se a consultar o help e aprender tudo o que pode retirar do debugador.

Poupará muito tempo!

  Reutilize blocos de código

Não há vergonha alguma em reutilizar bons e eficazes códigos.

Obviamente devemos ter o cuidado de zerar todas as variáveis utilizadas, assim que finalizarmos a utilização deste.

Isso tornará o seu código final menor e mais acessível.

Nos tornaremos desenvolvedores melhores, pois os nossos códigos tenderão a ser mais lógicos e amplos. Não serão soluções fechadas e específicas, aderindo apenas ao problema do momento.

10º  Consulte a Internet

Não há como conceber que somente nós, no mundo inteiro, precisamos de uma solução, de um código, um procedimento que ninguém nunca desenvolveu ou usou.

Sempre haverá um código parecido, uma necessidade similar. 

E sabe o melhor de tudo? Alguém com a mente aberta fez questão de compartilhar essa solução.

Então, use o seu tempo para pesquisar outras fontes, elas o tornarão um desenvolvedor melhor e mais completo.

Ahhh, e depois de encontrar e implementar a sua solução, divulgue-a para o máximo de pessoas que puder!

Pode usar este canal, este Blog,  como um meio para isso.



Deixe os seus comentários! Envie este artigo, divulgue este link na sua rede social...

Tags: Excel, VBA, Tips, 10, Dicas, desenvolvimento, development, 


Tips - Rastrei os seus Dashboards, Scorecards, Reports, Relatórios, Planilhas e Aplicações



Você deseja acompanhar quantas pessoas estão acessando as suas Planilhas, Dashboards, Scorecards, e os Relatórios disponibilizados na rede da sua empresa?

Sim, é natural que após termos tanto tempo para prepararmos um belo produto de análise, desejemos acompanhar quem o está consultando. Bem, você pode acompanhar  através de um arquivo de .LOG. 

Isso pode ser facilmente implementado por adicionarmos uma pequena função dentro da sua aplicação. Altere o código para gravar os LOGs em um diretório (ou servidor de arquivos) escondido para acompanhar mesmo que remotamente os acessos à sua aplicação. 

Private Sub Form_Open (Cancel As Integer)
' Author: Date: Contact:
' André Bernardes 18/06/2008 08:21 bernardess@gmail.com
' Sub de abertura do formulário.
' Rastreador inserido em 25.09.2008 - 10:52 
.LOG
.

Dim ThisFormName As String

Let ThisFormName = Me.Name

Call Rastrear ' Registra acesso no Log.
Call ImagesPath
Call SetMoldura("Logando à aplicação", " . . . ")

HideAccessCloseButton ' Elimina o botão fechar na janela da aplicação do Windows.

Me.LblTime.Caption = Now()

Call AssenteAcesso("OF", ThisFormName, "Sys: Splash de abertura.")
Call SetMoldura("", ".: A&A - In Any Place")
End Sub


Cole a função abaixo no seu módulo:

Function Rastrear()
' Author: Date: Contact:
' André Bernardes 25/09/2008 10:01 bernardess@gmail.com
' Cria arquivo .LOG
 
Open Application.CurrentProject.Path & "\" & Left(Application.CurrentProject.Name, Len(Application.CurrentProject.Name) - 4) & ".log" For Append As #1

Print #1, " "
Print #1, "User: " & atCNames(1) & "- " & Trim(atCNames(2)), Now()
Print #1, " In: " & CodeProject.FullName
Print #1, " "

Close #1
End Function

Como sei que você tem bastante imaginação, use este código para registrar todos os acessos de todas as suas aplicações MS Access, MS Excel, MS Word, MS PowerPoint, MS Outlook, etc... no mesmo arquivo .LOG, analisando-o quando desejar. Há uma infinidade de possibilidades de utilização dessa solução.Divirta-se. 


Deixe os seus comentários! Envie este artigo, divulgue este link na sua rede social...

Tags: VBA, LOG, 



VBA Excel - Ordenando os dados de um gráfico - Graph data table sorting via vba




Sim, quanto mais criamos Dashboards, mais estes evoluem. Ao evoluir nossos Dashboards requerem certos tratamentos e cuidados para melhorarem a performance e a apresentação.

O que segue, é uma das muitas dúvidas que caem por aqui, em nosso Blog.

Como posso ordenar a série de dados que demonstro no meu gráfico cada vez que os respectivos dados são atualizados?

Sub RankTable()
    
    Dim chtTemp As Chart
    Dim vntData() As Variant
    Dim objSeries As Series
    Dim lngIndex As Long
    Dim rngSort As Range
    Dim lngRow As Long
    
    Set chtTemp = ActiveSheet.ChartObjects(ActiveSheet.ChartObjects.Count).Chart
    ReDim vntData(1 To chtTemp.SeriesCollection.Count, 1 To 2)
    
    lngIndex = 1
    For Each objSeries In chtTemp.SeriesCollection
        vntData(lngIndex, 1) = objSeries.Name
        vntData(lngIndex, 2) = Application.WorksheetFunction.Index(objSeries.Values, 1, objSeries.Points.Count)
        lngIndex = lngIndex + 1
    Next

    Set rngSort = Range("J1").Resize(UBound(vntData) - LBound(vntData) + 1, 2)
    With rngSort
        .Value = vntData
        .Sort .Cells(1, 2), xlDescending, , , , , , xlNo
        vntData = .Value
    End With
    
    For lngRow = rngSort.Rows.Count To 1 Step -1
        chtTemp.SeriesCollection(vntData(lngRow, 1)).PlotOrder = lngRow
    Next
End Sub

Sim acrescente este código a um módulo, ajuste as referências a planilha e fonte de dados e boa diversão!

Tags: Excel, Order, Sort, VBA, Andy Pope,




eBooks VBA na AMAZOM.com.br

LinkWithinBrazilVBAExcelSpecialist

Related Posts Plugin for WordPress, Blogger...

Vitrine