Notifications
Clear all

Comando SELECIONAR VÁRIOS QUADROS

14 Posts
2 Usuários
0 Reactions
2,585 Visualizações
(@nando)
Posts: 53
Trusted Member
Topic starter
 

galera preciso da ajuda de vocês,

Estou tentando selecionar 2 quadro de relatório no excel sempre que possuir valores.
tenho 20 modelo de relatórios todos no mesmo arquivo este comando seleciona quando tem resultado para eu imprimir em pdf e sair a paginação correta.
so consigo selecionar um quadro por vez, neste 20 modelo tem queria selecionar vários
ex: possuo resultados no relatório 1,14,17 e 20. o comando abaixo reconheceria que possui dados através Range("F3") = 1 Then e selecionaria, depois passaria verificando cada quadro.
Aguardo ajuda de vocês

Sub Botão4_Clique()
If Sheets("Plan1").Range("F3") = 1 Then
Range("A10:D15").Select

Else
MsgBox "Sem Dados para emissão do relatório1"
End If

If Sheets("Plan1").Range("F11") = 2 Then

Range("A17:D22").Select

Else
MsgBox "Sem Dados para emissão do relatório2"
End If
End Sub

 
Postado : 25/08/2014 2:13 pm
(@edcronos)
Posts: 1006
Noble Member
 

Selecionando varias ranges

viewtopic.php?t=10206&p=53724

pelo menos para mim fica difícil te ajudar de maneira satisfatória apenas com essas informações

Union(Range(Addr1), Range(Addr2), Range(Addr3), Range(Addr4), Range(Addr5)).Select

Sub Botão4_Clique()
If Sheets("Plan1").Range("F3") = 1 Then
Addr1="A10:D15"
Else
MsgBox "Sem Dados para emissão do relatório1"
End If

If Sheets("Plan1").Range("F11") = 2 Then
Addr2="A17:D22"
Else
MsgBox "Sem Dados para emissão do relatório2"
End If

Union(Range(Addr1), Range(Addr2)).Select

End Sub

 
Postado : 25/08/2014 2:31 pm
(@nando)
Posts: 53
Trusted Member
Topic starter
 

Olá Colegas,
Estou aprendendo VBA ainda com muitas dificuldades..
Estou anexando para facilitar...
Estou tentando selecionar 2 relatórios ou 3 ao mesmo tempo caso o valor seja verdadeiro EX (1 e 2)
como serão 20 quadros irei atribuir os valores de 1 a 20 de acordo possui dados o mesmo será selecionado para impressão.
Obrigado a todos!

 
Postado : 25/08/2014 4:13 pm
(@edcronos)
Posts: 1006
Noble Member
 

vamos lá mais uma tentativa

vc tem 20 quadros no total
quantos no MÍNIMO vão ser selecionados ao mesmo tempo? "se apenas 1 caixa tiver com a condição como verdadeira ela vai ser impressa?"
quantos no MÁXIMO vão ser selecionados ao mesmo tempo?

qual a condição ou formatação de impressão que vc vai usar?
para facilitar e adiantar seu caso se forem muitas condições possíveis de seleção
poderia ter a range do quadro em baixo da formula para fazer a seleção adequada

Ps. por favor seja menos indireto ao lidar com as pessoas,
fica parecendo que vc está a todo custo evitando minhas perguntas e respostas

 
Postado : 25/08/2014 5:34 pm
(@nando)
Posts: 53
Trusted Member
Topic starter
 

Boa noite Edcronos,

Obrigado pela sua ajuda mais uma vez..mas to apanhando um pouco..kk

O mínimo será de 1 e máximo de 20, após os formulários selecionados irei usar Crtl+P para visualizar e imprimir em PDF por enquanto, preciso gerar em torno de 2 mil formulários após essa consolidação.
Att,
Nando

 
Postado : 25/08/2014 5:53 pm
(@edcronos)
Posts: 1006
Noble Member
 

então vamos por parte, para facilitar meu entendimento, pq eu tbm não sou um especialista

