Este fórum está sendo desativado

Depois de 9 anos, este fórum será desativado. Mas calma.... estamos migrando para uma comunidade no DISCORD. Junte-se a nós.

ENTRAR PARA DISCORD

Tópicos relacionados a códigos VBA, gravação de macros, etc.
  • Avatar do usuário
  • Avatar do usuário
#48027
Bom dia/tarde/noite

Estive tendo um pequeno empecilho. Criei uma planilha no Excel, utilizando captação de dados em tempo real para cotação de câmbio.
Inseri a tabela em questão para as células (A1 até A54)

Na célula A1 encontra-se o texto: US Dollar
Enquanto que as colunas B e C destinam-se aos valores

Exemplo:

A1 = US Dollar
B1 = 1.00 USD
C1 = inv. 1.00 USD

A6 = Brazillian Real
B6 = 4.098.644
C6 = 0.243983

O que estou tentando fazer é criar um histórico de mudança para acompanhamento. Como um preenchimento automático. O Excel seleciona a célula B6 e copia o valor para a célula A60. Porém, o valor na Célula B6 muda a cada 1 minuto, devido aos dados estarem sendo atualizados automaticamente.

Tentei utilizar o VBA para automatizar este processo, porém, como posso definir para a macro em questão verificar se a célula A60 já está preenchida, e então pular para a A61 e realizar o processo de cópia do valor, e então, caso a A61 também se encontre preenchida, ele siga para a A62, e assim por diante? Seria necessário uma estrutura de repetição para o If ou Offset? Ou há alguma outra forma mais simples para resolver isto?
Gravei uma macro realizando o processo manualmente, depois tentei ajustar para este "pulo" de célula, e adicionar a chamada para a função a cada período especificado, mas sem sucesso, ainda sou um pouco leigo em VBA :)
Avatar do usuário
Por Jimmy
Avatar
#48029
Olá,

Você deve pesquisar a coluna A, desde a última célula (linha 1 milhão e pouco), e subir até achar uma célula preenchida. Pegar essa linha e somar 1 para obter a linha livre.

Isso tudo é feito em uma instrução só, super rápida. É ela:

LinhaVaga = Sheets("Plan1").range("A" & Rows.count).end(xlup).row + 1

Se você usar o gravador, clicar em uma célula bem de baixo, na coluna A, e teclar END e depois Seta para cima, realizara um deslocamento até a última célula preenchida. Veja na macro gravada que o comando é o mesmo.

Jimmy San Juan
#48030
Experimente:
Código: Selecionar todos
Sub Teste()
 [B6].Copy IIf([A60] = "", [A60], Cells(Rows.Count, 1).End(3)(2))
End Sub
#48075
Obrigado Jimmy e Osvaldo...testei e o que melhor se encaixou no meu caso foi o código escrito pelo Osvaldo.

No fim do teste meu código acabou ficando o seguinte:

Sub Teste2()
[B6].Copy IIf([A60] = "", [A60], Cells(Rows.Count, 1).End(3)(2))
Application.OnTime Now() + TimeValue("00:00:10"), "Teste2"
End Sub

Ele está pulando a linha onde há dados, e colocando os valores no local certo, mesmo após resetar os dados e limpar as células.

Muito obrigado mesmo!
long long title how many chars? lets see 123 ok more? yes 60

We have created lots of YouTube videos just so you can achieve [...]

Another post test yes yes yes or no, maybe ni? :-/

The best flat phpBB theme around. Period. Fine craftmanship and [...]

Do you need a super MOD? Well here it is. chew on this

All you need is right here. Content tag, SEO, listing, Pizza and spaghetti [...]

Lasagna on me this time ok? I got plenty of cash

this should be fantastic. but what about links,images, bbcodes etc etc? [...]

Estamos migrando para uma comunidade no Discord