Notifications
Clear all

Atribuir varlores de outra ABA em Array

8 Posts
2 Usuários
0 Reactions
870 Visualizações
(@edcronos)
Posts: 1006
Noble Member
Topic starter
 

ola

essa linha de comando quando é na planilha ativa vai bem, mas quando é em outra plan (ABA) não funciona.

SetO3 = Sheets(nP).Range(Cells(Li, Ti).End(xlDown), Cf & Lf).Value2

SetO3 é uma Array Publico Variant

já verifiquei os valores das variáveis, e tanto nome de plan, colunas e linhas estão corretos

Espero que alguém possa me ajudar.
até

Somente é impossíveis até que alguém faça
A logica está presa na irracionalidade humana, e morta nos que se consideram donos da verdade.

"ALGUM MODERADOR ME EXPULSE DO FÓRUM POR FAVOR"

 
Postado : 16/06/2014 11:31 am
(@gtsalikis)
Posts: 2373
Noble Member
 

ja tentou:

with Sheets(nP)
SetO3 = .Range(Cells(Li, Ti).End(xlDown), Cf & Lf).Value2
End with

??

Lembre-se de AGRADECER aos que te ajudaram, e de marcar o tópico como [Resolvido]
Gente que cuida de gente.

Gilmar

 
Postado : 16/06/2014 11:40 am
(@edcronos)
Posts: 1006
Noble Member
Topic starter
 

desse modo não dá erro,
mas estranhamente assume a planilha ativa e não plan que nome está em nP

Somente é impossíveis até que alguém faça
A logica está presa na irracionalidade humana, e morta nos que se consideram donos da verdade.

"ALGUM MODERADOR ME EXPULSE DO FÓRUM POR FAVOR"

 
Postado : 16/06/2014 12:13 pm
(@edcronos)
Posts: 1006
Noble Member
Topic starter
 

estranhamente apenas funcionou mudando de plan na integra

ThisWorkbook.Worksheets(nP).Activate
SetO1 = Range(Cells(Li, Ti).End(xlDown), Cf & Lf).Value2
ThisWorkbook.Worksheets(Plan_Aq).Activate
'<<<---volta para a planilha que estava

alguém pode me explicar o pq disso e se existe outra maneira de fazer o processo?

Somente é impossíveis até que alguém faça
A logica está presa na irracionalidade humana, e morta nos que se consideram donos da verdade.

"ALGUM MODERADOR ME EXPULSE DO FÓRUM POR FAVOR"

 
Postado : 16/06/2014 5:21 pm
(@gtsalikis)
Posts: 2373
Noble Member
 

Edcronos,

O método anterior deve ter falhado devido à falta de referência à planilha, que é feito pelo ponto.

Veja as diferenças:

Aqui, vai puxar os valores da planilha ativa:

With Sheets("plan1")
    arr = Range(Cells(LI, CI), Cells(LF, CF)).Value2
End With

E aqui, vai puxar os valores da planilha que vc indicou no comando "with":

With Sheets("plan1")
    arr = Range(.Cells(LI, CI), .Cells(LF, CF)).Value2
End With

Note que tem um "ponto" antes de cada referência "cells", que provém da quebra do comando:

sheets("plan1").cells(X, Y)

Em:

With sheets("plan1")
.cells(X, Y)
End with

Eu tinha tentado, no post anterior, referenciar direto pelo ".range", mas, sem a planilha, não testei, e acabou não dando certo.

Agora, em casa, criei uma planilha básica de testes, e, referenciando como fiz acima, deu certo.

Tente referenciar o início e o fim do range usando cells, algo +/- assim:

With Sheets(nP)
SetO3 = Range(.Cells(Li, Ti).End(xlDown), .Cells(Lf, Cf)).Value2
End With

Lembre-se de AGRADECER aos que te ajudaram, e de marcar o tópico como [Resolvido]
Gente que cuida de gente.

Gilmar

 
Postado : 16/06/2014 6:24 pm
(@edcronos)
Posts: 1006
Noble Member
Topic starter
 

eita, não sabia dessa
nunca entendi essa de ponto
por isso que sem o Cell dentro do range funcionava, pq ficava uma referencia só

SetO3 = Sheets(nP).Range(Ti & Li, Cf & Lf).Value2 <<--assim funciona tbm

assim não funciona pq cells quebra a referencia
With Sheets(nP)
SetO2 = Range(.Cells(Li, Ti).End(xlDown), Cf & Lf).Value2
End With

cara até aprender as combinações possíveis pelo visto vou quebrar muito a cabeça.

mas nesse caso tavez seja mais pratico ativar a planilha
ThisWorkbook.Worksheets(nP).Activate
SetO1 = Range(Cells(Li, Ti).End(xlDown), Cf & Lf).Value2
ThisWorkbook.Worksheets(Plan_Aq).Activate

vc que tem mais experiência, me diz.
qual é a melhor pratica a se adotar?

dessas duas maneiras funcionam tbm.
With Sheets(nP)
SetO2 = .Range(.Cells(Li, Ti).End(xlDown), Cf & Lf).Value2
End With

SetO2 = Sheets(nP).Range(Sheets(nP).Cells(Li, Ti).End(xlDown), Cf & Lf).Value2

até mais.

Somente é impossíveis até que alguém faça
A logica está presa na irracionalidade humana, e morta nos que se consideram donos da verdade.

"ALGUM MODERADOR ME EXPULSE DO FÓRUM POR FAVOR"

 
Postado : 16/06/2014 7:15 pm
(@gtsalikis)
Posts: 2373
Noble Member
 

Bem, acho que vc já achou sua resposta, não?

Lembre-se de AGRADECER aos que te ajudaram, e de marcar o tópico como [Resolvido]
Gente que cuida de gente.

Gilmar

 
Postado : 17/06/2014 7:48 am
(@edcronos)
Posts: 1006
Noble Member
Topic starter
 

Se usando With precisa do ponto em qualquer instrução para fazer referencia,
quer dizer que que fica um troca troca de planilha

sendo assim é mais pratico e rápido ativar a planilha que mais vai ser usada "Eu Acho"
assim encurta as instruções

mas se tiver que ficar trocando de planilha o With é mais pratico

até.

Somente é impossíveis até que alguém faça
A logica está presa na irracionalidade humana, e morta nos que se consideram donos da verdade.

"ALGUM MODERADOR ME EXPULSE DO FÓRUM POR FAVOR"

 
Postado : 17/06/2014 8:43 am