existe ordem especifica para essa seleção de quadros?
existe algum quadro que seria considerado como chave? "se caso ele não esteja na seleção o resto vai ser ignorado"

se é muito importante ser feita a seleção individual
vc pode ter uma variável publica que cada macro sua vai adicionar a range correspondente

 
Postado : 25/08/2014 6:01 pm
(@nando)
Posts: 53
Trusted Member
Topic starter
 

Então..
Pode ser qualquer um não tem ordem, pensei assim colocaria um cont.se para saber se os dados do formulário for maior que zero se for resultado será 1 (indicando que e verdadeiro ) desta forma todos que for 1 o comando seleciona, ai pode haver 1 ou vários relatórios.

O problema da seleção que quando executo MACRO1 SELECIONA porém quando a MACRO2 e executada apaga o selecionado da primeira.

Faz um teste neste modelo que anexei.
obrigado

 
Postado : 25/08/2014 6:20 pm
(@edcronos)
Posts: 1006
Noble Member
 

é que quando se faz seleção o vba trabalha de maneira serial
tem que se usar o comando union para juntar tudo

mas eu não estou entendendo se vc que faz a seleção dos conjunto ou se caso todos forem positivos serão todos selecionados

como essas caixas são de tamanhos diferentes vc pode colocar a range dela em baixo da formula e usar o valor da celula ou na propria formula no lugar do "verdadeiro"
Ex

Public RanG As Range
macro1
Set RanG =Cells(L + 1, "F").Value2
macro2
Set RanG = Union(RanG, Range(Cells(L + 1, "F").Value2))

se eu tivesse mais dados da sua planilha poderia fazer uma função ou a própria macro poderia verificar se tem valores na caixa

vamos dizer assim, o difícil é entender toda a situação "ainda mais que eu não lido com isso, apenas para uso pessoal"
vou tentar fazer uma macro usando união das range para ficar do modo indireto que vc quer

 
Postado : 25/08/2014 6:36 pm
(@edcronos)
Posts: 1006
Noble Member
 

para fica como vc quer...
em qualquer modulo coloque solto no inicio

Public RanG As Range

e nas macros que vão fazer a seleção das caixas

Sub Macro2()
    ran = "A1:D7"  'coloque aqui a range especifica da macro
'o resto deixa como está
    If Not RanG Is Nothing Then
        Set RanG = Union(RanG, Range(ran))
    Else
        Set RanG = Range(ran)
    End If
     RanG.Select
End Sub

Algum moderador poderia juntar os tópicos já que se referem ao mesmo assunto e da mesma pessoa "eu acho"

 
Postado : 25/08/2014 7:06 pm
(@edcronos)
Posts: 1006
Noble Member
 

mais uma coisa,
como é uma variável publica ela guarda o valor

então use esse comando na ultima macro a ser executada ou no inicio da primeira

Set RanG = Nothing

ele vai limpar as ranges a serem selecionadas para a próxima execução

 
Postado : 25/08/2014 7:18 pm
(@nando)
Posts: 53
Trusted Member
Topic starter
 

Edcronos Obrigado Perfeita sua sugestão..queria Só acertar um pequeno detalhe...help..me

Sub Macro2()

'Aqui queria colocar a validação EX: Se resultado da celula F3 for igual a 1 ele vai selecionar A1:D7 se não somente próximo comando. 
If Sheets("Plan1").Range("F3") = 1 Then


    ran = "A1:D7"  'coloque aqui a range especifica da macro
'o resto deixa como está
    If Not RanG Is Nothing Then
        Set RanG = Union(RanG, Range(ran))
    Else
        Set RanG = Range(ran)
    End If
     RanG.Select
End Sub
 
Postado : 27/08/2014 5:29 pm
(@edcronos)
Posts: 1006
Noble Member
 

cara a gente está voltando para o inicio

eu tinha feito essa macro pq vc queria fazer a seleção com macro independentes
o fato é que fica difícil eu analisar toda a situação e fazer oq vc quer

