Wagner,
Bom dia!
Ontem eu passei o dia todo lendo fóruns pra tentar resolver esse problema que na hora de postar a duvida aqui a cabeça já tava saturada e não expliquei direito. Na verdade minha situação é um pouco mais complicada, eu acho... Mas agora vou colar meus códigos reais e você vai entender:
Eu tenho um conjunto de 6 togglebuttons (BtnAzulEscuro, BtnAzulClaro, BtnAmarelo, BtnVermelho, BtnCinza e BtnLimpar). Eu controlo eles usando o evento Worksheet_SelectionChange, para que toda vez que um deles estiver selecionado (value = true), copie a formatação de uma célula específica e cole nas células onde eu clicar.
Exemplo BtnAzulEscuro (o código dos outros botões é igual, só muda a célula de onde a formatação é copiada).
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If BtnAzulEscuro.Value = True Then
' Desabilita a atualização de tela
Application.ScreenUpdating = False
Sheets("Apoio").Range("E1").Copy
Selection.PasteSpecial xlPasteFormats
' Atualiza os calculos da aba ativa
ActiveSheet.Calculate
' Habilita a atualização de tela
Application.ScreenUpdating = True
End If
End Sub
Agora, em cada um dos togglebuttons (evento click) eu tenho um código para que apenas 1 deles fique selecionado (evitar que 2 fiquem selecionados ao mesmo tempo)
Exemplo BtnAzulEscuro
Private Sub BtnAzulEscuro_Click()
BtnAzulEscuro.BackColor = RGB(0, 132, 231)
If BtnAzulEscuro.Value = True Then
BtnAzulClaro.Value = False
BtnAmarelo.Value = False
BtnVermelho.Value = False
BtnCinza.Value = False
BtnLimpar.Value = False
End If
End Sub
O que eu quero é copiar todos esses 6 botões e usá-los em várias outras linhas da mesma aba e também em abas diferentes, mas na hora que eu copio, por exemplo, o BtnAzulEscuro e colo em outro ponto da mesma aba, a cópia é renomeada automaticamente para Togglebutton1 e obviamente perde toda a funcionalidade.
Para eu fazer ele funcionar tenho que renomear elepara BtnAzulEscuro2 (fazer o mesmo com as cópias dos outros botões), alterar o código do Worksheet_SelectionChange para:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If BtnAzulEscuro.Value = True Or BtnAzulEscuro2.Value = True Then
' Desabilita a atualização de tela
Application.ScreenUpdating = False
Sheets("Apoio").Range("E1").Copy
Selection.PasteSpecial xlPasteFormats
' Atualiza os calculos da aba ativa
ActiveSheet.Calculate
' Habilita a atualização de tela
Application.ScreenUpdating = True
End If
End Sub
E alterar o código do BtnAzulEscuro2_Click para:
Private Sub BtnAzulEscuro2_Click()
BtnAzulEscuro2.BackColor = RGB(0, 132, 231)
If BtnAzulEscuro2.Value = True Then
BtnAzulClaro2.Value = False
BtnAmarelo2.Value = False
BtnVermelho2.Value = False
BtnCinza2.Value = False
BtnLimpar2.Value = False
End If
End Sub
Só que eu vou ter que copiar esse botão muitas e muitas vezes na minha planilha então alterar tudo manualmente é inviável! As soluções que imaginei foram:
1 - Como todos os botões tem uma backcolor específica, fazer com que o evento Worksheet_SelectionChange identifique os botões pela cor e não pelo nome. O código ficaria algo assim:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If "Qualquer toggle button com o backcolor X" = True Then
' Desabilita a atualização de tela
Application.ScreenUpdating = False
Sheets("Apoio").Range("E1").Copy
Selection.PasteSpecial xlPasteFormats
' Atualiza os calculos da aba ativa
ActiveSheet.Calculate
' Habilita a atualização de tela
Application.ScreenUpdating = True
End If
End Sub
* O mesmo serve para identificar os botões com nome que comecem com uma palavra específica, desta forma eu renomearia os botões para BtnAzulEscuro1, BtnAzulescuro2, BtnAzulEscuro3, etc. e faria o evento identificar botões que comecem com a palavra "BtnAzulEscuro". Mas lógico que identificar pela cor é mais fácil porque eu não vou precisar perder tempo renomeando os botões.
2 - Solução parecida com a primeira. Criar uma variável que armazene o nome de todos os botões com a backcolor específica e usar essa variável no evento Worksheet_SelectionChange, mas não sei se uma variável pode armazenar vários valores diferentes e se o evento vai conseguir "ler" todos esses nomes diferentes.
3 - Desistir dos togglebuttons e usar Formas (Shapes), já que estas podem permanecer com o mesmo nome e posso copiar livremente. Mas eu fiz um teste aqui, configurei um retângulo como botão, só que eu quero que ele fique com a aparência de um togglebutton (indique quando estiver selecionado/ligado), então eu criei um código que, quando eu clicar a primeira vez no Shape, ele assume um efeito 3D simulando um botão pressionado/ligado, etc e tal. Funciona, mas quando eu copio esta Forma/Shape e colo em outra célula, o efeito 3D só atua sobre o primeiro botão e não sobre a cópia....
Eu vou deixar um anexo com exemplo aqui para facilitar no entendimento.
Postado : 11/08/2017 9:20 am