web 2.0


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

Procv com Imagens

Neste curto artigo irei demonstrar como utilizar a função PROCV com imagens. Para realizar esta tarefa é bem simples.
Primeiro selecione as imagens que serão exibidas e as cole em uma planilha

Neste caso peguei as fotos de 3 presidentes.
Coloque como legenda o nome do presidente. Feito isto crie um intervalo nomeado para selecionar estes nomes..

Para isto na guia Fórmulas , selecione definir nome

Defina o nome como presidentes , coloque a seguinte fórmula

=DESLOC(Plan1!$A$2;0;0;1;CONT.VALORES(Plan1!$2:$2))

 

Assim o intervalo irá ser redimensionado de acordo com a inserção de novos dados. Criado este nome, em outra planilha, crie uma validação de dados à partir do intervalo nomeado criado. Para criar a validação , selecione a guia Validação de Dados, e insira à partir de uma lista o intervalo que acabamos de criar.

 

Agora a última etapa, use a ferramenta câmera e tire uma foto de qualquer local da planilha (esta ferramenta não é exibida por padrão, procure por ela em todos os comandos na guia de opções) Esta ferramenta exibe uma imagem a partir de um intervalo, para que a imagem seja alterada, iremos criar um novo nome dinâmico à partir da seleção feita na nossa validação. Para este nome use a seguinte fórmula, e defina o nome como Foto

=DESLOC(Plan1!$A$1;0;CORRESP(Plan2!$C$3;Plan1!$A$2:$C$2;0)-1)

Pronto agora selecione sua imagem, e defina o intervalo como =Foto. Você já tem um procv feito com imagens!

Baixe aqui o arquivo com exemplo

Bruno Leite

Office Developer

Set/09

Tags: , , ,

Microsoft Office | VBA

Criando um Ribbon Dinâmico

Neste artigo tratarei da criação dinâmica de ribbons utilizando-se de dados disponíveis na planilha ativa.
Isto é útil em casos em que haja a necessidade dos controles serem alterados, sem necessidade de alterações no código xml.
Estes controles também permitem que sejam passados paramêtros para qualquer rotina.

Primeiro é necessário editar o arquivo xml, do arquivo, para isto abra o arquivo no Office no Office 2007 Custom UI Editor

Neste arquivo xml, criei 2 grupos, cada um deles contendo um combobox

 

 

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">

  <ribbon startFromScratch="true">

 

    <tabs>

 

      <tab id="MeuRibbon" label=" Meu Ribbon Dinâmico" insertBeforeMso="TabHome">

 

        <group id="Grupo1" label="Grupo 1">

          <comboBox id="Cb1"

          label="Selecione a Opção:"

          onChange="MyCombo1_Click"

          getItemCount="CountGrupo1"

          getItemLabel ="LabelGrupo1"

          sizeString="123456789012345678901234567890"

>

          </comboBox>

        </group>

 

        <group id="Grupo2" label="Grupo 2">

          <comboBox id="Cb2"

          label="Selecione a Opção:"

          onChange="MyCombo2_Click"

          getItemCount="CountGrupo2"

          getItemLabel = "LabelGrupo2"

          sizeString="123456789012345678901234567890"

>

          </comboBox>

        </group>

 

      </tab>

 

    </tabs>

  </ribbon>

</customUI>


 

 

As definições xml do combobox são as seguintes:

 

 

comboBox id="Cb2" - definindo o ID do controle

label="Selecione a Opção:"  - definindo o label que será apresentado ao usuário

onChange="MyCombo2_Click" - definindo qual será a ação executada na alteração do controle pelo usuário

getItemCount="CountGrupo2" - retorna a quantidade de itens que serão exibidos no combo

getItemLabel = "LabelGrupo2" - preenche o combobox com os valores 

sizeString="123456789012345678901234567890" - definindo o tamanho do combobox

 

 

 

Pronto o nosso arquivo xml já está pronto para receber os dados em tempo de execução, para que o código funcione , é necessário a criação das rotinas no nosso arquivo xlsm.

 

O código necessário par ao arquivo .xlsm é o seguinte:

 

 

'Intervalo para o Combo1

Dim cb1rg As Range

'Intervalo para o Combo2

Dim cb2rg As Range

 

'Rotinas para o grupo1

Sub MyCombo1_Click(control As IRibbonControl, text As String)

    Call Minharotina("Grupo 1", text)

End Sub

 

Sub CountGrupo1(control As IRibbonControl, ByRef returnedVal)

    Set cb1rg = Plan1.Range("A2:A" & Plan1.Range("A2").End(xlDown).Row)

    returnedVal = cb1rg.Rows.Count

End Sub

 

Sub LabelGrupo1(control As IRibbonControl, index As Integer, ByRef returnedVal)

    returnedVal = cb1rg.Cells(index + 1).Value

End Sub

 

'Rotinas para o Grupo 2

Sub MyCombo2_Click(control As IRibbonControl, text As String)

    Call Minharotina("Grupo 1", text)

End Sub

 

Sub CountGrupo2(control As IRibbonControl, ByRef returnedVal)

    Set cb2rg = Plan1.Range("B2:B" & Plan1.Range("B2").End(xlDown).Row)

    returnedVal = cb2rg.Rows.Count

End Sub

 

Sub LabelGrupo2(control As IRibbonControl, index As Integer, ByRef returnedVal)

    returnedVal = cb2rg.Cells(index + 1).Value

End Sub

 

 

Sub MinhaRotina(Plan As String, Item As String)

    MsgBox "Você selecionou o item " & Item & " de " & Plan

End Sub



Pronto , para testar feche e abra o arquivo novamente, os dados constantes na coluna A serão exibidos no grupo 1, os dados constantes na coluna B serão exibidos no Grupo 2.


 

 

 

Como este é meu primeiro Post por aqui, dúvidas e sugestões são bem vindas. Caso tenha algum problema com formatação corrigirei assim que possível.

baixe aqui o arquivo de exemplo -> Exemplo RibbonDinamico.xlsm (17,50 kb)



Bruno Leite
Office Developer

 

 

Tags: , , , , ,

Microsoft Office | VBA