on error goto

Status
Niet open voor verdere reacties.

HWV

Terugkerende gebruiker
Lid geworden
19 feb 2009
Berichten
1.183
Beste,
Ik gebruik een VBA code om afbeeldingen te plaatsen, dat werkt goed.
Nu wil ik als de afbeelding niet gevonden wordt dat hij dan een standaard afbeelding pakt.
Ik ben tot het volgende gekomen, maar nu stopt hij met zoeken na de eerste afbeelding die hij niet kan vinden.
Wat doe ik verkeerd!

Code:
Sub InsertPictureFotobook()

    Sheets("Fotoboek").Select
    
cntRows = Blad2.UsedRange.Rows.Count + 1
For rw = 3 To cntRows Step 5
    For col = 1 To 5
        With Cells(rw, col)
        'On Error Resume Next
        On Error GoTo error_handler
        
            With ActiveSheet.Pictures.Insert("P:\automatisering\mijn afbeeldingen\Website afbeeldingen\472 DS_Photo\" & Cells(rw, col) & ".jpg")
                    .Top = Cells(rw - 1, col).Top + 4
                    .Left = Cells(rw - 1, col).Left + 4
                    .Width = 150 ''(.Heigh / .Width) * Cells(rw, col + 4).Width
                    .Height = 150 ''Cells(rw, col).Width
              End With
              
error_handler:

             With ActiveSheet.Pictures.Insert("P:\automatisering\mijn afbeeldingen\Website afbeeldingen\472 DS_Photo\Geen_foto.jpg")
                    .Top = Cells(rw - 1, col).Top + 4
                    .Left = Cells(rw - 1, col).Left + 4
                    .Width = 150 ''(.Heigh / .Width) * Cells(rw, col + 4).Width
                    .Height = 150 ''Cells(rw, col).Width
              End With
              
              
        End With
    Next
Next

End
End

End Sub

Ik hoop dat iemand mij hier mee kan helpen.

Groet HWV
 
HWV,

Als je nu eens met F8 de code doorloopt zie je misschien waar het fout gaat.
 
Dit heb ik gedaan. Waar het aan ligt is dat hij niet terug gaat. Er moet een loop in denk ik maar zou niet weten hoe.
Groet HWV
 
Helaas het wil niet lukken

Beste ExcelAmateur,

Ik heb het geprobeerd maar het wil niet lukken ik heb nu het volgende:

Code:
Sub InsertPictureFotobook()

    Sheets("Fotoboek").Select
    
cntRows = Blad2.UsedRange.Rows.Count + 1
For rw = 3 To cntRows Step 5
    For col = 1 To 5
        With Cells(rw, col)
        On Error GoTo error_handler
             With ActiveSheet.Pictures.Insert("P:\automatisering\mijn afbeeldingen\Website afbeeldingen\472 DS_Photo\" & Cells(rw, col) & ".jpg")
                    .Top = Cells(rw - 1, col).Top + 4
                    .Left = Cells(rw - 1, col).Left + 4
                    .Width = 150 ''(.Heigh / .Width) * Cells(rw, col + 4).Width
                    .Height = 150 ''Cells(rw, col).Width
                End With
error_handler:

             With ActiveSheet.Pictures.Insert("P:\automatisering\mijn afbeeldingen\Website afbeeldingen\472 DS_Photo\Geen_foto.jpg")
                    .Top = Cells(rw - 1, col).Top + 4
                    .Left = Cells(rw - 1, col).Left + 4
                    .Width = 150 ''(.Heigh / .Width) * Cells(rw, col + 4).Width
                    .Height = 150 ''Cells(rw, col).Width
                End With
        End With
    Next
Next rw

End Sub

Nu met Next rw geef ik aan dat ik opnieuw moet beginnen (de loop ?) hij plaats nu twee keer de geen foto afbeelding en stop dan met de foutmelding :

Fout 1004 tijdens uitvoering
eigenschap Insert van Klasse Pictures kan niet worden opgehaald

Ik snap echt niet wat ik fout doet, zonder de error handeling loopt hij goed, enkel wil ik als er geen afbeelding in de map aanwezig hij een standaard afbeelding uit die map haalt

P:\automatisering\mijn afbeeldingen\Website afbeeldingen\472 DS_Photo\Geen_foto.jpg


Groet HWV
 
Misschien de next voor next rw wijzigen in next col.
 
Verplaatst naar VBA sectie.
 
@huijb,

Vanwaar? Dit is toch een excel gerelateerde vraag.
Sheets("Fotoboek").Select
gaat o.a. in MS-ACCESS niet echt werken. Of gaat het om de on error goto?
 
Ik snap echt niet wat ik fout doet, zonder de error handeling loopt hij goed, enkel wil ik als er geen afbeelding in de map aanwezig hij een standaard afbeelding uit die map haalt

P:\automatisering\mijn afbeeldingen\Website afbeeldingen\472 DS_Photo\Geen_foto.jpg

Dan kun je beter een controle doen of de foto wel bestaat in plaats van er een error handler voor te gebruiken. Bijvoorbeeld met dit:
Code:
If Dir("P:\automatisering\mijn afbeeldingen\Website afbeeldingen\472 DS_Photo\" & Cells(rw, col) & ".jpg") = "" Then

Voor die lange padnaam zou ik trouwens een variabele gebruiken. Zeker als je die meer dan 1x nodig hebt. Dus bijvoorbeeld zo:

Code:
Dim fotomap As String
fotomap = "P:\automatisering\mijn afbeeldingen\Website afbeeldingen\472 DS_Photo\"

If Dir(fotomap & Cells(rw, col) & ".jpg") = "" Then
    'Code voor niet gevonden foto
Else
    'Code voor wel gevonden foto
End If

Het voordeel is een duidelijker leesbare code en mocht dat pad eens wijzigen, en dat gaat gebeuren, dan hoef je dat op maar 1 plek aan te passen. In het volgende voorbeeld wordt 'ie zelfs op 4 plekken gebruikt.

Je hele routine zou er dan zo uit kunnen zien:
Code:
Sub InsertPictureFotobook()
    Dim fotomap As String
    Dim foto As String

    fotomap = "P:\automatisering\mijn afbeeldingen\Website afbeeldingen\472 DS_Photo\"
    Sheets("Fotoboek").Select
    cntRows = Blad2.UsedRange.Rows.Count + 1
    For rw = 3 To cntRows Step 5
        For col = 1 To 5
            foto = fotomap & "Geen_foto.jpg"
            If Dir(fotomap & Cells(rw, col) & ".jpg") <> "" Then
                foto = fotomap & Cells(rw, col) & ".jpg"
            Endif
            With Cells(rw, col)
                With ActiveSheet.Pictures.Insert(foto)
                    .Top = Cells(rw - 1, col).Top + 4
                    .Left = Cells(rw - 1, col).Left + 4
                    .Width = 150 ''(.Heigh / .Width) * Cells(rw, col + 4).Width
                    .Height = 150 ''Cells(rw, col).Width
                End With
            End With
        Next col
    Next rw
End Sub

Zo hoef je tevens de With ActiveSheet.Pictures.Insert maar 1 keer te gebruiken. Maak er ook een gewoonte van om variabelen als rw, col en cntRows te declareren (Dim) om ze daarmee direct van het juiste datatype te voorzien. Dit kun je afdwingen door je project te beginnen met de regel Option Explicit

Testen mag je zelf doen ;)

@VenA
huijb heeft gelijk, dit hoort duidelijk in de VBA (Visual Basic for Applications) sectie thuis.
De Application is inderdaad Excel, daar heb jij weer gelijk aan.
 
Laatst bewerkt:
Top

Beste,

Erg bedankt voor jou heldere uitleg.
Ik heb de code gedraaid en werkt perfect, ik ga het verhaal
Dan kun je beter een controle doen of de foto wel bestaat in plaats van er een error handler voor te gebruiken
en
Voor die lange padnaam zou ik trouwens een variabele gebruiken. Zeker als je die meer dan 1x nodig hebt
bestuderen om het vaker te gaan toepassen.

Groet HWV
 
Graag gedaan :)
En mochten de dingen die je gaat bestuderen vragen opleveren dan laat het maar weten.
 
Of Bijv.

Code:
Sub M_snb()
  c00 = "P:\automatisering\mijn afbeeldingen\Website afbeeldingen\472 DS_Photo\"
    
  For j = 3 To Blad2.UsedRange.Rows.Count + 1 Step 5
    For jj = 1 To 5
      With Sheets("Fotoboek").Cells(j, jj)
        If Dir(c00 & .Value & ".jpg") <> "" Then .Parent.Shapes.AddPicture c00 & .Value & ".jpg", 0, -1, .Left + 4, .Offset(-1).Top + 4, 150, 150
      End With
    Next
  Next
End Sub
 
Laatst bewerkt:
Rome is een veelbezochte stad die vanuit allerlei richtingen bereikt kan worden ;)
Zelf vind ik het niet prettig om zulke lange regels te gebruiken en dan in een niet afgesloten If statement.
 