repare nessa parte da macro:

    If Not RanG Is Nothing Then
        Set RanG = Union(RanG, Range(ran))
    Else
        Set RanG = Range(ran)
    End If
     RanG.Select

ela simplesmente adiciona a range escolhida na variavel RaNG e seleciona o range
como vc insistia em fazer a seleção com macro separadas eu bolei essa macro
vc sequer respondeu se vc que vai incluir as caixas manualmente ou se todas tiver valor positivo vão ser todas selecionadas

agora temos que mudar tudo.... pq já deu nó na minha cabeça

vamos fazer o seguinte, poste seu projeto com todas as caixas incluídas as 20 que vc falou que seria impressa
e um modelo como vc quer que fique os dados para impressão caso tenha as 20, e outro modelo para se caso seja apenas algumas

OU simplesmente tente adaptar...

Public RanG As Range

Sub valid()
Set RanG = Nothing ' coloque isso apenas no inicio de uma nova validação ou no final da ultima macro para limpar a range selecionada 

If Sheets("Plan1").Range("F3") = 1 Then
Call selcrags("A1:D7")
End If

If Sheets("Plan1").Range("F11") = 2 Then
Call selcrags("A17:D22")
End If

'...outras seleções
'...
End Sub


Sub selcrags(ByVal quadro As Variant) 'somente use uma dessa

    If Not RanG Is Nothing Then
        Set RanG = Union(RanG, Range(quadro))
    Else
        Set RanG = Range(quadro)
    End If
    RanG.Select
End Sub
 
Postado : 27/08/2014 9:19 pm
(@nando)
Posts: 53
Trusted Member
Topic starter
 

Edcronos obrigado mais uma vez pela grande ajuda!!! estou sendo um aluno muito dificil..rsrsrs
Montei o modelo bem simplificado, na coluna F coloquei a validação se for igual a 1 o quadro deve ser selecionado, desta forma todos serão selecionados.
Pode ter caso que somente o relatório 2 e 7 seja selecionado os demais não..
obrigado!!!!

 
Postado : 28/08/2014 6:11 am
(@edcronos)
Posts: 1006
Noble Member
 

pergunta, vc quer rodar a macro estando em outra planilha?
é isso? pq acho que estando em uma aba diferente não dá para fazer seleção de celulas de outra

as caixas pelo que vi estão todas do mesmo tamanho e espalhadas igualmente oq facilita a seleção

fiz essas duas macros é tudo igual uma usa RanG como variavel string para montar as ranges que vão ser selecionadas
a outra usa RanG como Range ela se comporta como se fosse a própria celula.

como vc não mandou o modelo de como quer que fique e não deu maiores detalhes ,
apenas falou que é para selecionar as caixas que tiver 1 na coluna F... tenta aí com uma dessas " eu fico por aqui".
no modelo que vc mandou funcionou perfeitamente tanto uma como a outra

Sub test()

    Dim RanG As Range
    With Sheets("Plan1")

        lf = .Cells(Rows.Count, "F").End(xlUp).Row
        For L = 1 To lf
            If .Cells(L, "f").Value2 = "1" Then
                quadro = "A" & L & ":D" & L + 6
                If Not RanG Is Nothing Then
                    Set RanG = Union(RanG, .Range(quadro))
                Else
                    Set RanG = .Range(quadro)
                End If
                RanG.Select
            End If
        Next
    End With
End Sub
Sub test3()

    Dim RanG As String
    With Sheets("Plan1")

        lf = .Cells(Rows.Count, "F").End(xlUp).Row
        For L = 1 To lf
            If .Cells(L, "f").Value2 = "1" Then
                If quadro <> "" Then
                    quadro = quadro & "," & "A" & L & ":D" & L + 6
                Else
                    quadro = "A" & L & ":D" & L + 6
                End If
                Sheets("Plan1").Range(quadro).Select
            End If
        Next
        
    End With
End Sub
 
Postado : 28/08/2014 7:19 am