Notifications
Clear all

Checkbox/OptionButton/imagens

5 Posts
2 Usuários
0 Reactions
1,569 Visualizações
(@valzito)
Posts: 22
Eminent Member
Topic starter
 

Bom dia Senhores.

Neste projeto tenho 2 imagens nas plan1 e plan2 respectivamente. Quando o CheckBox1 é TRUE carrega a imagem referente a que está na plan1. Quando o checkbox2 é TRUE carrega a imagem referente a que está na plan2. Gostaria que as imagens fossem carregadas somente quando os botões de opção também forem TRUE.

Segue o link: https://www.dropbox.com/s/hazwpd3o59g4c ... a.zip?dl=0

 
Postado : 06/11/2019 3:26 am
(@valzito)
Posts: 22
Eminent Member
Topic starter
 

Obrigado por responder farahA.

Funcionou direitinho.

Só uma coisa! como seria a rotina se eu por mais um botão no frame1? Exemplo: checkbox1 true optionbutton1 true levaria a imagem x. checkbox1 true optionbutton2 true levaria a imagem y. Eu falo com as duas opções dentro da mesma SUB.

Obrigado pela atenção.

 
Postado : 06/11/2019 4:01 pm
(@faraha)
Posts: 28
Eminent Member
 

Boa noite Valzito,

Neste caso eu só adicionaria um else if, veja:

Private Sub CheckBox1_Click()

If UserForm1.Frame1.OptionButton1 = True And UserForm1.CheckBox1 = True Then
Worksheets("plan1").Shapes("imagem1").CopyPicture
   Set Image1.Picture = PastePicture(xlPicture)
ElseIf UserForm1.Frame1.OptionButton2 = True And UserForm1.CheckBox1 = True Then
Worksheets("plan2").Shapes("imagem2").CopyPicture
   Set Image1.Picture = PastePicture(xlPicture)
Else
    Set Image1.Picture = Nothing
End If

End Sub

Private Sub OptionButton1_Click()

If UserForm1.Frame1.OptionButton1 = True And UserForm1.CheckBox1 = True Then
Worksheets("plan1").Shapes("imagem1").CopyPicture
   Set Image1.Picture = PastePicture(xlPicture)
ElseIf UserForm1.Frame1.OptionButton2 = True And UserForm1.CheckBox1 = True Then
Worksheets("plan2").Shapes("imagem2").CopyPicture
   Set Image1.Picture = PastePicture(xlPicture)
Else
    Set Image1.Picture = Nothing
End If

End Sub

Private Sub OptionButton2_Click()

If UserForm1.Frame1.OptionButton1 = True And UserForm1.CheckBox1 = True Then
Worksheets("plan1").Shapes("imagem1").CopyPicture
   Set Image1.Picture = PastePicture(xlPicture)
ElseIf UserForm1.Frame1.OptionButton2 = True And UserForm1.CheckBox1 = True Then
Worksheets("plan2").Shapes("imagem2").CopyPicture
   Set Image1.Picture = PastePicture(xlPicture)
Else
    Set Image1.Picture = Nothing
End If

End Sub

Lembrando que o código se repete nas 3 subs pois quero que a ação seja executada independente de qual controle de formulário eu usar por último.

Caso seu código precise de muitas condições (famoso "if") talvez seja legal a utilização de uma estrutura de repetição (famoso "For") para não precisar escrever mil condicionais, mas tudo depende de cada caso, particulamente até 3 optionbuttons eu realizaria como foi descrito acima, em caso de mais condições eu utilizaria uma estrutura com "for" para minimizar a quantidade de linhas de código.

Forte Abraço!

 
Postado : 06/11/2019 4:42 pm
(@valzito)
Posts: 22
Eminent Member
Topic starter
 

FarahA, obrigado por responder.

Tudo funcionou certinho.

Essa questão dos comandos funcionarem independentemente de qual for selecionado por último é um problema, visto que vou ter algo em torno de 34 botões dividido em 3 frames, o que geraria uma quantidade de linhas enorme. Você falou em uma opção de estrutura "FOR". Como seria? poderia citar um exemplo? Não seria possível um código que fizesse essa função que fosse posta em um modulo ou coisa do tipo?

Abç.

 
Postado : 07/11/2019 9:04 pm
(@faraha)
Posts: 28
Eminent Member
 

Bom dia Valzito,

Com relação ao que eu faria neste caso tendo 34 controles :o kkk

Quando elaboramos uma rotina em código, geralmente é para facilitar a vida do usuário, por isto é importante minimizar o trabalho do usuário, por isto ao invés de instruir ao usuário que ele deve clicar no "checkbox" primeiro para depois clicar no "optionbutton" eu simplesmente assumo e elaboro algo em que ele pode realizar das duas formas, o que não necessariamente quer dizer que precisamos fazer "Corno Job", sempre há uma maneira de minimizar o nosso trabalho, na maioria das vezes apenas não conhecemos:

No seu caso, não é possível escrever em apenas uma sub de um dos controles o que deseja ser feito, pois um "event handler" (no caso a ação de clicar) está diretamente ligado ao seu controle.

Maaaassss....
Você pode criar uma sub para dizer o que quer fazer ao clicar nos butões, e em cada "event handler" você apenas chama a sub, usando no exemplo anterior:

sub exemplo()
If UserForm1.Frame1.OptionButton1 = True And UserForm1.CheckBox1 = True Then
Worksheets("plan1").Shapes("imagem1").CopyPicture
   Set Image1.Picture = PastePicture(xlPicture)
ElseIf UserForm1.Frame1.OptionButton2 = True And UserForm1.CheckBox1 = True Then
Worksheets("plan2").Shapes("imagem2").CopyPicture
   Set Image1.Picture = PastePicture(xlPicture)
Else
    Set Image1.Picture = Nothing
End If
end sub

Private Sub CheckBox1_Click()
call exemplo
End Sub

Private Sub OptionButton1_Click()
call exemplo
End Sub

Private Sub OptionButton2_Click()
call exemplo
End Sub

Na verdade, isto é até o mais indicado, eu acho que deveria ter mencionado antes... :D

Sobre a estrutura de For edito este comentário assim que chegar em casa rsrs

 
Postado : 08/11/2019 9:22 am