Hoe een Excel VBA-macro te debuggen die niet werkt. Er zijn geweldige tools in Excel VBA waarmee u de huidige waarde kunt zien die is opgeslagen in variabelen terwijl u de code regel voor regel doorloopt. Als u een macro heeft die niet werkt,
Bekijk video
- U hebt een Excel VBA-macro die niet werkt
- VBA heeft geweldige tools voor foutopsporing
- In plaats van uw code uit te voeren, kunt u de code doorlopen met F8
- De gele lijn is de lijn die wordt uitgevoerd
- Beweeg over een variabele om de waarde van die variabele te zien.
- Schakel heen en weer naar Excel om te zien wat er gebeurt
Videotranscriptie
Leer Excel van Podcast, aflevering 2096: debugging van VBA-macro
Hé, welkom terug bij netcast, ik ben Bill Jelen. De vraag van vandaag: Iemand had een code die ik op een oude YouTube-video had gepost en ze plaatsten een opmerking waarin stond: “Ah, dat werkt niet. De dubbele factuur wordt niet opgeslagen, maar er wordt geen fout gegenereerd. " Ik weet niet wat er mis is met de code. Oké, weet je, kijk, er zijn geweldige tools die beschikbaar zijn als je VBA Macro niet werkt. Dus we hebben hier een knop die wat code moet uitvoeren. Ik ga de macro toewijzen, deze heet SaveInvoice. Ik klik op Bewerken en we zijn klaar in VBA. En normaal gesproken, wanneer we op die knop drukken, wordt deze code uitgevoerd. BAM! Alsof het allemaal heel snel is gegaan, maar je kunt niet kijken wat er gebeurt.
Dus onder de Debug-tools is een van mijn favoriete dingen hier Debug Step Into, waarvan je zult zien dat de sneltoets F8 is, en waarmee we de code regel voor regel kunnen uitvoeren. Dus ik drukte daar op F8 en dit is … de regel in het geel is de regel die het gaat uitvoeren. Dus als ik op F8 druk, springt het over die twee declaraties en nu gaan we een ActiveSheet.Copy maken. Dus wat hier echt mooi is, is, weet je, vooral als je een grote monitor hebt, dat het Podcast-venster veel te klein is, maar wat je kunt doen, is dat je de macro kunt bekijken. Dus nu staat het op het punt om ActiveSheet.Copy te doen. Op dit moment zit ik in een werkmap met de naam Podcast 2096. Hier is een werkblad met de naam Invoice en als ik op F8 druk, zul je zien dat ik nu een gloednieuwe werkmap heb met de naam Book2 en we hebben alleen de factuur, oké.
En nu staan we op het punt om dit grote, lange ding toe te wijzen aan New FN. Druk op F8. Oké, het zag er niet naar uit dat hier iets gebeurde, want hier gebeurde niets. Maar hier is het mooie, ik heb nu iets toegewezen aan die variabele met de naam New FN en als ik met mijn muis over New FN beweeg, verschijnt er een kleine tooltip die me laat zien wat er in New FN is opgeslagen. Dus het slaat de bestandsnaam op, daar is de map waar het naartoe gaat. Het heet Invoice1234 omdat het de waarde uit F4 heeft gehaald en vervolgens PDF heeft toegevoegd.
Oké, een van de meest frustrerende dingen over Excel is dat als je geheugen tekort begint te komen, deze tooltip niet wil verschijnen. Je zweeft daar en er gebeurt niets. Soms moet je klikken om het hier te verzinnen en soms verschijnt het helemaal niet. Als het helemaal niet verschijnt, kunnen we Ctrl + G doen. Ctrl + G is het onmiddellijke venster en dan gaan we gebruiken? dat is de snelkoppeling voor Debug.Print, NewFN. Dus met andere woorden, vertel me wat er in New FN staat en het zal je daar laten zien wat er in New FN staat.
Oké, we staan op het punt om deze regel code uit te voeren waarmee een pdf wordt gemaakt. Oké, dus ik druk op F8. Oké, en op dit punt zouden we een nieuwe PDF moeten hebben met 1234 en als ik in de map ga kijken, is Inv1234 op 11 mei om 06:25 uur inderdaad zojuist gemaakt. Geweldig toch?
Oké, nu komen we op het punt waarop we het probleem hebben. Oké, dus we drukken hier op F8 en het wordt weergegeven als Duplicate Copy. Oké, dat werkte. En dan F8, en we kunnen zien wat er in New FN staat. Oké, het heeft dus DupInv1234.pdf en je kunt zelfs hier terugkomen en gewoon op Print NewFN klikken en dan zul je zien dat we de bestandsnaam hebben gewijzigd, oké. Dus alles is cool. En dan drukken we op F8 om Create the PDF uit te voeren. Geweldig! Alles ziet er geweldig uit, toch?
Dus kom terug naar onze Podcast-bestanden. Oké, maar in plaats van iets te hebben dat DupInv1234 heet, weet ik gewoon niet hoe iets Book2 heet. Oké, het is net een minuut geleden gemaakt. Dit moet de enige zijn, maar jee! Het schijnt de verkeerde naam te zijn. Oké, dus we komen terug bij VBA en ik weet dat ik zojuist de juiste waarde aan New FN heb toegekend, oké. En laten we eens kijken hoe we het opslaan. We slaan het op als een NewFN1 die leeg is; en omdat het leeg is, betekent dit dat het de bestandsnaam gebruikt die in dit geval Book2 is, aangezien ik er een kopie van heb gemaakt. En veranderde het - Oh kijk! Dus hier was ik de naam aan het toewijzen aan NewFN en vervolgens deze NewFN1 op te slaan, en nu, omdat ik debuggen en zweven - zweven is het beste ooit. Hopelijk kan ik erachter komen wat er aan de hand is.Dus ik kom terug en verander de NewFN1. Nu, hier is het ontzagwekkende. Oké, dus deze regel al gepasseerd in Macro, maar ik kan dit weer omhoog slepen en zeggen, oké, laten we dit nog een keer uitvoeren F8. En laten we nu de PDF maken. Oké, en daar verschijnt het met de juiste naam en alles is cool.
Oké, nu ik weet dat ik klaar ben, is alles geweldig. Alles gaat vanaf hier werken. Ik klik gewoon op Uitvoeren en het loopt tot het einde van de code. Oké, soms heb je een lange macro met, weet je, honderden regels code die wel werken en dan een bepaald onderdeel dat niet werkt, oké? Dus een paar andere tools werden hier zojuist genoemd. Als je over een hele reeks code heen moet springen en alles tot dat punt moet uitvoeren, dan kun je dat doen door hier te klikken en een breekpunt te maken. Oké, dus als ik dit nu start, wordt alles tot op dat punt uitgevoerd. Ik kan gewoon op Uitvoeren klikken en het stopt, of als je niet eens een breekpunt wilt instellen, klikken we gewoon hier en zeggen Debug, Uitvoeren naar cursor. Ren naar cursor.Nu weet ik dat dit hier een probleem zal opleveren, want de code om dit factuurnummer te wijzigen heb ik nog niet aangesloten. Dus ik zal gewoon een nieuw factuurnummer invoeren en dus ben ik nu op die regel. Debug, Ren naar cursor, dit is Ctrl + F8. Oké, dus nu heeft het alles tot op dat punt uitgevoerd en wat we zouden moeten hebben, is dat we moeten kunnen zien dat het zojuist Inv1235 heeft gemaakt, oké. En nu gaat het over … we zitten op deze regel code. Ik kan gewoon op F8 drukken om één regel uit te voeren of gewoon de rest van de weg. En daar is onze DupInv1235, oké? Dus de Debug Tools hier in VBA zijn geweldig. Laten we een code regel voor regel uitvoeren, uw scherm zo indelen dat we zowel de lopende code als de resultaten van de code aan de linkerkant kunnen zien. En weet je, hopelijk kun je erachter komen wat er mis gaat met de code.
Oké, dus samenvatting van de aflevering: zorg voor een Excel VBA-macro die niet werkt. Het heeft geweldige tools voor foutopsporing. In plaats van uw code uit te voeren, kunt u de code doorlopen met F8. De gele lijn is de lijn die op het punt staat te lopen. U kunt de muisaanwijzer over de variabele bewegen om de waarde van die variabele te zien, heen en weer schakelen naar Excel om te zien wat er gebeurt.
Nou, hey, ik wil je bedanken voor het langskomen. We zien je de volgende keer voor een nieuwe netcast van.
Download bestand
Download het voorbeeldbestand hier: Podcast2096.xlsm