Ir ao conteúdo
  • Cadastre-se
Entre para seguir isso  
guimaraes15

[Resolvido] Imprimir planilhas personalizadas

Recommended Posts

Olá pessoal,

Estou criando umas planilhas aqui e gostaria de saber se existe uma forma simples de criar um formulário em uma planilha onde se seleciona as planilhas desejadas ao apertar em um botao IMPRIMIR, realizar a impressão exatamente na ordem da seleção as planilhas.

Obs.:

-Ja criei uma planilha com os formularios e o botao.

-criei tb um macro para imprimir algumas planilhas.

Falta so criar a estrutura de programacao para ler os checkbox e inserir na linha de comando de impressão no VBA:

ExecuteExcel4Macro "PRINT(1,,,1,,,,,,,,2,,,TRUE,,FALSE)"

Agradeço desde já

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na verdade o meu problema é bem simples, se resume a isto:

Preciso pegar o valor verdadeiro ou falso de um checkbox.

Exemplo:

Criei um checkbox vhkTeste.

Atribui ao macro Teste_clique

Sub Teste_Clique()

If True Then

MsgBox ("Verdade")

Else

MsgBox ("falso")

End If

End Sub

Eu so queria que ele entende-se se a caixa de seleção está ativada ou não.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Na verdade o meu problema é bem simples, se resume a isto:

Preciso pegar o valor verdadeiro ou falso de um checkbox.

Exemplo:

Criei um checkbox vhkTeste.

Atribui ao macro Teste_clique

Eu so queria que ele entende-se se a caixa de seleção está ativada ou não.

Amigo para se verificar se uam checkbox esta selecionado, use o seguinte comando:

if checkbox1.Value = true then

para falso

if checkbox1.Value = false then

no seu caso acho que só será necessário a primeira verificação.

Abraços

RafaVillani

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá RafaVillani,

Obrigado por ajudar. Eu já tinha tentando desta forma, mas não dá. Eu até criei um planilha do zero para ver se tinha algum conflito.

Criei uma planilha nova, coloquei lá o controle de formulario checkbox, renomiei para "checkbox1".

Atribuir ao novo macro "Caixadeseleção1_Clique", e coloquei o código abaixo:

Sub Caixadeseleção1_Clique()

If checkbox1.Value = True Then
MsgBox ("Verdadeiro")
Else
MsgBox ("Falso")
End If

End Sub

E quando apertei no checkbox, dá o erro: '424' - O objeto é obrigatório.

É como se ele não tive-se pegando o o valor no ckeckbox. Essa que é o meu problema.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Olá RafaVillani,

Obrigado por ajudar. Eu já tinha tentando desta forma, mas não dá. Eu até criei um planilha do zero para ver se tinha algum conflito.

Criei uma planilha nova, coloquei lá o controle de formulario checkbox, renomiei para "checkbox1".

Atribuir ao novo macro "Caixadeseleção1_Clique", e coloquei o código abaixo:

Sub Caixadeseleção1_Clique()

If checkbox1.Value = True Then
MsgBox ("Verdadeiro")
Else
MsgBox ("Falso")
End If

End Sub

E quando apertei no checkbox, dá o erro: '424' - O objeto é obrigatório.

É como se ele não tive-se pegando o o valor no ckeckbox. Essa que é o meu problema.

Amigo, esta verificação que postei deve ser feita atraves de um botão, para que você faça diretamente pelo checkbox terá de colocar o código no evento click do checkbox, ficando assim:

Private Sub CheckBox1_Click()
If CheckBox1.Value = True Then
MsgBox ("SELECIONADO")
End If
End Sub

Seu código está dando erro, provavelmente porque não está encontrando este objeto CheckBox1, certamente você alterou o nome do CheckBox1, se isso houver sido feito, no código você deverá colocar o nome dado ou CheckBox1, no seu exemplo Caixadeseleção1.

Private Sub Caixadeseleção1_Click()
If Caixadeseleção1.Value = True Then
MsgBox ("SELECIONADO")
End If
End Sub

abraços

RafaVillani

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa, entendi.

O problema maior é que eu estava usando, na hora de inserir, o controle de formulário ao invés de controle activeX.

agora este código funcionou.

So que eu qro ainda fazer o seguinte:

Criar vários checkbox, e ao apertar um botão chamado "imprimir", ele lê-se quais checkbox selecionados e associar estes checkbox as planilhas existentes dentro do excel.

Para que eu possa imprimir as planilhas selecionadas.

Exemplo:

Tenho a planilha: Dados, plan1, plan2, plan3

e vou ter 3 checkbox com estes nomes:

