Opgelost fout in VBA code

Dit topic is als opgelost gemarkeerd

jan62

Gebruiker
Lid geworden
19 jan 2010
Berichten
113
ik heb een formulier gemaakt met daarop de volgende veldnamen boekid, titel, foto, als ik nu op veldnaam dubbelklik moet er scherm openen met de map boekfotos waar ik dan een foto kan selecteren die bij het boek hoorten deze dan plaatst in een afbeelding venster. Nu krijg ik de volgende foutmelding als ik dit doe (zie bijlage). Ik ben kort geleden hierbij ook geholpen bij een database over puzzels en daar werkt het prima. Ik heb gecontroleerd of er verschil zit in de VBA code en dat is niet het geval. Ik zie iets over het hoofd maar weet niet wat.
 

Bijlagen

  • Schermafbeelding 2025-06-09 203906.jpg
    Schermafbeelding 2025-06-09 203906.jpg
    11 KB · Weergaven: 18
  • Schermafbeelding 2025-06-09 203836.jpg
    Schermafbeelding 2025-06-09 203836.jpg
    44 KB · Weergaven: 21
Ik dubbelklik dus op de veldnaam foto om een map op de pc te openen en de foto te zoeken die bij dat boek hoort en die open ik en moet hij plaatsen in een afbeelding venster
 
Je hebt waarschijnlijk een bibliotheek niet geladen. Dan kan hij de FileFialog niet vinden. Ik zit op een tablet, dus een beetje lastig om aan te geven welke. Het makkelijkst is als je even in de puzzels db kijkt welke bibliotheken daar zijn geladen (in het menu <Extra>, <verwijzingen> (ook uit het hoofd :))). Het is in ieder geval een Microsoft (ik denk Office) bibliotheek.
 
Menu extra verwijzingen< heb gezocht maar weet niet precies waar ik dit moet vinden..
 
Het zijn dan ook twee acties: het menu <Extra> en de optie <verwijzingen>.
 
Hier dus:
verwijzingen.jpg

En je moet de verwijzing naar Microsoft Office 16.0 Object Library (of vergelijkbaar) aanvinken.
office.jpg
 
Het kan trouwens ook zonder die declaratie. In een vergelijkbare situatie (folder selecteren) heb ik:
Code:
Private Sub zoek_Click()

With Application.FileDialog(msoFileDialogFolderPicker)
    .Title = "Map selecteren"
    .InitialFileName = "c:\"
    If .Show <> 0 Then
        Me.Locatie = .SelectedItems.Item(1)
    End If
End With

End Sub
 
Ik heb het gevonden maar het werkt nog steeds niet hij blijft die foutmelding geven, ook de laatste vba code werkt niet
 
Dan is er vermoedelijk iets anders aan de hand. In het menu <Foutopsporing> kun je de dB compileren. Daarmee spoor je eventuele fouten op die er (elders) in de dB zitten. Kijk eens wat dat oplevert.
 
@XPS
Code:
Private Sub zoek_Click()
  With Application.FileDialog(msoFileDialogFolderPicker)
      .InitialFileName = "c:\"
      If .Show  Then Locatie = .SelectedItems(1)<br>
  End With
End Sub
 
Zonder de <br>. Mag ik aannemen ;).
 
Het is gelukt, enige uitleg voor alle goede adviezen want daar lag het niet aan. Het probleem was dat ik na wat zoekwerk en het begrijpen van wat ik moest doen het vinkje gezet bij "Microsoft Office 16.0 Object Library en weer getest en het werkte nog steeds niet. Toen het advies om foutopsporing te doen waar ook niets uitkwam alles was goed. Na lang zoeken en proberen ontdekte ik dat het vinkje niet was opgeslagen en geen idee waarom. Weer het vinkje geplaatst en deze regel bovenaan gezet en opgeslagen en hoera het werkte zoals het ook werkte in de database van de puzzels. Ik blij en bedankt voor alle hulp.. weer iets geleerd hier...
 
Nu loop ik nog tegen de volgende fout aan. hij plaatst wel de foto in het foto venster maar als ik er dan op klik moet hij het foto_subform openen en daar de foto vergroot laten zien. het foto_subform opent wel maar er staat geen foto in de volgende VBA code staat onder de optie klikken net als in de database Puzzels en daar werkt het goed.

Code:
Private Sub Afbeelding38_Click()

    DoCmd.OpenForm "foto subform", acNormal, , , acFormReadOnly, acDialog,
    CurrentProject.Path & "\Afbeeldingen\" & Me.Foto

End Sub
 
