segunda-feira, 17 de junho de 2013

Excel - Como acessar a escalação de um time do Cartola FC através do VBA

No VBA é possível declarar um objeto do Intenet Explorer. Para isso acesse Ferramentas > Referências, na tela do VBA, que pode ser acessada pelo atalho (Alt+F11) no Excel.


Aparecerá a seguinte tela:


Habilite a função "Microsoft Internet Controls" e depois clique em "OK".

Insira um Módulo para facilitar o desenvolvimento:

Com um módulo, suas funções ficam visíveis para todas as planilhas.

Importante: Para a macro funcionar é necessário estar logado no Cartola: Faça o login no Internet Explorer. https://loginfree.globo.com/login/438

Insira a seguinte função no módulo recém criado:
 Sub navega_cartola_fc()  
Dim navegador As Object
Dim time As String
Set navegador = New InternetExplorer
time = "chupinsco-fc" 'Digite aqui o time
navegador.Navigate "http://cartolafc.globo.com/#!/time/" + time
While navegador.Busy
Wend
Dim r, c As Integer
Dim elemCol as object
Set elemCol= navegador.Document.getElementsByTagName("tbody")
Application.Wait TimeSerial(Hour(Now()), Minute(Now()), Second(Now()) + 3)
For r = 0 To elemCol(0).Rows.Length - 1
For c = 0 To elemCol(0).Rows(r).Cells.Length - 1
ActiveSheet.Cells(r + 1, c + 1) = _
elemCol(0).Rows(r).Cells(c).innerText
Next c
Next r
Set elemCol = Nothing
Set navegador = Nothing
End Sub

Para executar, basta pressionar F5, depois de clicar em parte interna do código.

Explicando seu funcionamento:
1. Um objeto tipo Internet Explorer é instanciado (navegador = New InternetExplorer)
2. Uma variável string time é criada, no caso o complemento do time Chupinsco FC que é (time = "chupinsco-fc"). Este é o nome do time da forma que aparece no link do Cartola. Essa variável pode ser modificada para qualquer time desejado.
3. O comando "Navegador.Navigate" é utilizado para acessar determinado link através do objeto.
4. A expressão "While navegador.busy : Wend" faz com que a aplicação aguarde até que o Internet Explorer não esteja mais ocupado carregando o link.
5. As variáveis "r" e "c" são instanciadas como inteiros. Elas representam a referência da "Coluna/Col" e "Linha/Row"
6. Um objeto elemCol é instanciado, para representar um elemento adquirido através da função método "getElementsByTagName". Com essa função, é localizado no código fonte da página todos os Elementos existentes com a palavra "tbody". Isso representa que todos os elementos tipo tabela <tbody> são armazenados no objeto "elemCol".
7. Um comando de espera, como o Aplication.wait é inserido a fim de evitar problemas na hora de carregar o objeto elemCol.
8. Dois laços tipo For são encadeados com as varíáveis "r" e "c" para correr entre o total de linhas "elemCol(0).Rows.Length" e pelo total de colunas "elemCol(0).Rows(r).Cells.Lenght".
9. O que retorna o valor de cada conjunto (linha, coluna) da tabela HTML é a função "innerText". No caso o elemCol(0) <- O primeiro elemento representado por zero, que corresponde a tabela do time.
Para representar uma linha e coluna: elemCol(0).Rows(r).Cells(c).innerText.
10. O comando ActiveSheet.Cells(r+1,c+1) representa a posição em que será atribuído o valor correspondente da tabela que está em HTML.

Neste exemplo o resultado no Excel para este fluxo é:


domingo, 9 de junho de 2013

Excel - Como desabilitar avisos e aleras em macros

Quando criamos macros e não queremos que o excel exiba alertas como:
Devemos desativar no início do código o seguinte método:

Application.DisplayAlerts = False

sábado, 8 de junho de 2013

Excel - Variáveis de Ambiente utilizando o comando Environ

Um comando muito útil é o Environ. Com ele é possível retornar variáveis de ambiente, como o nome de usuário por exemplo:

nome_usuario = Environ("USERNAME")

Outras variáveis como: "COMPUTERNAME", "TEMP", "USERPROFILE", "SYSTEMDRIVE" também podem ser retornadas.
Com o nome do usuário é possível, por exemplo, criar uma macro para controle de alterações em planilhas.

sexta-feira, 7 de junho de 2013

Excel - Desabilitar movimentação de tela e aumentar desempenho de macro

Se for desejado que o usuário não veja o que a macro está fazendo, ou então, para aumentar significativamente a performance da macro, é possível desativar no ínicio do código o método ScreenUpdating:

Application.ScreenUpdating = False

Assim, o usuário só verá o resultado final da Macro.

quinta-feira, 6 de junho de 2013

Excel - Mensagem ao selecionar uma célula utilizando validação de dados

Uma forma simples e útil de exibir uma mensagem ao selecionar uma célula é utilizando a validação de dados. Selecione a célula, ou conjunto de células, que deseja adicionar uma mensagem e clique no ícone de "Validação de Dados" que está na aba "Dados" do Excel 2007/10:


Uma janela irá aparecer, basta clicar na aba "Mensagem de Entrada" e digitar a mensagem desejada:


Quando se clicar na célula em que foi configurada a validação, a mensagem aparecerá:


Excel - Uso do PROCV para buscar valores em outra página

A função PROCV é extremamente útil para buscar valores correspondentes em um conjunto de dados. Existem alguns cuidados necessários para o seu uso.
Neste exemplo a "Coluna B" da "Plan1" busca valores correspondentes da "Coluna A" na aba "Plan2".
Abaixo, na "Plan2", uma simples tabela com localidades e valores.


Na "Plan1" é inserida uma fórmula com PROCV para buscar os valores correspondentes na "Plan2".


Neste exemplo é necessário inserir a fórmula na "Coluna B" para cada linha que seja necessário buscar um valor na "Plan2". Um cuidado especial para a forma de digitar, pois deve corresponder exatamente ao conteúdo da "Coluna A" da "Plan2", caso contrário, um erro de localização é apresentado:


Entendendo a fórmula PROCV:

valor_procurado: Célula que corresponde ao valor a ser buscado
matriz_tabela: Conjunto de dados, onde o valor procurado está na primeira coluna. No caso "Plan2!A:B".
núm_índice_coluna: Coluna que retorna o dado buscado. No caso "2" pois é a segunda coluna, correspondendo a "Coluna B" da "Plan2".
[procurar_intervalo]: "0" indica correspondência exata, ou seja, retornar se encontrar exatamente o valor na "Coluna A" da "Plan2"


domingo, 2 de junho de 2013

Excel - Fórmula para transformar tipo hora em número decimal

Essa fórmula é muito útil para calcular o valor de horas trabalhadas. Para transformar, por exemplo (03:30) em "3,5" e poder multiplicar por um valor de hora, basta utilizar a função INT da seguinte maneira:
=(B5-INT(B5))*24*C5
Neste caso a célula com o formato hora é a "B5", e a célula com o valor da hora é a "C5". Caso o valor da célula "B5" seja "03:30" e o valor da célula "C5" seja "R$ 20,00" o resultado será "R$ 70,00" (da conta "3,5*20").