-planilha 1

-planilha 2

-planilha 3

Se eu tiver selecionado apenas os checkbox 2 e 3 e apertar o botão imprimir, realizar esta impressão na sequecia: plan2 e plan3.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Opa, entendi.

O problema maior é que eu estava usando, na hora de inserir, o controle de formulário ao invés de controle activeX.

agora este código funcionou.

So que eu qro ainda fazer o seguinte:

Criar vários checkbox, e ao apertar um botão chamado "imprimir", ele lê-se quais checkbox selecionados e associar estes checkbox as planilhas existentes dentro do excel.

Para que eu possa imprimir as planilhas selecionadas.

Exemplo:

Tenho a planilha: Dados, plan1, plan2, plan3

e vou ter 3 checkbox com estes nomes:

-planilha 1

-planilha 2

-planilha 3

Se eu tiver selecionado apenas os checkbox 2 e 3 e apertar o botão imprimir, realizar esta impressão na sequecia: plan2 e plan3.

Amigo, se seu objetivo é imprimir as planilhas cujos checkbox estão selecionados, para que verificar atraves do checkbox se ele está selecionado, se, ao final, você deverá fazer essa verificação atraves do botão imprimir?

Segue o código,

Dim I As Integer
For I = 1 To 4
If Me.Controls("checkbox" & I).Value = True Then
MsgBox "Imprimir plan" & I & ""
End If
Next

Abraços

RafaVillani

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ok.

Eu sei que eu não deveria colocar em cada checkbox, a ideia inicial sempre foi colocar no botao.

é que eu resumi meu problema em buscar essa informação no checkbox.

Dim I As Integer

For I = 1 To 4
If Me.Controls("checkbox" & I).Value = True Then
MsgBox "Imprimir plan" & I & ""
End If
Next

A sua solução é perfeita, mas infelizmente ainda dá um problema: "Uso inválido da palavra-chave Me".

Tá dando erro nesse me.controls, tem outra forma de juntar esse "checkbox" & I?

Eu tentei com e sem parenteses, mas deu erro de sintaxe.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tentei aqui colocando em uma variavel antes de colocar no if. Só que acusa "qualificador invalido".

O que estou errando aqui?

Private Sub CommandButton1_Click()

Dim I As Integer
Dim chkValor As String


For I = 1 To 4
chkValor = "checkbox" & I

If chkValor.Value = True Then
MsgBox "Imprimir plan" & I & ""
End If
Next

End Sub

Compartilhar este post


Link para o post
Compartilhar em outros sites
Ok.

Eu sei que eu não deveria colocar em cada checkbox, a ideia inicial sempre foi colocar no botao.

é que eu resumi meu problema em buscar essa informação no checkbox.

Dim I As Integer

For I = 1 To 4
If Me.Controls("checkbox" & I).Value = True Then
MsgBox "Imprimir plan" & I & ""
End If
Next

A sua solução é perfeita, mas infelizmente ainda dá um problema: "Uso inválido da palavra-chave Me".

Tá dando erro nesse me.controls, tem outra forma de juntar esse "checkbox" & I?

Eu tentei com e sem parenteses, mas deu erro de sintaxe.

Amigo, acho que sei o que está acontencento, este ME se refere a um UserForm, você deve ter colocado os checkbox na prórpia planilha, né?

Se for isso, o código fica assim:


For I = 1 To 4
If Plan1.OLEObjects("checkbox" & I).Object.Value = True Then
MsgBox "Imprimir plan" & I & ""
End If
Next

Acho que agora resolve o problema.

Abraços

RafaVillani

Compartilhar este post


Link para o post
Compartilhar em outros sites

Legal, funcionou!

Só falta uma coisinha, eu estava querendo pegar o valor do do ckeckbox como verdadeiro ou falso.

Agora quero saber, tem como pegar o Texto do checkbox?

exemplo: quero pegar o texto "Contabilidade"...

checkbox.gif

Porque aí eu coloco o nome da planilha relacionada em cada checkbox...

Compartilhar este post


Link para o post
Compartilhar em outros sites
Amigo explique melhor o que você quer, não entendi! rsrsrs

Valeu!

A pergunta inicial do topico é como obter a informação se a checkbox está selecionada ou não, certo?

Então, eu gostaria agora de pegar o Texto que fica ao lado da checkbox.

Dei o exemplo do do texto "Contabilidade" nesta imagem abaixo:

checkbox.gif

Eu preciso deste valor para colocar na linha de comando de impressão, que na verdade é o nome da planilha existente.

Ou então vou ter que renomear as minhas planilhas para checkbox1, checkbox2, checkbox3 ...

