Notifications
Clear all

Loop em Controles da Planilha

5 Posts
1 Usuários
0 Reactions
930 Visualizações
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Ola Pessoal,

É possível fazer um Loop nos Controles da PLANILHA ? Sei que há como fazer isso nos Controles do FORM, porém agora preciso fazer o mesmo nos Controles da Planilha, pois como podem ver a rotina abaixo ficou extensa e também lenta.

Sub imagem()
On Error GoTo ErrorHandler

' Meu objetivo era fazer esse loop e com isso poupar linhas e tempo
        'For I = 1 To 50
  
            'Sheets("CART50").Controls("Image" & I).Picture = LoadPicture(txtfoto)
            'Sheets("CART50").Controls("Image" & I).PictureSizeMode = fmPictureSizeModeStretch

        'Next

        Sheets("CART50").Image1.Picture = LoadPicture(txtfoto)
        Sheets("CART50").Image1.PictureSizeMode = fmPictureSizeModeStretch
        
        Sheets("CART50").Image2.Picture = LoadPicture(txtfoto)
        Sheets("CART50").Image2.PictureSizeMode = fmPictureSizeModeStretch
        
        Sheets("CART50").Image3.Picture = LoadPicture(txtfoto)
        Sheets("CART50").Image3.PictureSizeMode = fmPictureSizeModeStretch
        
        Sheets("CART50").Image4.Picture = LoadPicture(txtfoto)
        Sheets("CART50").Image4.PictureSizeMode = fmPictureSizeModeStretch
        
        Sheets("CART50").Image5.Picture = LoadPicture(txtfoto)
        Sheets("CART50").Image5.PictureSizeMode = fmPictureSizeModeStretch
        
        Sheets("CART50").Image6.Picture = LoadPicture(txtfoto)
        Sheets("CART50").Image6.PictureSizeMode = fmPictureSizeModeStretch
        
        Sheets("CART50").Image7.Picture = LoadPicture(txtfoto)
        Sheets("CART50").Image7.PictureSizeMode = fmPictureSizeModeStretch
        
        Sheets("CART50").Image8.Picture = LoadPicture(txtfoto)
        Sheets("CART50").Image8.PictureSizeMode = fmPictureSizeModeStretch
        
        Sheets("CART50").Image9.Picture = LoadPicture(txtfoto)
        Sheets("CART50").Image9.PictureSizeMode = fmPictureSizeModeStretch
        
        Sheets("CART50").Image10.Picture = LoadPicture(txtfoto)
        Sheets("CART50").Image10.PictureSizeMode = fmPictureSizeModeStretch
                
                
        Sheets("CART50").Image11.Picture = LoadPicture(txtfoto)
        Sheets("CART50").Image11.PictureSizeMode = fmPictureSizeModeStretch
        
        Sheets("CART50").Image12.Picture = LoadPicture(txtfoto)
        Sheets("CART50").Image12.PictureSizeMode = fmPictureSizeModeStretch
        
        Sheets("CART50").Image13.Picture = LoadPicture(txtfoto)
        Sheets("CART50").Image13.PictureSizeMode = fmPictureSizeModeStretch
        
        Sheets("CART50").Image14.Picture = LoadPicture(txtfoto)
        Sheets("CART50").Image14.PictureSizeMode = fmPictureSizeModeStretch
        
        Sheets("CART50").Image15.Picture = LoadPicture(txtfoto)
        Sheets("CART50").Image15.PictureSizeMode = fmPictureSizeModeStretch
        
        Sheets("CART50").Image16.Picture = LoadPicture(txtfoto)
        Sheets("CART50").Image16.PictureSizeMode = fmPictureSizeModeStretch
        
        Sheets("CART50").Image17.Picture = LoadPicture(txtfoto)
        Sheets("CART50").Image17.PictureSizeMode = fmPictureSizeModeStretch
        
        Sheets("CART50").Image18.Picture = LoadPicture(txtfoto)
        Sheets("CART50").Image18.PictureSizeMode = fmPictureSizeModeStretch
        
        Sheets("CART50").Image19.Picture = LoadPicture(txtfoto)
        Sheets("CART50").Image19.PictureSizeMode = fmPictureSizeModeStretch
        
        Sheets("CART50").Image20.Picture = LoadPicture(txtfoto)
        Sheets("CART50").Image20.PictureSizeMode = fmPictureSizeModeStretch
        
        
        Sheets("CART50").Image21.Picture = LoadPicture(txtfoto)
        Sheets("CART50").Image21.PictureSizeMode = fmPictureSizeModeStretch
        
        Sheets("CART50").Image22.Picture = LoadPicture(txtfoto)
        Sheets("CART50").Image22.PictureSizeMode = fmPictureSizeModeStretch
        
        Sheets("CART50").Image23.Picture = LoadPicture(txtfoto)
        Sheets("CART50").Image23.PictureSizeMode = fmPictureSizeModeStretch
        
        Sheets("CART50").Image24.Picture = LoadPicture(txtfoto)
        Sheets("CART50").Image24.PictureSizeMode = fmPictureSizeModeStretch
        
        Sheets("CART50").Image25.Picture = LoadPicture(txtfoto)
        Sheets("CART50").Image25.PictureSizeMode = fmPictureSizeModeStretch
        
        Sheets("CART50").Image26.Picture = LoadPicture(txtfoto)
        Sheets("CART50").Image26.PictureSizeMode = fmPictureSizeModeStretch
        
        Sheets("CART50").Image27.Picture = LoadPicture(txtfoto)
        Sheets("CART50").Image27.PictureSizeMode = fmPictureSizeModeStretch
        
        Sheets("CART50").Image28.Picture = LoadPicture(txtfoto)
        Sheets("CART50").Image28.PictureSizeMode = fmPictureSizeModeStretch
        
        Sheets("CART50").Image29.Picture = LoadPicture(txtfoto)
        Sheets("CART50").Image29.PictureSizeMode = fmPictureSizeModeStretch
        
        Sheets("CART50").Image30.Picture = LoadPicture(txtfoto)
        Sheets("CART50").Image30.PictureSizeMode = fmPictureSizeModeStretch
        
        
        Sheets("CART50").Image31.Picture = LoadPicture(txtfoto)
        Sheets("CART50").Image31.PictureSizeMode = fmPictureSizeModeStretch
        
        Sheets("CART50").Image32.Picture = LoadPicture(txtfoto)
        Sheets("CART50").Image32.PictureSizeMode = fmPictureSizeModeStretch
        
        Sheets("CART50").Image33.Picture = LoadPicture(txtfoto)
        Sheets("CART50").Image33.PictureSizeMode = fmPictureSizeModeStretch
        
        Sheets("CART50").Image34.Picture = LoadPicture(txtfoto)
        Sheets("CART50").Image34.PictureSizeMode = fmPictureSizeModeStretch
        
        Sheets("CART50").Image35.Picture = LoadPicture(txtfoto)
        Sheets("CART50").Image35.PictureSizeMode = fmPictureSizeModeStretch
        
        Sheets("CART50").Image36.Picture = LoadPicture(txtfoto)
        Sheets("CART50").Image36.PictureSizeMode = fmPictureSizeModeStretch
        
        Sheets("CART50").Image37.Picture = LoadPicture(txtfoto)
        Sheets("CART50").Image37.PictureSizeMode = fmPictureSizeModeStretch
        
        Sheets("CART50").Image38.Picture = LoadPicture(txtfoto)
        Sheets("CART50").Image38.PictureSizeMode = fmPictureSizeModeStretch
        
        Sheets("CART50").Image39.Picture = LoadPicture(txtfoto)
        Sheets("CART50").Image39.PictureSizeMode = fmPictureSizeModeStretch
        
        Sheets("CART50").Image40.Picture = LoadPicture(txtfoto)
        Sheets("CART50").Image40.PictureSizeMode = fmPictureSizeModeStretch
        
        
        Sheets("CART50").Image41.Picture = LoadPicture(txtfoto)
        Sheets("CART50").Image41.PictureSizeMode = fmPictureSizeModeStretch
        
        Sheets("CART50").Image42.Picture = LoadPicture(txtfoto)
        Sheets("CART50").Image42.PictureSizeMode = fmPictureSizeModeStretch
        
        Sheets("CART50").Image43.Picture = LoadPicture(txtfoto)
        Sheets("CART50").Image43.PictureSizeMode = fmPictureSizeModeStretch
        
        Sheets("CART50").Image44.Picture = LoadPicture(txtfoto)
        Sheets("CART50").Image44.PictureSizeMode = fmPictureSizeModeStretch
        
        Sheets("CART50").Image45.Picture = LoadPicture(txtfoto)
        Sheets("CART50").Image45.PictureSizeMode = fmPictureSizeModeStretch
        
        Sheets("CART50").Image46.Picture = LoadPicture(txtfoto)
        Sheets("CART50").Image46.PictureSizeMode = fmPictureSizeModeStretch
        
        Sheets("CART50").Image47.Picture = LoadPicture(txtfoto)
        Sheets("CART50").Image47.PictureSizeMode = fmPictureSizeModeStretch
        
        Sheets("CART50").Image48.Picture = LoadPicture(txtfoto)
        Sheets("CART50").Image48.PictureSizeMode = fmPictureSizeModeStretch
        
        Sheets("CART50").Image49.Picture = LoadPicture(txtfoto)
        Sheets("CART50").Image49.PictureSizeMode = fmPictureSizeModeStretch
        
        Sheets("CART50").Image50.Picture = LoadPicture(txtfoto)
        Sheets("CART50").Image50.PictureSizeMode = fmPictureSizeModeStretch
        
       
