Notifications
Clear all

Acionar macro de acordo com posição de botão

13 Posts
3 Usuários
0 Reactions
1,088 Visualizações
(@edcronos)
Posts: 1006
Noble Member
Topic starter
 

Ola

Já vi, mas não estou achando os tópicos relacionados

para evitar de criar uma macro para cada botão, queria acionar a macro de acordo com valor da célula em que o botão está.

Alguém tem algo a respeito ?

Att.

 
Postado : 04/07/2014 7:47 am
(@wagner-morel-vidal-nobre)
Posts: 4063
Famed Member
 

Edcronos,

Bom Dia!

Pelo menos para mim, sua mensagem está muito genérica... seja mais específico, por gentileza. Preferencialmente, anexe um exemplo.

 
Postado : 04/07/2014 8:40 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Bom dia!!

Se poder explicar um pouco mais sua ideia e dúvida de ter tal necessidade.

Att

 
Postado : 04/07/2014 8:47 am
(@edcronos)
Posts: 1006
Noble Member
Topic starter
 

Desculpa,

tipo eu tenho varias copias do mesmo botão que chama a mesma macro

cada botão está em uma parte da planilha
Ex. A1 , Z1 , AD1

quando acionar o botão que está em A1
a macro vai saber que o botão estava em cima de A1 e lê o valor da célula A1

Não sei se deu para entender.

 
Postado : 04/07/2014 8:50 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Seria isto ?

 
Postado : 04/07/2014 9:07 am
(@edcronos)
Posts: 1006
Noble Member
Topic starter
 

é não

os botões vão chamar a mesma macro
a macro que vai verificar a posição do botão dentro da planilha

já vi uns 3 desses a algum tempo, mas não consegui relacionar nas pesquisas

 
Postado : 04/07/2014 9:13 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Provavelmente não entendi corretamente, mas no exemplo temos somente uma Macro Sub Teste().
Como disse que cada botão está posicionada em cima de uma determinada celula, então nomeamos cada botão referenciando a celula que se refere e quando clicado captura o Valor da Celula e chama a macro Teste.

De inicio pensei que estava se referindo a Controles em Tempo de Execução onde podemos capturar qual botão foi clicado, mas depois da ultima explicação entendi conforme o exemplo que anexei.

Editei, porque talvez esteja se referindo a posição Left - Top de cada Botão, tem como capturar isto, mas teríamos deter tipo uma tabela com Select Case com as Posições inicial destes Botões e dai direcionar.

[]s

 
Postado : 04/07/2014 9:27 am
(@edcronos)
Posts: 1006
Noble Member
Topic starter
 

ola

creio que seja isso

De inicio pensei que estava se referindo a Controles em Tempo de Execução onde podemos capturar qual botão foi clicado,

já vi em funcionamento acho que até salvei mas não estou achando

do jeito que Voce fez eu uso em um userform

Private Sub Sob_dir_Click()
    mL = 1: mC = 1
    Lado_Click
End Sub
Private Sub Desc_Esq_Click()
    mL = -1: mC = -1
    Lado_Click
End Sub
Private Sub Desc_dir_Click()
    mL = -1: mC = 1
    Lado_Click
End Sub
...

mas como os valores e posições são variantes e não fixos não tenho como definir nomes e valores fixos nas macros.

Até

 
Postado : 04/07/2014 9:38 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Agora estou saindo, preparar pro jogo do Brasil, se der tempo em casa dou uma olhada melhor, mas procure por "controles em tempo de execução" e encontrara alguns tópicos e modelos.

[]s

 
Postado : 04/07/2014 9:41 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Apesar de serem "cópias do mesmo botão", cada um recebe um nome deferente.
Utilizando a função Caller (Aplication.Caller) é possível determinar qual botão foi acionado; a partir dai é possível direcionar a excução.
Seria algo +/- assim:

Sub Executa()
Dim NomeObjeto As String

'Identifica qual foi o objeto chamado/clicado (Caller)
NomeObjeto = Application.Caller
'Identifica nome do arquivo caso deva chamar uma rotina de outro modulo
Escrito = ThisWorkbook.Name 'ActiveSheet.DrawingObjects(NomeObjeto).Text

Select Case NomeObjeto
    Case "UEx_1"
        Application.Run "'" & Escrito & "'" & "!VoltaMenu"
        Sheets("Dados_UEx").Visible = False
    Case "UE_1"
        Application.Run "'" & Escrito & "'" & "!VoltaMenu"
        Sheets("Dados_U.E.").Visible = False
    Case "Cadastro_1"
        If [F10].Value = "" Or [F13].Value = "" Then
            MsgBox "Favor informar Aplicação / Data "
        Else
            Sheets("Cadastrar_Cotações").Visible = True
            Sheets("Cadastro").Visible = False
            Sheets("Cadastrar_Cotações").Select
            Sheets("Cadastrar_Cotações").Range("E7") = Sheets("Cadastro").Range("F10").Value
            Sheets("Cadastrar_Cotações").Range("E9") = Sheets("Cadastro").Range("F13").Value
        End If
    Case "Cadastro_2"
        If [F27].Value <> "" Then
            Sheets("Consolidação").Visible = True
            Sheets("Cadastro").Visible = False
        Application.Run "'" & Escrito & "'" & "!Consolidar"
        Else
            MsgBox "Favor informar a Cotaçao"
        End If
 End Select
End Sub
 
Postado : 04/07/2014 9:47 am
(@edcronos)
Posts: 1006
Noble Member
Topic starter
 

hum, entendi mais ou menos

não sei bem se foi isso que eu vi, mas acho que não.

pelo que eu lembro a macro verificava em qual célula estava o botão
que é basicamente oq eu preciso, saber a localização do botão "O Endereço da Célula onde o botão está"

nem vou usar o valor da celula, apenas cruzar sua localização com uma tabela

tenho maneira de fazer com botões separados "eu acho"

Mas além de deixar a planilha mais dinâmica tbm queria aprender algo mais

Att.

 
Postado : 04/07/2014 10:09 am
(@edcronos)
Posts: 1006
Noble Member
Topic starter
 

consegui com botão comum.

foi até simples
Mas estou querendo usar formas de setas para acionar a macro.

Até

 
Postado : 04/07/2014 12:41 pm
(@edcronos)
Posts: 1006
Noble Member
Topic starter
 

Bem, depois de gravar um monte de macro para descobrir como fazer me enrolei com um "."

e bastava usar Shapes

 
Postado : 04/07/2014 1:43 pm