Eu ja testei assim e funcionou... mas eu queria manter os nomes das planilhas: contabilidade, escrita, etc...

Entendeu?

Compartilhar este post


Link para o post
Compartilhar em outros sites
Amigo, coloque o código completo do seu botão imprimir para eu analisar.

No aguardo!

Vou passar meu codigo todo para voce entender melhor...

Agora to querendo fazer umas modificações, to tentando colocar dentro de uma matriz/vetor dentro do IF para armazenar quais planilhas foram selecionadas...

Sub imprimir2()


Dim i As Integer
Dim chkValor As String


If Plan1.OLEObjects("checkbox1").Object.Value = False And Plan1.OLEObjects("checkbox2").Object.Value = False And Plan1.OLEObjects("checkbox3").Object.Value = False And Plan1.OLEObjects("checkbox4").Object.Value = False Then
MsgBox ("Selecione pelo menos 1 sistema!")

Else


For i = 1 To 4

If Plan1.OLEObjects("checkbox" & i).Object.Value = True Then
chkValor = "checkbox" & i
End If

Next


Sheets(Array("Início", chkValor, "Final")).Select
Sheets("Início").Activate
ExecuteExcel4Macro "PRINT(1,,,1,,,,,,,,2,,,TRUE,,FALSE)"


End If

End Sub

Veja o formulário na planilha:

formq.jpg

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo, veja se desta forma lhe atende:


If Plan1.CheckBox1.Value = False And Plan1.CheckBox2.Value = False And Plan1.CheckBox3.Value = False And Plan1.CheckBox4.Value = False Then
MsgBox ("Selecione pelo menos 1 sistema!")
Else
For i = 1 To 4
If Plan1.OLEObjects("checkbox" & i).Object.Value = True Then
Worksheets("Plan" & i).PrintOut
End If
Next
End If

Desta forma, não é necessário colocar o nome das planilhas, ou seja, poderá atribuir qualquer nome às suas planilhas, que o comando irá funcionar normalmente.

Abraços

RafaVillani

Compartilhar este post


Link para o post
Compartilhar em outros sites
Amigo, veja se desta forma lhe atende:


If Plan1.CheckBox1.Value = False And Plan1.CheckBox2.Value = False And Plan1.CheckBox3.Value = False And Plan1.CheckBox4.Value = False Then
MsgBox ("Selecione pelo menos 1 sistema!")
Else
For i = 1 To 4
If Plan1.OLEObjects("checkbox" & i).Object.Value = True Then
Worksheets("Plan" & i).PrintOut
End If
Next
End If

Desta forma, não é necessário colocar o nome das planilhas, ou seja, poderá atribuir qualquer nome às suas planilhas, que o comando irá funcionar normalmente.

Abraços

RafaVillani

Gostei, para isso teriei que renomear as planilhas para plan1, plan2, plan3 ...

So que tá rolando outra parada, ele manda os arquivos separado para impressora . o certo é tudo junto.

exemplo: 1 arquivo(3paginas) e não 3 arquivos(1pagina cada)

Por isso que criei esse codigo:

Sheets(Array("plan1", "plan2", "plan3", "plan4")).Select
Sheets("Início").Activate
ExecuteExcel4Macro "PRINT(1,,,1,,,,,,,,2,,,TRUE,,FALSE)"

Ele seleciona as planilhas que eu qro depois manda imprimir...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo, vou ver se consigo fazer em apenas uma pagina, assim que tiver uma resposta eu posto.

Deve ter alguma forma de colocar as planilhas selecionadas dentro de uma array e depois imprimir a array.

Abraços

RafaVillani

Compartilhar este post


Link para o post
Compartilhar em outros sites
Amigo, vou ver se consigo fazer em apenas uma pagina, assim que tiver uma resposta eu posto.

Deve ter alguma forma de colocar as planilhas selecionadas dentro de uma array e depois imprimir a array.

Abraços

RafaVillani

Existe, veja o que eu fiz.

Criei um array chamado "chkValor"


Sub imprimir2()


Dim i As Integer

Dim chkValor(6) As String
chkValor(0) = "Início"
chkValor(1) = ""
chkValor(2) = ""
chkValor(3) = ""
chkValor(4) = ""
chkValor(5) = "Final"



If Plan1.OLEObjects("checkbox1").Object.Value = False And Plan1.OLEObjects("checkbox2").Object.Value = False And Plan1.OLEObjects("checkbox3").Object.Value = False And Plan1.OLEObjects("checkbox4").Object.Value = False Then
MsgBox ("Selecione pelo menos 1 sistema!")

