Maken van verkorte versie voor foto's ophalen

Status
Niet open voor verdere reacties.

Offthefield

Gebruiker
Lid geworden
27 apr 2005
Berichten
369
Ik heb een excelbestand waarin ca. 30 foto's (hier vb. van 5 foto's) dmv van een knop ingeladen moeten worden,
aan de hand van artnrs in B3,B5 ect., hier wil ik een verkorte macro-versie van maken, maar alleen ik weet niet hoe, heeft iemand een idee?
Hieronder staat mijn macro voor 5 foto's :

Private Sub Foto_Ophalen_Click()
'
'
Bestandsnummer1 = Range("B3")
Bestandsnummer2 = Range("B5")
Bestandsnummer3 = Range("B7")
Bestandsnummer4 = Range("B9")
Bestandsnummer5 = Range("B11")
'
Bestandsnaam1 = "C:\Users" & Bestandsnummer1 & ".jpg"
Bestandsnaam2 = "C:\Users" & Bestandsnummer2 & ".jpg"
Bestandsnaam3 = "C:\Users" & Bestandsnummer3 & ".jpg"
Bestandsnaam4 = "C:\Users" & Bestandsnummer4 & ".jpg"
Bestandsnaam5 = "C:\Users" & Bestandsnummer5 & ".jpg"
'
Image1.Picture = StdFunctions.LoadPicture(Bestandsnaam1)
Image2.Picture = StdFunctions.LoadPicture(Bestandsnaam2)
Image3.Picture = StdFunctions.LoadPicture(Bestandsnaam3)
Image4.Picture = StdFunctions.LoadPicture(Bestandsnaam4)
Image5.Picture = StdFunctions.LoadPicture(Bestandsnaam5)
'
End Sub
 
Lijkt mij niet zo moeilijk:
Code:
Option Base 1
Code:
Private Sub Foto_Ophalen_Click()
Dim i As Integer
Dim Bestandsnummer(30) As Integer, Bestandsnaam(30) As String
    For i = 1 To 30
        Bestandsnummer(i) = Cells(i * 2 + 1).Value ' Range("B3")
        Bestandsnaam(i) = "C:\Users" & Bestandsnummer(i) & ".jpg"
        Me("Image" & i).Picture = StdFunctions.LoadPicture(Bestandsnaam(i))
    Next i
End Sub
Overigens zou je na 12 jaar HelpMij (lezen) moeten weten dat je code moet opmaken met de CODE tag :).
 
Octafish,

Ziet er leuk uit (bedankt alvast), maar hij geeft een foutmelding op de volgende regel :

Bestandsnummer(i) = Cells(i * 2 + 1).Value ' Range("B3")

Melding : Typen komen niet met elkaar overeen

Ik heb al geprobeerd om .value te veranderen in .text, omdat het artikelnummer in Kolom B, niet numeriek, maar een
tekstbestand is (Bv. 500.123456789)

Ik zie niet waar hij het eerste veld B3 precies aangeeft?
 
Kun je svp VBA code tussen code tags /markeringen zetten ?

Probeer eens zelf testmiddelen in te zetten:

Code:
msgbox Cells(i * 2 + 1).address
Bestandsnummer(i) = Cells(i * 2 + 1).Value ' Range("B3")
 
Laatst bewerkt:
Ik heb een aantal variaties geprobeerd, maar hij geeft constant melding $C$1 en daarna weer een melding,
heeft dit iets met Cells() te maken, want hierin staat volgens mij wel de rij, maar niet de kolom aangegeven,
Beide Cells(i * 2 + 1), verandert in Cells(i * 2 + 1,2) , dit leverde ook niets op, alleen melding $B$3 en daarna
problemen bij de image-regel.

Ook de msgbox-functie voor de FOR lus gezet, dit had ook geen effect?

wat zie ik over het hoofd?