Laatst bewerkt:
Je geeft de bestandsnaam via OpenArgs door aan het (sub)formulier. Niet duidelijk is wat het (sub)formulier daarmee doet. Ik vermoed niets.
Bij het openen van het (sub)formulier zal je (de waarde van) OpenArgs moeten toekennen aan de afbeeldingscontrol op het (sub)formulier.
 
Oke, maar hoe en waar moet ik die waarde aanpassen ? waarom werkt dit wel in een database puzzels die ik heb gemaakt met dezelfde code................
 
Waarom het in de andere database wel werkt kan ik zo niet beoordelen (al heb ik wel zo'n idee ;)).

Hoe dan ook, je moet in beide formulieren iets doen. In het eerste vul je OpenArgs, in het tweede zeg je wat het formulier er mee moet doen. Dat "weet" het (ontvangende) formulier niet; dat krijgt alleen een waarde binnen. Het mooie van het gebruik van OpenArgs is dat je ermee kan doen wat je wil. In de voorbeelden in de navolgende link wordt er iets anders mee gedaan: https://learn.microsoft.com/en-us/office/vba/api/access.docmd.openform

Dus, zolang we niet weten wat voor code er allemaal onder het tweede formulier hangt, valt er alleen te speculeren.
 
Wordt het niet eens tijd om de huidige db te posten? Als we je een werkend voorbeeld geven (en dat heb ik gedaan, zoals je al aangaf) dan kun je de code in beginsel prima overnemen in een andere dB. Maar dan moet je, zoals Peter al aangaf, wél de complete procedure overnemen, inclusief de gebruikte bibliotheken.

Werken met VBA vereist wel iets meer dan het klakkeloos overnemen van code uit een ander bestand: op zijn minst moet je de code snappen zodat je weet wat er gebeurt in het traject. Zo kan ik mij heel goed voorstellen dat je de foto's in een andere map hebt staan dan in het werkende voorbeeld. Dat hoeft geen probleem te zijn natuurlijk, maar je mag van een gebruiker die iets programmeert wél verwachten dat die persoon dat dan zelf kan aanpassen.

Dus, samenvattend: op zijn minst moet je, als je wilt programmeren, weten hoe de code werkt en wat er gebeurt, hoe je met de Stap modus fouten in een code kan opsporen en verbeteren en hoe je de juiste bibliotheken gebruikt. Zeg maar de grondbeginselen van programmeren kent.
HelpMij barst van de vragen van mensen die iets geautomatiseerd willen hebben (met VBA) maar die geen flauw benul hebben van wat ze doen, omdat ze niet kunnen programmeren en daar ook geen tijd in willen steken om het te leren. (Daarmee zeg ik overigens niet dat jij tot die categorie behoort 😊). En dat werkt natuurlijk niet. Als je nieuwe skills wilt leren en gebruiken, dan moet je daar nu eenmaal energie in steken.

Dus: graag een bestandje erbij!
 
Ik begrijp de opmerkingen en ik weet dat ik nog veel moet leren en met knippen en plakken ben je nog geen kenner van VBA maar ik begin er wel meer van te begrijpen hoe het werkt, maar ook snap ik dat er soms meer moet worden aangepast en daar moet je wel de VBA code goed voor kennen en kunnen lezen. Ik ga kijken hoever ik er nu mee kom wordt vervolg.......
 
Makkelijkste manier om te kijken waar het fout gaat: begin met de eerste procedure waarmee je dus het proces start. Bijvoorbeeld de code op de knop, een keuzelijst of een imageframe. Zet de cursor in de eerste opdrachtregel van die knop. En start de procedure door op <F8> te drukken, en elke regel hiermee te doorlopen.

Elke functie die wordt gebruikt, en elk formulier dat wordt geopend kom je dan tegen en kun je controleren. Tevens kun je op elk moment de waarden van een variabele bekijken door er met de muis boven te hangen. Bij een losse functie die een bestand opent kun je dus uitlezen welk bestand je hebt geselecteerd, bij de opdracht die een ander formulier opent kun je zien welke waarde er in de OpenArgs wordt meegegeven, en op dat andere formulier kun je weer zien wat er met die OpenArgs waarde wordt gedaan.

Als de complete procedure correct wordt uitgevoerd, zie je het eindresultaat dat je verwacht. Gaat er in het proces iets fout (verkeerde bestandsnaam, variabele die ineens leeg is) dan weet je waar je de fout hebt staan, en kun je die verhelpen.
 
Ik heb het gelezen en snap de bedoeling vanavond ga ik er mee aan de slag...........
 
Terug
Bovenaan Onderaan