Else



For i = 1 To 4

If Plan1.OLEObjects("checkbox" & i).Object.Value = True Then

chkValor(i) = "plan" & i

End If

Next

MsgBox (chkValor)

'Quando mandou depurar, o VBA não mostra valor nenhum, enquanto dentro do FOR o valor final é "5"


'Na linha abaixo eu coloquei um breakpoint!!!!!

'Sheets(chkValor).Select
'Sheets(Array("Início", "Plan1", "Plan2", "Final")).Select
Sheets("Início").Activate
ExecuteExcel4Macro "PRINT(1,,,1,,,,,,,,2,,,TRUE,,FALSE)"


End If


End Sub

O problema é na hora de imprimir o array...

Dá o seguinte erro: "Subscrito fora do intervalo"

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, o engraçado é que eu consegui exatamente como queria desde o começo, so que o VBA continua com o mesmo erro!!

Erro em tempo de execução '9':

Subscrito fora do intervalo

Eu fiz certinho para a variavel pegar dinamicamente os checkbox selecionados, tanto que eu coloquei sem a variavel, uma linha acima comentada, e funciona perfeitamente.

Sub imprimir2()


Dim i As Integer

Dim chkValor(6) As String
Erase chkValor()
chkValor(0) = "Início"
chkValor(5) = """, ""Final"



If Plan1.OLEObjects("checkbox1").Object.Value = False And Plan1.OLEObjects("checkbox2").Object.Value = False And Plan1.OLEObjects("checkbox3").Object.Value = False And Plan1.OLEObjects("checkbox4").Object.Value = False Then
MsgBox ("Selecione pelo menos 1 sistema!")

Else


For i = 1 To 4

If Plan1.OLEObjects("checkbox" & i).Object.Value = True Then

chkValor(i) = "Plan" & i
Final = Final + """, """ + chkValor(i)

End If

Next

Final = chkValor(0) & Final & chkValor(5)


'Sheets(Array("Início", "Plan1", "Plan2", "Plan3", "Plan4", "Final")).Select
Sheets(Array(Final)).Select
Sheets("Início").Activate
ExecuteExcel4Macro "PRINT(1,,,1,,,,,,,,2,,,TRUE,,FALSE)"


End If


End Sub

Essa variavel Final no VBA aqui tem o valor exato que eu quero => "Início", "Plan1", "Plan2", "Plan3", "Plan4", "Final"

mas ainda assim dá o mesmo erro!

O que poderá ser desta vez?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Encontrei a solução!

Vou compartilhar com você, talvez alguem queira fazer o que eu fiz.

Sub imprimir2()

Dim i As Integer
Dim chkValor As Integer
Dim v(12) As Integer


If Plan1.OLEObjects("checkbox1").Object.Value = False And Plan1.OLEObjects("checkbox2").Object.Value = False And Plan1.OLEObjects("checkbox3").Object.Value = False And Plan1.OLEObjects("checkbox4").Object.Value = False And Plan1.OLEObjects("checkbox4").Object.Value = False And Plan1.OLEObjects("checkbox5").Object.Value = False And Plan1.OLEObjects("checkbox6").Object.Value = False And Plan1.OLEObjects("checkbox7").Object.Value = False And Plan1.OLEObjects("checkbox8").Object.Value = False And Plan1.OLEObjects("checkbox9").Object.Value = False Then
MsgBox ("Selecione pelo menos 1 sistema!")

Else


For i = 0 To 10

If Plan1.OLEObjects("checkbox" & i).Object.Value = True Then

v(i) = i

Select Case v(i)
Case 0 'Início
v(i) = 3
Case 1 'plan1
v(i) = 4
Case 2 'plan2
v(i) = 5
Case 3 'plan3
v(i) = 6
Case 4 'plan4
v(i) = 7
Case 5 'plan5
v(i) = 9
Case 6 'plan6
v(i) = 10
Case 7 'plan7
v(i) = 11
Case 8 'plan8
v(i) = 12
Case 9 'plan9
v(i) = 13
Case 10 'Final
v(i) = 14
End Select

Else

v(i) = 3

End If


Next




Sheets(Array(v(0), v(1), v(2), v(3), v(4), v(5), v(6), v(7), v(8), v(9), v(10))).Select
Sheets(3).Activate
ExecuteExcel4Macro "PRINT(1,,,1,,,,,,,,2,,,TRUE,,FALSE)"


End If


End Sub

Agradeço a RafaVillani, me inspirou a chegar em uma solução.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Visitante
Este tópico está impedido de receber novos posts.
Entre para seguir isso  





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×