ErrorHandler:
        If Err.Number = 71 Then MsgBox ("Não existe foto")
        Err.Clear
        Resume Next
End Sub
 
Postado : 09/11/2016 11:06 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Veja se seria isto :

Ressaltando que tem de ajustar o caminho das imagens na Variável "LoadPicture(txtfoto)", você não especificou como será informado, se os nomes estiverem em Ranges e supondo na coluna A, pode ser definido conforme está na rotina abaixo :

Sub LoopImagens()

    Dim i As Integer
    Dim oleImg As OLEObject, img As Image
    
    For i = 1 To 50
        
        Set oleImg = ActiveSheet.OLEObjects("Image" & i)
        
        Set img = oleImg.Object
        
        img.Picture = LoadPicture("C:images" & ActiveSheet.Cells(i, "A").Value)
    
        img.PictureSizeMode = fmPictureSizeModeStretch
        
    Next
    
End Sub

[]s

 
Postado : 10/11/2016 7:39 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Olá Mauro,

Obrigado pelo interesse em minha dúvida.

Realmente faltou eu informar algumas coisas.

Eu estou escolhendo uma foto qualquer no PC, e o caminho dela fica gravado em txtfoto, quando eu seleciono a foto que desejo, pois no evento Click do Command Button tem a rotina para realizar esse procedimento.

