Notifications
Clear all

Checkbox no excel: Alterar o Caption por macro

8 Posts
2 Usuários
0 Reactions
2,398 Visualizações
(@tusallum)
Posts: 6
Active Member
Topic starter
 

Olá!!

Estou fazendo um programa no excel 2010 para transformar um banco de dados em um formulário com a formatação adequada para ser impresso, trata-se de um formulário com várias questões onde cada questão tem seus respectivos itens (checkboxes).

O checkbox é gerado um uma aba do excel atraves de uma macro e a descrição (caption) deve ser igual a um campo específico de outra aba. Está funcionando corretamente quando insiro o checkbox de "controle de formulário" ao invés de "controles ActiveX", porém o processamento fica MUITO mais lento e quando abro no excel 2007 a descricao do checkbox nao pula para a linha de baixo quando esta muito grande.

Meu problema é que consigo inserir um checkbox de "controle ActiveX" por macro em uma planilha excel porém não consigo alterar seu "caption". Já tentei de muitas maneiras e não da certo. Alguem pode me ajudar, por favor?

Segue o codigo que estou usando para inserir o checkbox.

ActiveSheet.OLEObjects.Add(ClassType:="Forms.CheckBox.1", Link:=False, _
                DisplayAsIcon:=False, Left:=6, Top:=15, Width:=108, Height:=19.5). _
                Select
 
Postado : 26/12/2013 9:26 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Bom dia!!

Porque postar dúvidas tão similares em posts diferentes?

Att

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 27/12/2013 3:36 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Bom dia!!

Tente assim...

Option Explicit

Sub AleVBA_10037()

Dim oleObj As OLEObject
Dim intCount As Integer
Dim sh As Worksheet
Dim s As Shape
Dim o As OLEObject
Set sh = ActiveSheet
Dim obj As OLEObject

Set oleObj = ActiveSheet.OLEObjects.Add(ClassType:="Forms.CheckBox.1", Link:=False, _
DisplayAsIcon:=False, Left:=Range("C10").Left, _
Top:=Range("C10").Top, Width:=108, Height:=19.5)

With oleObj.Object
    .Caption = ""
    .Font.Size = 10
    .Font.Italic = True
    .Font.Bold = True
    .Value = xlOff
End With

intCount = sh.OLEObjects.Count
Debug.Print "OLE Objects = " & intCount

For Each o In sh.OLEObjects
    If o.progID = "Forms.CheckBox.1" Then
        Debug.Print o.Name
        Debug.Print o.OLEType
        Debug.Print o.Object.Value
        Debug.Print o.Object.Caption
        o.Object.Caption = "AleVBA" '<_Tente assim
        o.Object.Value = xlOn
        Debug.Print o.Object.Caption
        Debug.Print o.Object.Value
        Debug.Print o.TopLeftCell.Address
    End If
Next o

Set sh = Nothing

End Sub

Para mais detalhes veja:
http://www.logicwurks.com/CodeExamplePa ... Boxes.html

Att

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 27/12/2013 4:04 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Bom dia!!

Uma outra forma seria..

Sub AleVBA_()
Dim oleObj As OLEObject
 
Set oleObj = ActiveSheet.OLEObjects.Add(ClassType:="Forms.CheckBox.1", Link:=False, _
DisplayAsIcon:=False, Left:=Range("A1").Left, _
Top:=Range("A1").Top, Width:=108, Height:=19.5)
 
With oleObj.Object
    .Caption = "AleVBA" '<- Rótulo do objeto
    .Font.Size = 10
    .Font.Italic = True
    .Font.Bold = True
End With

End Sub

Att

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 27/12/2013 4:11 am
(@tusallum)
Posts: 6
Active Member
Topic starter
 

Alexandre,

Criei dois tópicos porque apesar de ter dois problemas relacionados ao mesmo programa, acho que eles são bem diferentes, inclusive posso resolver um e não resolver o outro. É também a primeira vez que abro um tópico e participo mais ativamente do planilhando.com.br.

Te agradeço pela ajuda, agora funcionou!!!! havia pesquisado e tentado de várias formas, mas sem sucesso.

Agora apareceu um outro problema, me parece que tem um limite de checkboxes do tipo "controles Active X" pois apareceu o problema abaixo após rodar corretamente por um tempo:

"Erro em tempo de execução '-2147319765 (8002802b)':
Erro de automação
A biblioteca de objetos é inválida ou contém referências a definições de objetos que não puderam ser localizadas"

Quando uso o checkbox "Controles de Formulário" o programa roda perfeitamente sem problemas.

Sabe a causa?

Desde já agradeço.

 
Postado : 28/12/2013 12:54 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Bom dia!

A cousa poder ser variada, imagine que foi feito uma referencia que não suporta o tipo de dado.

Só tendo seu arquivo para testar realmente o que houve.

Mas não te serve ficar com o checkboxes do tipo "Controles de Formulário"?

Att

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 29/12/2013 5:22 am
(@tusallum)
Posts: 6
Active Member
Topic starter
 

Alexandre, bom dia.

Estou desconfiado da quantidade de check pois a rotina é exatamente a mesma, funciona para 75% de um "for" e depois da o problema. Não encontrei outra explicação.

A alternativa é utilizar mesmo o checkbox de "controle de formulario", a única desvantagem é que no excel 2007, quando o caption é muito grande ele não divide em duas linhas.

No 2010 funciona bem.

Obrigado pela ajuda

 
Postado : 29/12/2013 2:23 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Caso seja necessário reabrir o tópico, o autor poderá enviar uma MP para um dos moderadores solicitando o desbloqueio.

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 29/12/2013 6:13 pm