Notifications
Clear all

imprimir planilha oculta

8 Posts
3 Usuários
1 Reactions
3,067 Visualizações
(@franguelli)
Posts: 0
New Member
Topic starter
 

Prezados colegas:

No evento click de um botão da Plan1, imprimir os dados contidos na Plan2 que se encontra oculta.

Favor mencionar no código o intervalo da impressão, exemplo: A1:G50

Segue o arquivo em anexo.

Agradeço a atenção de todos que puderem compartilhar seus conhecimentos.

Obrigado

Gilberto Franguelli

 
Postado : 10/08/2016 8:03 am
(@wagner-morel-vidal-nobre)
Posts: 4063
Famed Member
 

franguelli,

Boa tarde!

Pronto! Fiz de uma maneira que independe onde estão os dados localizados em sua Plan2. O código vai sempre pegar o que tiver lá (em qualquer local e em qualçquer quantidade de linhas e colunas, desde que contíguos), definir como área de impressão e imprimir.

Veja se é isso que você quer.

 
Postado : 10/08/2016 1:41 pm
(@franguelli)
Posts: 0
New Member
Topic starter
 

Bom dia Wagner, tudo bem?

Obrigado pela resposta em minha questão, valeu mesmo pela atenção.

Então amigo não funcionou. Segue anexo duas imagens que capturei para uma possível análise, é claro!

 
Postado : 11/08/2016 5:41 am
(@wagner-morel-vidal-nobre)
Posts: 4063
Famed Member
 

franguelli,

Bom dia!

Os erros correspondentes as imagens quye você encaminhou são relativos a versões do Excel e do VBA. Eu estou utilizando a versão do Excel 2007. Se você estiver utilizando uma versão mais antiga ou uma mais nova, isso deverá estar causando o erro.

Tenho uma solução para que você possa resolver especificamente esse tipo de problema: Com o gravador de macros do Excel, grave uma macro executando normalmente os passos como se você fosse imprimir normalmente.

Após a gravação, abra o código que foi gravado e veja qual é a linha que executa o comando de impressão. Copie esse comando de impressão (apenas uma linha) para a linha que enviei e que executa a impressão que é esta:

    ExecuteExcel4Macro "PRINT(1,,,1,,,,,,,,2,,,TRUE,,FALSE)"
 
Postado : 11/08/2016 6:45 am
(@franguelli)
Posts: 0
New Member
Topic starter
 

Bom dia Wagner, tudo bem?

Era isso mesmo conforme me recomendou com a macro, alterei a linha ficando com esse código:

ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True

O bacana é que nem a janela de impressão abre, manda direto para a impressora padrão, seu código é fantástico.

Sem querendo abusar de sua bondade poderia comentar um pouco sobre esse código abaixo que desenvolveu pra mim?

Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
    If Target.Column = 2 And Target.Row > 2 Then
        Dim i As Long
        Dim UltimaLinha As Long
        UltimaLinha = Sheets("Plan2").Cells(Cells.Rows.Count, 2).End(xlUp).Row
        
        For i = 3 To UltimaLinha
            If Target.Value = Sheets("Plan2").Range("B" & i).Value Then
                Exit For
            ElseIf Target.Value = "" Then
                Exit For
            Else
                If i = UltimaLinha Then
                    MsgBox "Código Inexistente!", vbCritical, "ERRO"
                End If
            End If
        Next
    End If
    Application.EnableEvents = True
End Sub

1) Pelo que percebi de seu código, faz referência na coluna B toda, como seria se fosse o intervalo
da B3 até a B40;

2) Gostaria também que se possível caso o código não exista apague a célula e informe o usuário para informar outro código;

Amigo mais uma vez obrigado pela atenção em sua resposta.

 
Postado : 12/08/2016 8:22 am
(@wagner-morel-vidal-nobre)
Posts: 4063
Famed Member
 

franguelli,

Bom dia!

Pronto. Copie o código abaixo e cole no lugar do que está no seu arquivo. Já fiz as alterações que você solicitou e comentei o código. Apenas um detalhe: toda a coluna B é varrida a procura de dados. Isso quer dizer que não vai somente atá a linha 40. Enquanto tiver dados da coluna B o código ira buscar e armazenar na variável UltimaLinha o número da última linha que contém dados.

Private Sub Worksheet_Change(ByVal Target As Range)
    'Desabilita a realização de eventos automáticos pois, do contrário, ficaria em loop _
    toda vez que o código funcionasse
    Application.EnableEvents = False
    'Verifica se a célula alterada foi na coluna B e se a linha é maior que 2
    If Target.Column = 2 And Target.Row > 2 Then
        'Cria uma variável contadora do tipo LONG para percorrer todas as linhas da planilha
        Dim i As Long
        'Cria uma variável do tipo LONG  para armazenar a última linha com dados
        Dim UltimaLinha As Long
        
        'Armazena na variável a última linha com dados pela coluna B
        UltimaLinha = Sheets("Plan2").Cells(Cells.Rows.Count, 2).End(xlUp).Row
        
        'Laço para varrer todas as linhas da planilha, a partir da linha 3
        For i = 3 To UltimaLinha
            'Verifica se o valor que foi alterado na coluna B é igual ao _
            valor que está na coluna B (linha ativa = i) da Plan2. Se for _
            igual, sai do laço
            If Target.Value = Sheets("Plan2").Range("B" & i).Value Then
                'Sai do lanço
                Exit For
            'Verifica se o valor da coluna B está em Branco. Se estiver, sai _
            do laço
            ElseIf Target.Value = "" Then
                'Sai do lanço
                Exit For
            'Se não for nenhuma das duas situações acima...
            Else
                'Verifica se já varreu todas as linhas. Se já, exibe mensagem
                If i = UltimaLinha Then
                    'Exibe mensagem ao usuário
                    MsgBox "Código Inexistente!", vbCritical, "ERRO"
                    'Limpa o código inexistente
                    Target.Value = ""
                'Encerra bloco de decisão
                End If
            'Encerra bloco de decisão
            End If
        'Envia o ponteiro do processador para pesquisar a próxima linha (i)
        Next
    'Encerra bloco de decisão
    End If
    'Voltar a habilita a realização de eventos automáticos
    Application.EnableEvents = True
End Sub


 
Postado : 12/08/2016 9:19 am
pedrobb reacted
(@franguelli)
Posts: 0
New Member
Topic starter
 

Bom dia Wagner, tudo bem?

Isso que é uma aula de código, muito obrigado mesmo.

Fiz conforme solicitado e funcionou perfeitamente.

Estou mencionando o tópico como resolvido!

Obrigado pela atenção em minha solicitação nos comentários, isso facilita para aprender um pouco sobre vba.

Gilberto

 
Postado : 16/08/2016 5:10 am
(@pedrobb)
Posts: 0
New Member
 

@wagner-morel-vidal-nobre
Wagner Morel,

Você é genial!

Muito Obrigado!

 
Postado : 12/09/2022 11:40 pm