ChDir ThisWorkbook.Path & "Fotos"
Dim arqAAbrir

    arqAAbrir = Application.GetOpenFilename("Arquivos de imagens (*.jpg;*.bmp;*.wmf), *.txt,*.bmp,*.wmf")
    If arqAAbrir <> False Then
        txtfoto.Text = LCase(arqAAbrir)
        foto.Picture = LoadPicture(txtfoto.Text)
        foto.PictureSizeMode = fmPictureSizeModeStretch 'fmPictureSizeModeZoom
    End If

Mas o que percebi e que é fundamental mesmo e eu não informei, é que a imagem não esta indo para alguma célula como você sugeriu em seu exemplo.

A imagem deverá ser carregada em 50 objetos IMAGES dentro da própria planilha. Ou seja, eu tenho 50 objetos IMAGES que precisam carregar a imagem.
Este controle é aquele que dentro da planilha, você vai na aba DESENVOLVEDOR e escolhe em INSERIR IMAGEM (Controle ActiveX).

 
Postado : 10/11/2016 6:02 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Guima, vamos por parte:

A duvida seria sobre LOOP nos Controles de Imagem na aba, e como não citou qual o tipo de controle, fui por suposição e utilizei o Controle ActiveX Image que você citou, ou seja, a rotina não envia Imagens para Celulas e sim para os controles que se encontram na aba (50). Vale ressaltar tambem que estou supondo que todos os controles estão com o nome padrão "Image1, Image2, Image3 ..."