Laatst bewerkt:
@edmoor

De lengte hangt ook af van het lettertype en van de namen van variabelen.
Ik heb de code nog wat aangepast.
Toch is het aan te bevelen in VBA 'Select' en 'Activate' te vermijden.
 
Laatst bewerkt:
Mee eens. Maar naast dat ik het zelf niet prettig vind om horizontaal te moeten scrollen in de code wilde ik het ook voor TS zo leesbaar mogelijk houden.
 
@VenA
huijb heeft gelijk, dit hoort duidelijk in de VBA (Visual Basic for Applications) sectie thuis.
De Application is inderdaad Excel, daar heb jij weer gelijk aan.

Vandaar ook mijn vraag:)

@huijb, Dank voor jouw antwoord.
 
Een probleem dat zich voordoet

Beste,

Bedankt voor alle hulp die hier is geboden, bedankt echt top :thumb:

Het script werkt erg goed en in het totaal maakt hij er een mooi fotoboek van.
Enkel loop ik tegen het volgende aan:

voorbeeld-1.jpg

Hij betrek de foto's van de server, en laat ze dan ook goed zien mits ik maar contact maakt met de server.
Ik heb het bestand naar mij thuis gemaild en daar laat hij de foto`s niet zien ( zie de afbeelding)

Hoe kan ik er voor zorgen dat de foto`s absoluut worden en dat ik de foto`s ook van andere plekken kan bekijken.
Ik hoor graag uw mening hierover.

Al vast bedankt voor uw hulp

HWV
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan