Notifications
Clear all

acessar diretamente propriedades dos controles de formulario

4 Posts
2 Usuários
0 Reactions
861 Visualizações
(@edcronos2)
Posts: 346
Reputable Member
Topic starter
 

não sei se alguem vai ser capaz de responder
eu quero usar caixas de seleção no excel sem usar celula de referencia com a macro apenas verificando o valor da caixa
mas eu não consigo ter acesso as propriedades da caixa diretamente
provavelmente o excel cria um sub modulo para conter essas caixas então só se tem acesso selecionando diretamente

fazendo seleção do objeto se tem acesso se está ativo ou não

    Set a = Selection
    ActiveSheet.Shapes.Range(Array(Application.Caller)).Select
    With Selection
        If .Value = xlOn Then   
            Range("DiasMesFiltro").Value2 = True
        Else
            Range("DiasMesFiltro").Value2 = False
        End If
    End With
    a.Selectt

já assim tentando acessar diretamente dá erro

    With ActiveSheet.Shapes.Range(Array(Application.Caller))
        If .Value = xlOn Then
            Range("DiasMesFiltro").Value2 = True
        Else
            Range("DiasMesFiltro").Value2 = False
        End If
    End With

tentei de varias maneiras mas não achei um jeito de acessar diretamente o objeto
talvez descobrindo como o excel cria e armazena esses objetos já que nem são naturais dele

o codigo que funciona ativando uma mensagem com qualquer objeto que chame a macro "caixa de seleção"

sub mensagem() 
    ActiveSheet.Shapes.Range(Array(Application.Caller)).Select
    With Selection
        If .Value = xlOn Then   
            Msgbox "ativado"
        Else
       Msgbox "desativado"
        End If
    End With
end sub

 
Postado : 15/07/2016 3:25 pm
(@edcronos2)
Posts: 346
Reputable Member
Topic starter
 

kkkk
nunca falha quando estou naquela luta para descobrir algo é só postar aqui que me vem a solução na cabeça
como falei o excel deve criar um formulario para alojar os objetos ou algo assim
pode ter algo com suas próprias propriedades fora do vba já que não aceita todos os parâmetros

Sub mensagem()
    With ActiveSheet.CheckBoxes(Application.Caller)
        If .Value = xlOn Then
           .Interior.Color = 20211
            .Text = "ativado"
        Else
          .Interior.Color = 105601
            .Text = "desativado"
        End If
    End With
End Sub

 
Postado : 15/07/2016 3:51 pm
(@osvaldomp)
Posts: 857
Prominent Member
 
Sub mensagemV2()
 If ActiveSheet.Shapes(Application.Caller).OLEFormat.Object.Value = 1 Then MsgBox "marcada" Else: MsgBox "desmarcada"
End Sub

Osvaldo

 
Postado : 15/07/2016 4:06 pm
(@edcronos2)
Posts: 346
Reputable Member
Topic starter
 

a muito tempo eu cheguei a mexer com .OLEFormat.Object.
mas como vira e volta eu esqueço até como se escreve msgbox nunca ia lembrar disso

vou usar o ActiveSheet.CheckBoxes(Application.Caller) pq fica mais simples , a não ser que tenha alguma vantagem em usar o .OLEFormat.Object.

é uma pena esses objetos de formulário não aceitar mudar o tamanho do texto , sei que tem os activX mas não gostei muito , eles ficam fazendo releitura das propriedades de maneira continua e no meu modo de estruturar a planilha isso não funciona muito bem

 
Postado : 15/07/2016 4:45 pm