Nas linhas desta última instrução que enviou, se estiver completa, nota-se a ausência das definições ou Declaração do Objeto e variáveis, como não está utilizando um Formulário, não usamos "txtoto.Text", e se não informar o que seria "foto.Picture" teremos erro pela falta de Declaração de definição desta Variável que neste caso é um "Objeto Image" e se entendi corretamente, você irá carregar uma única Imagem e não 50 (uma para cada controle) já que está utiliando "GetOpenFilename.

Se for isto mesmo, veja se a rotina abaixo atende :

Sub LoopImagens_2()
    'Declaramos as Varíáves
    Dim arqAAbrir
    Dim txtfoto
    
    'Declaramos os tipos de Objetos
    Dim oleImg As OLEObject, foto As Image
    
    'Alteramos a pasta padrão e Definimos qual Pasta queremos abrir
    ChDir ThisWorkbook.Path & "Fotos"

    arqAAbrir = Application.GetOpenFilename("Arquivos de imagens (*.jpg;*.bmp;*.wmf), *.txt,*.bmp,*.wmf")
    
    If arqAAbrir <> False Then
        
        txtfoto = LCase(arqAAbrir)
        
       'Loop nos 50 Controles que estão com o nome padrão "Image + a Variável i referente a numeração"
       For i = 1 To 50
        
        'Definimos e informamos a que se referem estas Variáveis
        Set oleImg = ActiveSheet.OLEObjects("Image" & i)
        Set foto = oleImg.Object
            
            'Carregamos a Foto em todos os controles
            foto.Picture = LoadPicture(txtfoto)
            foto.PictureSizeMode = fmPictureSizeModeStretch 'fmPictureSizeModeZoom
       
       Next
       
    End If
    
End Sub

[]s

 
Postado : 11/11/2016 7:40 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Muito bom Mauro, mais uma vez me salvando.

Para minha utilidade fiz algumas adaptações, mas sem sua ajuda eu não teria saído do lugar. Ficou assim:

Sub LoopImagens50()
       Sheets("CART50").Activate
        Dim arqAAbrir
       
        'Declaramos os tipos de Objetos
        Dim oleImg As OLEObject, foto As Image
       
               
           'Loop nos 50 Controles que estão com o nome padrão "Image + a Variável i referente a numeração"
           For I = 1 To 50
           
            'Definimos e informamos a que se referem estas Variáveis
            Set oleImg = ActiveSheet.OLEObjects("Image" & I)
            Set foto = oleImg.Object
               
                'Carregamos a Foto em todos os controles
                foto.Picture = LoadPicture(txtfoto)
                foto.PictureSizeMode = fmPictureSizeModeStretch 'fmPictureSizeModeZoom
           
           Next
       
    End Sub

Meu intuito é para imprimir cartelas de BINGO, como fim de ano sempre tem algo assim, caso alguém queira imprimir cartelas com a imagem de sua igreja, associação, empresa, etc. Coloco o arquivo em anexo, talvez possa auxiliar alguém futuramente. Tentei colocar no fórum, mas sem êxito, acho que é grande demais, por isso nao consegui, mas segue link do SENDSPACE

https://www.sendspace.com/file/at58y5

Abraço e muito obrigado

 
Postado : 12/11/2016 12:29 am