Code:
Private Sub Foto_Ophalen_Click()
Dim i As Integer
Dim Bestandsnummer(10) As Integer, Bestandsnaam(10) As String
'

    For i = 1 To 10
        MsgBox Cells(i * 2 + 1).Address
        ''MsgBox Cells(i * 2 + 1,2 ).Address ??
        Bestandsnummer(i) = Cells(i * 2 + 1).Value ' Range("B3")
        ''Bestandsnummer(i) = Cells(i * 2 + 1,2).Value ' Range("B3")??
        Bestandsnaam(i) = "C:\Users\" & Bestandsnummer(i) & ".jpg"
        Me("Image" & i).Picture = StdFunctions.LoadPicture(Bestandsnaam(i))
    Next i
''End Sub
'
End Sub
 
De msgbox is alleen als debugging hulpmiddel bedoeld.
Daarmee kun je zelf de fout in de code opsporen.
Lees de melding in de Msgbox.
 
De melding die hij geeft is $C$1 en als je daarna doorgaat volgt :
Melding : Typen komen niet met elkaar overeen
 
Ja, en dus ?
Lees je vraag in #1 nog eens goed.
Wordt daar gerept van $C$1 ?
 
Ik snap het antwoord niet, maar ik denk dat er naar veld $C$1 gevraagd wordt ?
Nee dus,

Maar omdat ik veld B3 als eerste veld moet hebben,
heb ik de cells() -functie gewijzigd naar => Cells(i * 2 + 1,2), dan komt er de melding $B$3,
en dat is het juiste beginveld, als ik vervolgens weer op de melding druk komt de melding
Fout13 tijdens uitvoering en Typen komen niet met elkaar overeen

maar moet Bestandsnummer(i) = Cells(i * 2 + 1).Value niet Bestandsnummer(i) = Cells(i * 2 + 1,2).Value worden om B3 te bereiken?
 
Nog een klein testje gedaan (zie hieronder), bij de 1e Msgbox volgt $B$3, bij de 2e Msgbox volgt "500.00000000"
maar vervolgens komt er geen foto te voorschijn? , hij loopt fout bij image volgens mij
(artikelnr in $B$3 (500.00000000), dit is een tekstbestand, heeft hetzelfde nr als image1 (500.00000000.jpg)
ook Dim Bestandsnummer(10) As integer verandert in Dim Bestandsnummer(10) As String


Code:
Dim i As Integer
Dim Bestandsnummer(10) As String, Bestandsnaam(10) As String
'

    For i = 1 To 10
        ''
        Bestandsnummer(i) = Cells(i * 2 + 1, 2).Value ' Range("B3")
        MsgBox Cells(i * 2 + 1, 2).Address
        ''Bij eerste i -> $B$3
        Bestandsnaam(i) = "c:\Financiele Administratie\ROS\ARTIKELEN\" & Bestandsnummer(i) & ".jpg"
        MsgBox Cells(i * 2 + 1, 2).Text
        ''Bij eerste i -> 500.00000000 (eerste artikelnr)
        ''Me("Image" & i).Picture = StdFunctions.LoadPicture(Bestandsnaam(i))
    Next i
 
Wat ik ook probeer hij blijft een foutmelding geven op :

Me("Image" & i).Picture = StdFunctions.LoadPicture(Bestandsnaam(i))

Wat is er fout aan deze functie?
 
Haal dit stukje er eens voor weg.
Code:
[COLOR=#333333]StdFunctions.[/COLOR]
 
Zorg dat je een geldig Path in de loadpicture zet, zonder die stdfunctions zoals ik schreef, en kijk dan waarom het met 'bestandsnaam(i) fout gaat.
 
Ik heb het programma iets verkleind en er een zip van gemaakt,
misschien is het dan duidelijker
 

Bijlagen

  • Fotos.zip
    727,2 KB · Weergaven: 44
Dit werkt hier.
Code:
For i = 1 To 2
        Bestandsnaam(i) = "c:\Fotos\" & Cells(i * 2 + 1, 2).Text & ".jpg"
       Me.OLEObjects("Image" & i).Object.Picture = LoadPicture(Bestandsnaam(i))
   Next i
 
HSV top, werkt perfect !!

Ook nog even geprobeerd met StdFunctions.LoadPicture(Bestandsnaam(i)), deze werkt ook

Scheelt weer een hoop knip en plak werk en weer een macro die ik voor meerdere doeleinden kan gebruiken

Nogmaals bedankt
 
Mooi zo,
In principe heb je de variabele niet nodig en kan het rechtstreeks.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan