INSERIR CONTROLE CODIFICADO EM PLANILHA

PABLOMOREIRAGV 23/12/2015 07:43:31
#455453
Olá pessoal,

Tenho um botão inserido em uma planilha do excel que tem a função de adicionar um controle [Ô]Image[Ô] nela mesma. O controle adiciona com sucesso porém eu queria que esse controle já fosse inserido com um código nele, ou seja, preciso que ele seja funcional no momento da inserção.
Estou colocando um arquivo em anexo que é o exemplo do que eu preciso e na planilha está descrito o código que deveria estar inserido no controle no momento da inserção. Alguém pode me ajudar?

Desde já agradeço,


ASHKATCHUP 12/01/2016 10:51:30
#456006
Resposta escolhida
Cara, a solução é meio complexa.
Tu vai ter que adicionar uma classe ou criar funções em tempo de execução.
Tu REALMENTE precisa disso? Se sim, dá uma olhada:

http://stackoverflow.com/questions/3014421/how-to-add-events-to-controls-created-at-runtime-in-excel-with-vba

http://stackoverflow.com/questions/10592641/assign-event-handlers-to-controls-on-user-form-created-dynamically-in-vba
PABLOMOREIRAGV 12/01/2016 10:58:21
#456008
Citação:

:
Cara, a solução é meio complexa.
Tu vai ter que adicionar uma classe ou criar funções em tempo de execução.
Tu REALMENTE precisa disso? Se sim, dá uma olhada:

http://stackoverflow.com/questions/3014421/how-to-add-events-to-controls-created-at-runtime-in-excel-with-vba

http://stackoverflow.com/questions/10592641/assign-event-handlers-to-controls-on-user-form-created-dynamically-in-vba



Na verdade é um pouco mais complexo. Dê uma olhada neste arquivo. Seria exatamente isso, só que preciso do componente Image esteja já com o código inserido nele. Mas se possível, eu preciso do código ou de um arquivo exemplo, pois o meu conhecimento é limitado.

Obrigado
MITSUEDA 12/01/2016 13:55:19
#456026
Boa tarde,

Acho que isso resolve.

Abraço
PABLOMOREIRAGV 12/01/2016 14:04:53
#456027
Citação:

:
Boa tarde,

Acho que isso resolve.

Abraço


Citação:

:
Boa tarde,

Acho que isso resolve.

Abraço


Citação:

:
Boa tarde,

Acho que isso resolve.

Abraço



Obrigado pelo retorno Fábio, seria exatamente isso mesmo. Mas, teria como implantar neste arquivo em anexo? Pois o componente é inserido em um novo arquivo do excel e não consegui.

Obrigado.... abs.
ASHKATCHUP 12/01/2016 17:51:33
#456043

Consegui fazer funcionar. Na boa, isso me deu uma dor de cabeça.

O arquivo está em anexo, mas vou postar o código para facilitar consultas posteriores.

Obs.: se um erro acontecer, vá na Central de Confiabilidade, na aba [Ô]Configurações de Macro[Ô] e habilite a opção [Ô]Confiar no acesso ao modelo de objeto do projeto do VBA[Ô]

1º passo: cria um módulo e cole o seguinte código:

Option Explicit

Public Sub CriaEventoClick(ByRef objWorkbook As Workbook, objImagem As OLEObject)
Dim iIndice As Integer
Dim objCodeModule As Object
[ô]
For iIndice = 1 To objWorkbook.VBProject.VBComponents.Count
[ô]
If objWorkbook.VBProject.VBComponents(iIndice).Properties([Ô]Name[Ô]).Value = [Ô]Captura de Trajeto[Ô] Then
[ô]
Set objCodeModule = objWorkbook.VBProject.VBComponents(iIndice).CodeModule
[ô]
AdicionaCodigo objCodeModule, [Ô]Sub [Ô] & objImagem.Name & [Ô]_Click()[Ô]
AdicionaCodigo objCodeModule, [Ô]Set CaixaDialogo = Application.FileDialog(msoFileDialogFilePicker)[Ô]
AdicionaCodigo objCodeModule, [Ô]With CaixaDialogo[Ô]
AdicionaCodigo objCodeModule, [Ô].Title = [Ô][Ô]Relatório de Fotos - By Pablo Moreira[Ô][Ô][Ô]
AdicionaCodigo objCodeModule, [Ô].InitialView = msoFileDialogViewPreview[Ô]
AdicionaCodigo objCodeModule, [Ô].AllowMultiSelect = False[Ô]
AdicionaCodigo objCodeModule, [Ô]If .Show = -1 Then[Ô]
AdicionaCodigo objCodeModule, [Ô]EnderecoImagem = .SelectedItems(1)[Ô]
AdicionaCodigo objCodeModule, [Ô]Image1.Picture = LoadPicture(.SelectedItems(1))[Ô]
AdicionaCodigo objCodeModule, [Ô]Image1.PrintObject = True[Ô]
AdicionaCodigo objCodeModule, [Ô]End If[Ô]
AdicionaCodigo objCodeModule, [Ô]End With[Ô]
AdicionaCodigo objCodeModule, [Ô]End Sub[Ô]
[ô]
End If
[ô]
Next
[ô]
End Sub

Private Sub AdicionaCodigo(ByRef objCodigo As Object, sLinha As String)
Dim iLinhas As Integer
[ô]
iLinhas = objCodigo.CountOfLines + 1
objCodigo.InsertLines iLinhas, sLinha
[ô]
End Sub


2º passo: altere o código do botão (CommandButton1) para o seguinte:

Private Sub CommandButton1_Click()
Dim newWorkbook As Workbook
Dim newImage As Object
[ô]
Application.SendKeys [Ô](%{1068})[Ô]
DoEvents
[ô]
Set newWorkbook = Workbooks.Add
[ô]
ActiveSheet.Name = [Ô]Captura de Trajeto[Ô]
Worksheets([Ô]Captura de Trajeto[Ô]).Activate
Range([Ô]A1[Ô]).Select

ActiveSheet.Paste

Set newImage = ActiveSheet.OLEObjects.Add(ClassType:=[Ô]Forms.Image.1[Ô], Link:=False, _
DisplayAsIcon:=False, Left:=0, Top:=200, Width:=355.5, Height:=195)

newImage.Select
CriaEventoClick newWorkbook, newImage

Set newImage = Nothing
Set newWorkbook = Nothing

Me.Hide
Range([Ô]A1[Ô]).Select
End Sub

PABLOMOREIRAGV 13/01/2016 09:52:51
#456071
Bom dia,

Muito obrigado pelo retorno ASHKATCHUP, imagino que não deve ter sido fácil mesmo..rs.rs... mas, era isso mesmo que queria, está funcionando corretamente... estarei encerrando o tópico te pontuando.

abs,
Tópico encerrado , respostas não são mais permitidas