Utilizar uma variáv...
 
Notifications
Clear all

Utilizar uma variável dentro do Activecell.Offset

8 Posts
3 Usuários
0 Reactions
2,088 Visualizações
(@edson-dias)
Posts: 3
New Member
Topic starter
 

Bom dia Pessoal,

Recentemente fiz um minicurso de Vba, e resolvi criar uma planilha de saída e entrada de estoqute para o meu trabalho.
Em certa etapa do preenchimento do meu formulário, pretendo que o excel armazene o endereço de uma coluna em uma variável "x" ( apenas o número da coluna ) como é possível ver abaixo:

Range("A3").Select
Selection.End(xlToRight).Select
ActiveCell.Offset(0, 1).Select
ActiveCell.FormulaR1C1 = TextBox1.Text
End If

x = "=CELL(""col"")"

Esta variável x está declarada globalmente como variant.
Eis que surge o meu problema: Pretendo utilizar esta variável em um Activecell.offset como demonstrado abaixo:

Private Sub CommandButton1_Click()
Activelcell.Offset(0, x).Select
ActiveCell.FormulaR1C1 = TextBox4.Text

Porém o excel retorna a seguinte mensagem de erro para o comando ActiveCell.offset(0,x).select : " Erro em tempo de execução '424' , O objeto é obrigatório
Alguém saberia me dizer o que estou fazendo errado? É possível utilizar variáveis dentro do Activecell.offset ?

Desde já agradeço a ajuda!

 
Postado : 29/03/2016 6:18 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Problema de digitação, arrume :

Activelcell.Offset(0, x).Select

ActiveCell.Offset(0, x).Select ' sem o "l"

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 29/03/2016 7:20 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Deverá tambem gerar erro a segunda linha:
Selection.End(xlToRight).Select --> Posiciona o cursor/seletor na ultima coluna da linha ativa range(XFD3") por exemplo.
ActiveCell.Offset(0, 1).Select --> Ao tentar mudar para a próxima coluna, que não existe, pois já está na ultima

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 29/03/2016 7:30 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Deverá tambem gerar erro a segunda linha:
Selection.End(xlToRight).Select --> Posiciona o cursor/seletor na ultima coluna da linha ativa range(XFD3") por exemplo.
ActiveCell.Offset(0, 1).Select --> Ao tentar mudar para a próxima coluna, que não existe, pois já está na ultima

De fato Reinaldo, se "A3" estiver vazio ou com valor e "B1" vazio a linha ativada será a que citou, eu não cheguei a analisar por inteiro, já que ele colocou somente parte da rotina e foi especifico em relação a Variável "x", e já que na primeira rotina está incompleta, uma vez que tem um "End If" perdido e logo apos a instrução : x = "=CELL(""col"")" , com certeza esta não retornará o numero da coluna e sim o Texto que esta entre as aspas, para ter o resultado da formula armazenado na Variável "x" tem de utilizar a seguinte instrução : x = Evaluate("=CELL(""col"")")

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 29/03/2016 8:44 am
(@edson-dias)
Posts: 3
New Member
Topic starter
 

Obrigado Mauro e Reinaldo.

A segunda linha do comando serve para que o próximo item a ser escrito na planilha ocupe uma célula vazia. Até o momento esta parte está funcionando legal.

A respeito do activecell, o erro de digitação já foi reparado, porém agora o excel retorna outro erro:

"Erro em tempo de execução '13': Tipos incompátiveis "
E novamente o comando selecionado como erro é :
"ActiveCell.Offset(0, x).Select"

Acredito que seja o tipo de variável, no momento x está declarado como variant, entretando já tentei com string e integer mas ainda não consegui sair deste erro.
Alguém tem alguma ideia do que posso fazer?

 
Postado : 29/03/2016 8:50 am
(@edson-dias)
Posts: 3
New Member
Topic starter
 

Mauro meu problema estava justamente nesta atribuição do valor de X.

Corrigindo o código para x = Evaluate("=CELL(""col"")") o sistema funcionou perfeitamente.

Muito Obrigado pela ajuda!

 
Postado : 29/03/2016 8:56 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Edson, quanto a sua obs :
"A segunda linha do comando serve para que o próximo item a ser escrito na planilha ocupe uma célula vazia. Até o momento esta parte está funcionando legal. "
Conforme o Reinaldo e eu citamos, você terá erro se só tiver uma celula preenchida ou se a mesma estiver em branco, faça um teste apagando todos os valores da linha 3, e execute a rotina, então a obs foi para evitar outro erro se chegar a limpar os ranges.

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 29/03/2016 9:09 am
(@edcronos2)
Posts: 346
Reputable Member
 

o ideal seria postar a macro inteira para analise

ao meu ver offset ocasiona confusões no decorrer da analise das macros
select tbm deixa a macro lenta e somente se usa para intervenção manual do operador , tipo se o usuario que vai escolher por qual linha ,coluna ou celula iniciar

sobre offset se pode usar range diretamente com ajustes das variaveis
cells(linha+x, coluna+y) e facilita muito planejar as macros e entendimento posterior

ATT

 
Postado : 29/03/2016 9:33 am