Notifications
Clear all

Selecionar área de impressão

9 Posts
3 Usuários
0 Reactions
1,513 Visualizações
(@schneiderx)
Posts: 0
New Member
Topic starter
 

Olá, gostaria de saber se existe um comando ou maneira de descobrir a área(intervalo) de impressão(leia-se a área delimitada pelo retangulo azul que será impressa) de uma tabela.

O problema: tenho planilhas que sua área de impressão varia de acordo com o total de dimensões que precisamos medir de uma peça.
Já pesquisei no google e não encontro para este problema específico, só me voltam resultados de como definir a área de impressão e não de descobrir e retornar um valor de linha e coluna até onde vai minha área de impressão. Obrigado.

 
Postado : 08/05/2014 11:16 am
(@themrl16)
Posts: 60
Trusted Member
 

Boa tarde Schneider!

Não sei se é exatamente isso que vc precisa, mas vou deixar o exemplo que talvez possa lhe ajudar. A macro que deixarei logo abaixo define que a área de impressão será apenas o intervalo de células que contém um valor (Exemplo: Se vc possui apenas as células "A1, B1, E1, G10" preenchidas, seu intervalo de impressão será entre A1:G10).

Aproveitei para deixar em anexo um arquivo de exemplo, com a macro atribuída a um botão. Segue abaixo o código:

Sub visualizar_Impressao()

    With ActiveSheet
        .PageSetup.PrintArea = .UsedRange.Address
        .PrintPreview
    End With
End Sub

Abraços,

Murilo.

 
Postado : 08/05/2014 11:42 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

A dica do Murilo é valida, mas o inconveniente de se utilizar o UsedRange.Address é se quisermos imprimir uma área somente, e neste caso usedrange assume todos os campos que encontrar, por exemplo se eu quiser imprimir a partir da linha A4 e tiver dados em B1 ela entrara na configuração do UsedRange.

Como não sei o que é "área delimitada pelo retangulo azul" e tambem não informou pelo menos a celula de inicio, segue uma opção, onde é captado a ultima linha preenchida na coluna 1 e definido a área de impressão a partir de "A4" ate`a Coluna "N":

Sub DefineAreaImprimir()
    Dim UltimaLinha
    Dim P_Range
    
    UltimaLinha = Cells(Rows.Count, 1).End(xlUp).Row
    
    P_Range = "A4:N" & UltimaLinha
    
    ActiveSheet.PageSetup.PrintArea = P_Range
    
End Sub

[]s

 
Postado : 08/05/2014 11:51 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Assim como o Murilo e o Mauro, não tenho certeza de haver entendido o que deseja.
Entendi como "retangulo Azul", a "moldura" que é "adicionada" a planilha ao se clicar em visualizar quebra de paginas, na visualização de impressão.
Para "ver" essa area pode se utilizar a seguinte linha de comando:
MsgBox ActiveSheet.PageSetup.PrintArea
ou ter na celula/planilha
Range("k2") = ActiveSheet.PageSetup.PrintArea

 
Postado : 08/05/2014 12:10 pm
(@schneiderx)
Posts: 0
New Member
Topic starter
 

Isso, o retangulo azul é a moldura que é adicionada. Porém eu estou querendo selecionar as células que estão dentro dessa área, copiá-las, e colar como imagem em outra planilha.
Como vocês têm mais experiência que eu, gostaria de saber se há outra maneira automática de fazer a cópia de uma área em uma planilha para ser colada em outra planilha em forma de imagem.

Pensei dessa maneira, selecionar uma área de impressão(caso possivel), copiá-la e então colá-la como imagem em outra planilha.

 
Postado : 08/05/2014 12:27 pm
(@themrl16)
Posts: 60
Trusted Member
 

Schneider,

O VBA permite que vc cole um intervalo copiado em formato de imagem, conforme segue no exemplo em anexo.
Abaixo estão as duas versões dos códigos apresentados com sua necessidade adaptada (copiar e colar em outra aba em formato de imagem):

Sub Exemplo_Murilo()
    ActiveSheet.UsedRange.CopyPicture Appearance:=xlScreen, Format:=xlPicture
    Sheets("Plan2").Select
    ActiveSheet.Paste
End Sub


Sub Exemplo_Mauro()
    Dim UltimaLinha
    Dim P_Range
    
    UltimaLinha = Cells(Rows.Count, 1).End(xlUp).Row
    
    P_Range = "A4:N" & UltimaLinha
    
    Range(P_Range).CopyPicture Appearance:=xlScreen, Format:=xlPicture
    
    Sheets("Plan2").Select
    ActiveSheet.Paste
End Sub

 
Postado : 08/05/2014 12:42 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

scheneider, da para entender que não teve respostas da forma que queria, primeiro diz :
descobrir a área(intervalo) de impressão

Agora já diz :
selecionar as células que estão dentro dessa área, copiá-las, e colar como imagem em outra planilha.

Quando for postar em foruns procure formular as questões direta e completa, aqui estamos a tratar de dois assuntos diferentes, o ideal seria anexar um modelo reduzido e compactado para poder dar uma resposta mais exata, desta forma só podemos ir por suposições.
Como já tem a rotina que define a área de impressão, abaixo tem uma para "Salvar Range como imagem", veja se consegue adaptar a usa necessidade:
Salvar Range como imagem
viewtopic.php?f=28&t=2495

Exportar area de uma worksheet para um Imagem
http://site2000.jjoao.com/vba/vba049.html

[]s

 
Postado : 08/05/2014 12:46 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Seguindo o excelente exemplo do colega Murilo, além dos tópicos indicados pelo Colega Mauro ;
bem como a máxima do colega Fernando.Fernandes -->"Existem mil maneiras de preparar uma rotina, invente uma!" ;
Segue outra possibilidade (essa se a área de impressão já estiver definida corretamente):

Sub area_impre()
    Range(Sheets("Plan1").PageSetup.PrintArea).CopyPicture Appearance:=xlScreen, Format:=xlPicture
    Sheets("Plan2").Activate
    Range("A12").Select
    ActiveSheet.Paste
End Sub
 
Postado : 08/05/2014 1:01 pm
(@schneiderx)
Posts: 0
New Member
Topic starter
 

Grande Reinaldo, captou minha mensagem!
Era isso mesmo, selecionar a área de impressão, nesse caso já delimitada pelo usuário, copiá-la e colá-la como imagem em outra planilha.
Muito obrigado a todos que dedicaram seu tempo para me ajudar.

 
Postado : 08/05/2014 1:46 pm