Notifications
Clear all

Selecionar Sequencia de planilhas

5 Posts
3 Usuários
0 Reactions
1,004 Visualizações
(@rip88)
Posts: 3
Active Member
Topic starter
 

Saudações.

Dúvida boba:

O código abaixo, seleciona a oitava e a últiam planilha:

Dim a As Integer
a = Sheets.Count
Sheets(Array(1, a)).Select

Gostaria de saber qual código seleciona da oitava à última planilha
tentei Sheets(Array(1:a)).Select , mas sem sucesso.

 
Postado : 01/04/2013 9:14 am
(@alminen)
Posts: 77
Trusted Member
 

Tenta assim:

Sub Sel8Fim()
Dim a As Integer
Sheets(8).Select
For a = 8 To Sheets.Count
Sheets(a).Select (False) 'Esse argumento vai manter as seleções anteriores
Next a
End Sub
 
Postado : 01/04/2013 3:00 pm
(@rip88)
Posts: 3
Active Member
Topic starter
 

Funcionou :) Muito obrigado, Rapaz. :)

expressão.Select(Replace)
(usado somente com planilhas). True para substituir a seleção atual pelo objeto especificado. False para estender a seleção atual para incluir os objetos selecionados anteriormente e o objeto especificado.

Mas caso alguém saiba chegar ao mesmo resultado sem ser através de loop, por favor informe

 
Postado : 02/04/2013 5:41 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Rip, para selecionar mais de uma aba de uma só vez geralmente utilizamos um ARRAY, tanto que se utilizar o Gravador de Macros e efetuar a operação que deseja verá que o resultado é utilizando o ARRAY, ou seja para selecionar sem ter de passar por tipo de Loop teriamos de referenciar as abas diretamente no Array :

Sub SelectArray()
'
' Macro1 Macro
' Macro gravada em 2/4/2013 por mauro.coutinho
'
    Sheets(Array("Plan8", "Plan9", "Plan10", "Plan11", "Plan12")).Select
    Sheets("Plan8").Activate
End Sub

Se for sempre a mesma qde e nomes, pode-se utilizar sempre a mesma rotina acima, mas se estes dados são variaveis, o ideal é utilizar a contagem e armazena-las e contruir o ARRAY, de uma olhada no exemplo abaixo e veja se ajuda tambem.

Sub SelecionaAbas()

    Dim x As Integer
    Dim sQdeSheets As Integer
    
    'Conta a qde de abas
    sQdeSheets = Sheets.Count

    Dim Arr() As String
    
    'A instrução ReDim é usada para dimensionar ou
    'redimensionar uma matriz dinâmica
    ReDim Preserve Arr(8 To sQdeSheets)
    
    'Definimos a x = 8 para a qde de Aas
    For x = 8 To sQdeSheets
        'Criamos o Array a partir do valor inicial definido em x=8
        Arr(x) = Worksheets(x).Name
    Next x
    
    'Selecionamos as abas
    Sheets(Arr).Select
    
End Sub

É mais uma sugestão, qq duvida retorne.

[]s

 
Postado : 02/04/2013 6:25 am
(@rip88)
Posts: 3
Active Member
Topic starter
 

Funcionou perfeitamente. Os comentários no código me ajudaram a entendê-lo. muito obrigado! Tópico resolvido.

E para os curiosos do futuro:

A instrução ReDim é usada para dimensionar ou redimensionar uma matriz dinâmica que já tenha sido declarada formalmente usando-se uma instrução Private, Public ou Dim com os parênteses vazios (sem subscritos de dimensão).

Você pode usar a instrução ReDim repetidamente para alterar o número de elementos e dimensões em uma matriz. Entretanto, você não pode declarar uma matriz de um tipo de dados e usar posteriormente ReDim para alterar a matriz para um outro tipo de dados, a menos que a matriz esteja contida em um Variant. Se a matriz estiver contida em um Variant, o tipo dos elementos podem ser alterados usando-se uma cláusula As type, a menos que você esteja usando a palavra-chave Preserve, que no caso, não permite alterações no tipo de dados.

Se você usar a palavra-chave Preserve, poderá redimensionar somente a última dimensão da matriz e não poderá alterar o número de dimensões. Por exemplo, se sua matriz possuir somente uma dimensão, você poderá redimensionar essa dimensão porque ela é a última e a única dimensão. Entretanto, se sua matriz possuir duas ou mais dimensões, você poderá alterar somente o tamanho da última dimensão e ainda preservar o conteúdo da matriz. O exemplo a seguir mostra como você pode aumentar o tamanho da última dimensão de uma matriz dinâmica sem apagar os dados nela contidos.

ReDim X(10, 10, 10)
. . .
ReDim Preserve X(10, 10, 15)

De forma semelhante, quando você usa Preserve, pode alterar o tamanho da matriz somente alterando o limite superior; alterar o limite inferior gera um erro.

Se você tornar uma matriz menor do que seu tamanho original, os dados contidos nos elementos eliminados serão perdidos. Se você passar uma matriz para um procedimento por referência, não poderá redimensionar a matriz dentro do procedimento.

Quando as variáveis são inicializadas, uma variável numérica é inicializada como 0, uma seqüência de comprimento variável é inicializada como uma seqüência de comprimento zero ("") e uma seqüência de comprimento fixo é preenchida com zeros. As variáveis Variant são inicializadas como Empty. Cada elemento de uma variável de tipo definido pelo usuário é inicializado como se fosse uma variável independente. Uma variável que faz referência a um objeto deve ser atribuída a um objeto existente usando-se a instrução Set antes que possa ser usada. Até que um objeto seja atribuído a ela, a variável de objeto declarada terá o valor especial Nothing, o que indica que ela não faz referência a uma ocorrência específica de um objeto.

Cuidado    A instrução ReDim age como uma instrução declarativa se a variável que ela declara não existir no nível de módulo ou no nível de procedimento. Se outra variável com o mesmo nome for criada posteriormente, mesmo em um escopo mais amplo, ReDim fará referência à variável posterior e não causará necessariamente um erro de compilação, mesmo que Option Explicit esteja em vigor. Para evitar esses conflitos, ReDim não deve ser usada como uma instrução declarativa, mas simplesmente para o redimensionamento de matrizes.

Observação    Para redimensionar uma matriz contida em um Variant, você deve declarar a variável Variant explicitamente antes de tentar redimensionar sua matriz.
 
Postado : 03/04/2013 6:35 am