Help!

PC-Problemen?
De vrijwilligers van Oplossing.be zoeken gratis met u mee!

Hulp bij posten

Recente topics

Auteur Topic: vba for..next..-loop wegschrijfvraagje  (gelezen 9938 keer)

0 leden en 1 gast bekijken dit topic.

Offline MollyVH

  • Excel-Expert
  • Oplosser
  • *****
  • Berichten: 847
Re: vba for..next..-loop wegschrijfvraagje
« Reactie #30 Gepost op: 18 januari 2024, 17:12:52 »
Hey Bieke,

Ik heb de nieuwste zaken nu niet in detail bekeken, maar ben wel overtuigd dat mijn eerder idee bruikbaar blijft ;)
Op je testblad heb je nu 4 kolommen voorbereid met enkel opmaak. Van op voorhand het nodige aantal kolommen uitrekenen en klaarzetten waren we afgestapt, maar je kan wel (het snelste zal vermoedelijk met een copy/paste-methode gaan) een ruim aantal kolommen op deze wijze toevoegen. Je zou dat over alle in Excel beschikbare kolommen kunnen spreiden maar of dat nu echt nodig is...
Voor elk van de verschillende registers zal je dan specifieke code nodig hebben binnen dewelke je als eerste instructie de 'algemene' layout-code kan aanroepen.
Dit alles dien je dan maar eenmalig te doen!

Alle toevoegingen van gegevens (ook standaardgegevens zoals bv. 'anno') horen dan in de eigenlijke dataverwerking thuis.
Maar iets zegt mij dat je in gedachten, na mijn eerdere aanzet, ook al deze weg was ingeslagen :D

Groetjes,
Molly

Oei, bijna op 'Verzenden' geklikt toen ik toch nog zag staan:
Citaat
.Columns(1).ColumnWidth = 8     'ook dit kolom-nr zal adhv een variabele bepaald worden (via loop)
't Is die commentaar die mij niet bevalt en mijn voorgaande veronderstellingen zelfs op de helling zet, want hiermee ga je toch alle opmaak telkens opnieuw instellen...
Misschien zal het niet meer voor vandaag zijn, maar ik wil zeker eens iets verder uitwerken met wat we al hebben.
Windows 11 Home NLD 64bit
11th Gen Intel(R) Core(TM) i7-11700 @ 2.50GHz 2496
Aspire TC-1660
Intel(R) UHD Graphics 750 1024MB
476 GB SSD KINGSTON OM8PCP3512F-AA
1863 GB HD Seagate ST2000DM008-2FR102
Office 2021 Professional Plus NLD 64bit

Offline MollyVH

  • Excel-Expert
  • Oplosser
  • *****
  • Berichten: 847
Re: vba for..next..-loop wegschrijfvraagje
« Reactie #31 Gepost op: 18 januari 2024, 18:06:38 »
Alweer een ***update*** :D

Ik dacht "kom, ik begin al eens, en kijk hoe ver ik kom", en voor ik het goed en wel besefte was het klaar.
't Is te zeggen, mijn 'klaar' is daarom niet jouw 'klaar', dus naar wens aanpassen kan nog steeds :D :D :D

In "mod_layouts" staan 2 procedures: één voor de dopen en een algemene (die laatste dus aangeroepen door de eerste).
Je kan die één maal uitvoeren en nadien verwijderen, of ook gewoon laten staan met het oog op eventuele latere herstellingswerken ;)

Eens die layout geregeld kan je de data (zo vaak je wil) gaan verwerken. Daarin wordt op geen enkel moment nog iets aan de layout gedaan, behalve de 'tussenlijntjes'.

Best mogelijk dat ik nog ergens een enkel opmaak-detail uit het oog ben verloren, hoor, maar da's een kwestie van eens goed nakijken 0:-)

Groetjes,
Molly
Windows 11 Home NLD 64bit
11th Gen Intel(R) Core(TM) i7-11700 @ 2.50GHz 2496
Aspire TC-1660
Intel(R) UHD Graphics 750 1024MB
476 GB SSD KINGSTON OM8PCP3512F-AA
1863 GB HD Seagate ST2000DM008-2FR102
Office 2021 Professional Plus NLD 64bit

Offline BlackDevil

  • Ambassadeur
  • *****
  • Berichten: 1.029
  • Geslacht: Vrouw
  • veni vidi vici
Re: vba for..next..-loop wegschrijfvraagje
« Reactie #32 Gepost op: 19 januari 2024, 00:16:06 »
Hey Molly,

Eerst en vooral nogmaals dank voor de tijd en moeite die je steekt in het mij verder helpen. _/-\o_ :thumbsup:

Met jouw laatste berichten en aanpassing vrees ik echter dat er tussen alle heen-en-weer berichten en diverse versies wat verloren is gegaan mbt aanpak/visie/wensen/noodzakelijkheden en dat er dus ook enkele misverstanden zijn opgetreden.

Om te zorgen dat we terug op één lijn komen nog even alles opfrissen :

Ik heb 6 IDX-werkbladen voor respectievelijk dopen(PR), geboorten(BS),  huwelijken(PR), huwelijken(BS), overlijdens(PR en overlijdens(BS). Op elk IDX-werkblad staan alle geïndexeerde akten van in totaal 5 parochies. Voor de PR-registers is dat de periode vanaf 1580 tem 1796(-1800) en voor de BS-registers is dat de periode 1800 tem 1910(-1920).
Voor elk soort register heb ik dan ook 6 doel-werkbladen waarop dan de betreffende ‘uitdraai’ moet vermeld worden van de gekozen parochie.

De aanpak uit je bestand uit bericht #26 beantwoordt dan nog steeds het beste aan mijn visie wat betreft de ‘aanmaak’ van de pagina’s, namelijk dat elke pagina pas ‘aangemaakt’ word op het moment dat ze nodig is.

De globale werking zie ik dus als volgt :
Op elk IDX-werkblad een knop die dezelfde sub aanroept.
In het begin van de sub een ‘select case application.caller’ om dan de benodigde werkbladen (doel en bron) vast te leggen en alzo ook meteen de ‘titel’ op de eerste rij van het doel-werkblad.
Vervolgens via een ‘inputbox’ de parochie laten vastleggen om enerzijds de range te kunnen bepalen in het bron-werkblad en anderzijds de parochie-naam die op de 2e rij van het doel-werkblad vermeld moet worden.
Vervolgens dient dan de juiste wegschrijfcode en layoutcode aangeroepen te worden om de akten van de gekozen parochie te verwerken waarbij elk nieuw te beginnen pagina wordt ‘aangemaakt’ on-the-go.

Enkele details bij de aanpassingen in jouw laatste versie nadat ik de subs heb uitgevoerd :
Beide kolommen vanaf rij 5 zijn ‘bold’ terwijl enkel kolom 2 ‘bold’ mag zijn.
Rijen 5 tem 9 hebben een rijhoogte van 24 wat ook niet de bedoeling is.
Geen idee waarom dit bij jouw gesplitste subs dit resultaat geeft want bij mijn enkele sub was het resultaat van de layout wel correct. ???
Ook is er telkens enkel maar een onderlijntje bij een ‘ingevulde’ akte en is de rest van de pagina volledig blanco terwijl er sowieso altijd 8 onderlijntjes moeten zijn.

Ik ga van mijn kant eens overlopen welke onderdelen van welke procedures eventueel zouden kunnen samengevoegd worden tot het gewenste resultaat.

Groetjes,
Bieke
1) HP ProDesk (Windows 10 Pro Edu / Intel(R) Core(TM) i5-7500 CPU@ 3.40Ghz 3.41Ghz)
2) Laptop ASUS (Windows 10 Home / Intel(R) Core(TM) i3-3110M CPU@ 2.40GHz 2.40GHz)
Beide (RAM : 8,00 GB / 64-bits besturingssysteem, x64-processor)
Extern (Seagate Backup+ Hub 6TB / Seagate BUP Slim 2TB / Seagate Expansion Desk 5TB / HP ENVY 6030e)
Bullguard Premium Protection / Office Pro Plus 2016 NL

Offline MollyVH

  • Excel-Expert
  • Oplosser
  • *****
  • Berichten: 847
Re: vba for..next..-loop wegschrijfvraagje
« Reactie #33 Gepost op: 19 januari 2024, 13:18:48 »
Hey Bieke,

O maar we zitten veel meer op dezelfde lijn dan je schijnt te denken, hoor ;)

Ik begin nogal onderaan je laatste bericht: de 'details' die je daar aanhaalt zijn grotendeels te wijten aan een samenspel tussen code en zaken die ooit eens via het menu zijn ingesteld. Ook wat rijhoogte betreft bleef die 'autofit' uitvoeren; dat verklaart waarom rijen 1 tot 3 zich aanpasten aan de vba-instelling van je lettertype. Ik heb al die zaken nu 'hard' in de code opgenomen waardoor dat finaal opgelost zou moeten zijn.
Voor de 'onderlijntjes' had ik me laten vangen aan dat extra tabblad dat je in een vorige versie had toegevoegd, maar geen probleem: de code moest enkel wat hoger worden gezet, en een lusje errond. (Voor een beter zicht staan de rasterlijnen momenteel uit ;))

Ook zonder uitgebreid voorbeeldbestand had ik de globale doelstelling integraal juist ingeschat, maar de manier om dat te bereiken is een ander paar (lange :D) mouwen.
Ik zou zelfs geen moment overwegen om daar Application.Caller voor te gebruiken. Die is m.i. vooral nuttig wanneer er slechts een minimale afwijking zit in de uit te voeren code naargelang deze of gene knop wordt aangeklikt.
Het is omdat je vaak niet enkel naakte oplossingen verwacht maar ook op 'meedenken' hoopt dat ik dat hier vermeld.
Ik zou radicaal elke knop zijn eigen procedure geven, en de identieke zaken in een 'algemene' procedure steken die met één lijntje code wordt aangeroepen. Dat zal de volledige code korter en overzichtelijker maken.
Dat is de weg die we al waren ingeslagen (voor de 'knoploze' want eenmalig uit te voeren code) en waar je toch een beetje gelukkig van leek te worden ;)
Ik had daar al een 'layout_g_pr' voor gemaakt. Je zal er dus mogelijk zo 6 nodig hebben maar misschien ook niet, dat zal afhangen van hoe de 5 andere precies moeten opgebouwd worden. Ik acht de kans trouwens groot dat sommige instructies hierin nog naar 'layout_alg' zullen verplaatst kunnen worden.

Voor de dataverwerking kan dan uiteraard dezelfde methodiek worden gehanteerd.

Groetjes,
Molly
Windows 11 Home NLD 64bit
11th Gen Intel(R) Core(TM) i7-11700 @ 2.50GHz 2496
Aspire TC-1660
Intel(R) UHD Graphics 750 1024MB
476 GB SSD KINGSTON OM8PCP3512F-AA
1863 GB HD Seagate ST2000DM008-2FR102
Office 2021 Professional Plus NLD 64bit

Offline BlackDevil

  • Ambassadeur
  • *****
  • Berichten: 1.029
  • Geslacht: Vrouw
  • veni vidi vici
Re: vba for..next..-loop wegschrijfvraagje
« Reactie #34 Gepost op: 19 januari 2024, 14:31:47 »
Hey Molly,

Ik ben zelf ook een hele voormiddag bezig geweest en had net een volledig 'update'-tekst geschreven waarvoor ik op het punt stond deze hier te plaatsen toen ik zag dat je een bericht had geplaatst met een nieuwe versie.
Ik zal dus eerst reageren op jouw bericht & bijgevoegd bestand en vervolgens mijn 'update'-tekst eronder plaatsen.

Met uitzondering van de aanpassingen inzake mijn vermelde details lijkt de code in je nieuwe versie globaal hetzelfde gebleven te zijn.
Ik zie bevoorbeeld nergens code om te achterhalen welke parochie verwerkt moet worden en dus ook geen code om aan te geven welke range verwerkt zal moeten worden op basis van die parochie. In de code worden nog steeds àlle rijen verwerkt. Als ik dit zou doen in mijn 'echte' bestand dan zouden dus alle parochies verwerkt worden wat dus geenszins de bedoeling is. Dus er zal sowieso ergens in de structuur iets aangepast moeten worden om te zorgen dat de correcte range verwerkt wordt.

Wat de 'Application.Caller' betreft heb ik deze al in meerdere projecten gebruikt en ik vind deze functie best wel nuttig. Ook in dit project zie ik er zeker het nut van omdat er eigenlijk in de volledige code maar enkele zaken verschillend zijn afhankelijk van welke knop wordt aangeklikt (maw vanuit welk bron-werkblad de code moet vertrekken).
Om mijn denkwijze te verduidelijken zal ik nu mijn 'update'-tekst plaatsen die ik deze middag had opgesteld. :)


***update***

Na een hele voormiddag bezig geweest te zijn met brainstormen, coderen, testen, …. Repeat…. ben ik tot het gewenste resultaat gekomen. Eén klein detail heb ik wel aangepast om het coderen iets ‘simpeler’ te maken  :), namelijk ipv 6 doel-werkbladen gewoon standaard het werkblad “dataprint” (dat dan na het ‘opmaken/invullen’ de juiste naam moet krijgen en er vervolgens een nieuw werkblad “dataprint” moet aangemaakt worden).

Ik heb uiteindelijk 4 aparte subs… 1 hoofd-sub die aangeroepen wordt via een knop op één der 6 IDX-werkbladen en dan drie subs die aangeroepen worden vanuit de hoofd-sub. Ook heb ik 3 variabelen public gemaakt.

In de hoofd-sub wordt eerst via een ‘inputbox' gevraagd welke parochie verwerkt moet worden.
Via de “Select Case Application.Caller” worden via “Set” de 6 bron-werkbladen vastgelegd alsook een waarde gegeven aan de variabele ‘titel’.
Dan worden de kolom en rij variabelen gedefinieerd voor het 'dataprint'-werkblad en een loop opgestart voor de in te lezen range (gebaseerd op de gekozen parochie in het gekozen bron-werkblad).
Via een if-statement wordt dan bepaald of er al dan niet een nieuwe pagina begonnen moet worden en zoja wordt de 1e externe sub aangeroepen (nl voor de algemene lay-out), vervolgens worden de 4 eerste rijen gevuld met de titel, de parochie, de vaste waarde ‘anno’ en het jaartal waarna dan de de 2e sub word aangeroepen (nl voor de specifieke layout).
Onder deze if-statement wordt dan de 3e en laatste sub aangeroepen (nl het inlezen van de gegevens op het bron-werkblad).
Bij terugkeer naar de hoofd-sub worden dan de ingelezen gegevens weggeschreven op het werkblad “dataprint”.

Dit alles is momenteel nog vrij robuust en dien ik nog wat te finetunen waar mogelijk en vervolgens dien ik dan nog enkel het gedeelte te coderen voor het wijzigen van de naam van het werkblad “dataprint” naar de correcte naam en het aanmaken van een nieuw werkblad “dataprint”.
Het enige wat ik hiervoor nog moet weten eigenlijk is, indien het mogelijk is, hoe ik de pagina-instelling (met name de marges en de voettekst) van het werkblad “dataprint” via VBA kan laten uitvoeren.
Deze pagina-instellingen zijn van cruciaal belang voor enerzijds de algemene weergave maar anderzijds in het bijzonder voor het fysiek uitprinten.

Zodra mijn huidige code gefinetuned is zal ik nog eens een recente versie van mijn bestand plaatsen.


Ongeacht welke aanpak er uiteindelijk zal gebruikt worden en/of in hoeverre er nog aanpassingen zullen plaatsvinden, mijn nieuwe code is grotendeels gebaseerd op jouw aanpak uit jouw bericht #26 en op enkele van jouw codestructuren. Dus zonder die hulp/aanzet/oplossingen zou ik nooit tot dit resultaat kunnen komen zijn. ;D :thumbsup: _/-\o_

Groetjes,
Bieke




1) HP ProDesk (Windows 10 Pro Edu / Intel(R) Core(TM) i5-7500 CPU@ 3.40Ghz 3.41Ghz)
2) Laptop ASUS (Windows 10 Home / Intel(R) Core(TM) i3-3110M CPU@ 2.40GHz 2.40GHz)
Beide (RAM : 8,00 GB / 64-bits besturingssysteem, x64-processor)
Extern (Seagate Backup+ Hub 6TB / Seagate BUP Slim 2TB / Seagate Expansion Desk 5TB / HP ENVY 6030e)
Bullguard Premium Protection / Office Pro Plus 2016 NL

Offline BlackDevil

  • Ambassadeur
  • *****
  • Berichten: 1.029
  • Geslacht: Vrouw
  • veni vidi vici
Re: vba for..next..-loop wegschrijfvraagje
« Reactie #35 Gepost op: 19 januari 2024, 16:12:09 »
@Molly,

Terwijl ik eventjes mijn bureau heb verlaten om wat huishoudelijke klusjes te gaan doen ben ik terwijl wat aan het brainstormen geweest en ben tot de beslissing gekomen om beide oplossingen (jouw aanpak en mijn laatste aanpak) te gaan combineren.
Gezien ik voor de kleinste parochie (van de 5) voor enkel nog maar de dopen al zo'n 250 pagina's ga nodig hebben kan ik beter, zoals in jouw aanpak, de algemene layout ineens op het volledige werkblad toepassen (of toch alleszins op de eerste 5000 kolommen). Want voor de dopen kan ik er 8 op één pagina zetten maar voor bevoorbeeld de huwelijken(BS) zal ik maar 3 of 4 akten per pagina kunnen plaatsen wat dus in gigantisch veel pagina's zal resulteren.
Doordat ik via mijn aanpak dan na elke 'uitdraai' telkens het werkblad "dataprint" opnieuw zal aanmaken zou ik hier een compleet aparte sub van willen maken waarin het werkblad wordt aangemaakt, benoemd en dan die "algemene" layout krijgt.

Voor de specifieke layout en de inlees-/wegschrijfcode zou ik dan mijn aanpak willen gebruiken.
Maar omdat er dan hier en daar toch wel eens 'te veel' kolommen opgemaakt zullen zijn met die algemene layout zou ik dan na elke uitdraai (dus bij het hernoemen van het werkblad naar de definitieve naam) de niet ingevulde opgemaakte kolommen opnieuw willen verwijderen om het fysieke print-proces simpeler te maken.

Zou dit haalbaar kunnen zijn als ik het geheel op deze wijze zou aanpakken?

groetjes,
Bieke
1) HP ProDesk (Windows 10 Pro Edu / Intel(R) Core(TM) i5-7500 CPU@ 3.40Ghz 3.41Ghz)
2) Laptop ASUS (Windows 10 Home / Intel(R) Core(TM) i3-3110M CPU@ 2.40GHz 2.40GHz)
Beide (RAM : 8,00 GB / 64-bits besturingssysteem, x64-processor)
Extern (Seagate Backup+ Hub 6TB / Seagate BUP Slim 2TB / Seagate Expansion Desk 5TB / HP ENVY 6030e)
Bullguard Premium Protection / Office Pro Plus 2016 NL

Offline MollyVH

  • Excel-Expert
  • Oplosser
  • *****
  • Berichten: 847
Re: vba for..next..-loop wegschrijfvraagje
« Reactie #36 Gepost op: 20 januari 2024, 13:14:27 »
Hey Bieke,

Oei, ik volg even niet meer:
Citaat
Ik zie bevoorbeeld nergens code om te achterhalen welke parochie verwerkt moet worden
In een eerdere versie had je dat zelf al eens in orde gebracht, en in de laatste was dat verdwenen. Mijn (bijwijlen) logische geest denkt dan dat je de tijd nog niet rijp achtte om dat al definitief mee te nemen aangezien er nog andere zaken op een oplossing wachtten...
En dat er op de juiste plaats weer bijzetten is toch peanuts, niet?

Als ik al je nieuwe overwegingen nu bij elkaar optel begint het al een beter idee te lijken om toch geen voorafgaande werkzaamheden uit te voeren qua opmaak (beslommeringen bij afdrukken, de noodzaak kolommen te moeten verwijderen...)
Ik neem voorlopig aan dat voor elk van die 6 zaken je telkens met 4 kolommen gaat werken(?)
In dat geval zou je ook kunnen starten, iedere keer je een parochie gaat verwerken, met de opmaak te regelen (via subroutine) voor 4 kolommen, en binnen de gegevensverwerking, telkens een nieuwe 'pagina' moet begonnen worden (al bestaande code dus) de opmaak te kopiëren naar de volgende 4 kolommen, liever dan die opnieuw element per element te gaan instellen. Dat zal het aanzienlijk sneller maken, en een meteen afdrukbaar werkblad klaarzetten.

Een iets afwijkend idee (met hetzelfde gunstige resultaat) kan zijn om eenmalig een werkblad te maken met in orde gebrachte opmaak voor de eerste 4 kolommen. Dat kan je nadien verbergen, en kopiëren bij de start van een nieuwe parochieverwerking.
Je ziet het, we veranderen beiden wel eens van mening ;), in mijn geval is dat (daarom niet altijd :D) wegens bijkomende input.

Citaat
Wat de 'Application.Caller' betreft heb ik deze al in meerdere projecten gebruikt en ik vind deze functie best wel nuttig.
Ik heb ook niet het tegendeel beweerd, hé, maar niets is nuttig voor alles... Je moet vooral doen waar je blijgezind van wordt, maar ik blijf het voor dit project de minder duidelijke manier vinden. Maar: het zal mij er niet van weerhouden verder assistentie te verlenen, hoor!

Citaat
Het enige wat ik hiervoor nog moet weten eigenlijk is, indien het mogelijk is, hoe ik de pagina-instelling (met name de marges en de voettekst) van het werkblad “dataprint” via VBA kan laten uitvoeren.
Dat is één van die typische 'problemen' waarbij ik meteen geneigd ben te antwoorden: "neem eens in een leeg bestand een macro op" :D

Groetjes,
Molly
Windows 11 Home NLD 64bit
11th Gen Intel(R) Core(TM) i7-11700 @ 2.50GHz 2496
Aspire TC-1660
Intel(R) UHD Graphics 750 1024MB
476 GB SSD KINGSTON OM8PCP3512F-AA
1863 GB HD Seagate ST2000DM008-2FR102
Office 2021 Professional Plus NLD 64bit

Offline BlackDevil

  • Ambassadeur
  • *****
  • Berichten: 1.029
  • Geslacht: Vrouw
  • veni vidi vici
Re: vba for..next..-loop wegschrijfvraagje
« Reactie #37 Gepost op: 20 januari 2024, 14:09:57 »
@Molly,

Sinds mijn laatste bericht #35 van gisteren was ik dan aan de slag gegaan om een combinatie te creëren van de diverse aanpakken/structuren.
Vanmiddag had ik een compleet werkende code die netjes deed wat ik voor ogen had maar zoals je zelf ook al zei, het hele gedoe om
dan naderhand de overbodige opgemaakte kolommen te gaan verwijderen e.d. was alles behalve bevorderlijk voor de doorloop-snelheid die de
code in beslag nam.
Dus bedacht ik (zo'n 2 uur geleden) "wat als ik nu eerst gewoon de gegevens inlees en wegschrijf naar het werkblad "dataprint" en dan pas de
effectief gebruikte kolommen ga opmaken met de correcte layout..."
Dus heb ik snel even de volgorde van mijn code gewijzigd en dat pakt toch wel al een pak minder doorloop-tijd in beslag maar helaas toch nog net dat ietsje 'teveel'.
Want in het test-bestand betreft het mààr hoogstens een 10-tal pagina's maar in het 'echte' bestand zullen het altijd tussen de 200 en 1500 pagina's zijn dus dan
vrees ik echt wel voor een 'memory-crash'  ;D .

In bijlage mijn recentste versie (3.0b) met de code waarbij eerst de data verwerkt & weggeschreven wordt en naderhand pas de layout aan de orde komt.
De code zit achter de module 'mod_Bieke' en wordt aangeroepen via de knop 'dataprint' op het werkblad "IDX_G_PR" linksboven.

groetjes,
Bieke

1) HP ProDesk (Windows 10 Pro Edu / Intel(R) Core(TM) i5-7500 CPU@ 3.40Ghz 3.41Ghz)
2) Laptop ASUS (Windows 10 Home / Intel(R) Core(TM) i3-3110M CPU@ 2.40GHz 2.40GHz)
Beide (RAM : 8,00 GB / 64-bits besturingssysteem, x64-processor)
Extern (Seagate Backup+ Hub 6TB / Seagate BUP Slim 2TB / Seagate Expansion Desk 5TB / HP ENVY 6030e)
Bullguard Premium Protection / Office Pro Plus 2016 NL

Offline MollyVH

  • Excel-Expert
  • Oplosser
  • *****
  • Berichten: 847
Re: vba for..next..-loop wegschrijfvraagje
« Reactie #38 Gepost op: 20 januari 2024, 17:22:31 »
Hey Bieke,

Je bent nog niet bepaald overtuigd, hé?
Op je gegevensblad heb ik wat extra rijen toegevoegd. Met amper 250 als laatste rij heb ik een snelheidstest uitgevoerd met jouw methode en kwam al op 31 seconden.
Een minimale wijziging in de code (de eerder voorgestelde werkwijze om opmaak te kopiëren i.p.v. celletje per celletje in te stellen) bracht dat terug tot 0,4 seconden.
(Om de test correct te kunnen uitvoeren is de inputbox uiteraard overgeslagen.)

Die 0,4 seconden worden dan nog vooral door andere code veroorzaakt, want met 2500 rijen, resulterend in 760 pagina's, zat ik aan 0,7 seconden.

Groetjes,
Molly
Windows 11 Home NLD 64bit
11th Gen Intel(R) Core(TM) i7-11700 @ 2.50GHz 2496
Aspire TC-1660
Intel(R) UHD Graphics 750 1024MB
476 GB SSD KINGSTON OM8PCP3512F-AA
1863 GB HD Seagate ST2000DM008-2FR102
Office 2021 Professional Plus NLD 64bit

Offline BlackDevil

  • Ambassadeur
  • *****
  • Berichten: 1.029
  • Geslacht: Vrouw
  • veni vidi vici
Re: vba for..next..-loop wegschrijfvraagje
« Reactie #39 Gepost op: 20 januari 2024, 18:18:51 »
hey Molly,

Je bent nog niet bepaald overtuigd, hé?
hmz... dacht thans dat dit deel
Citaat
Vanmiddag had ik een compleet werkende code die netjes deed wat ik voor ogen had maar zoals je zelf ook al zei, het hele gedoe om dan naderhand de overbodige opgemaakte kolommen te gaan verwijderen e.d. was alles behalve bevorderlijk voor de doorloop-snelheid die de code in beslag nam.
Dus bedacht ik (zo'n 2 uur geleden) "wat als ik nu eerst gewoon de gegevens inlees en wegschrijf naar het werkblad "dataprint" en dan pas de effectief gebruikte kolommen ga opmaken met de correcte layout..."
Dus heb ik snel even de volgorde van mijn code gewijzigd en dat pakt toch wel al een pak minder doorloop-tijd in beslag maar helaas toch nog net dat ietsje 'teveel'.
Want in het test-bestand betreft het mààr hoogstens een 10-tal pagina's maar in het 'echte' bestand zullen het altijd tussen de 200 en 1500 pagina's zijn dus dan vrees ik echt wel voor een 'memory-crash'  ;D .
uit mijn laatste bericht enigszins duidelijk maakte dat ik 'mee' was inzake de 'vertraging' tgv van de 'celletje per celletje'- opmaak...
Ik had gewoon mijn bestand met die omgehusselde code bijgevoegd om te tonen hoe ik de volgorde had omgedraaid en wat het uiteindelijke resultaat hoorde te zijn qua aanmaak en hernoeming van het werkblad "dataprint".
Het was dus zeker en vast mijn bedoeling om die 'layout' code anders aan te pakken.
Ik ben dan ook, nà het plaatsen van mijn laatste bericht, aan de slag gegaan om de code dusdanig terug aan te passen waarbij de copy/special paste kon worden toegepast.
Ik had dus het "loop")gedeelte (for k =) terug verwijderd en dan onderaan had ik volgende code toegevoegd :
    .Range(.Columns(1), .Columns(4)).Copy
    .Range(.Columns(5), .Columns(einde)).PasteSpecial Paste:=xlPasteColumnWidths
    .Range(.Columns(5), .Columns(einde)).PasteSpecial Paste:=xlPasteFormats
    Application.CutCopyMode = False
    .Cells(1, 1).Select
wat dus toch wel deels overeenkomt met jouw laatste aanpassing. Maar helaas gaf dat hier bij mij weinig verschil mbt de snelheid en was/ben ik dus nog steeds naar een alternatieve werkwijze aan het zoeken.

Dus, jawel, ik ben zeker wel overtuigd...

Citaat
Op je gegevensblad heb ik wat extra rijen toegevoegd. Met amper 250 als laatste rij heb ik een snelheidstest uitgevoerd met jouw methode en kwam al op 31 seconden.
Een minimale wijziging in de code (de eerder voorgestelde werkwijze om opmaak te kopiëren i.p.v. celletje per celletje in te stellen) bracht dat terug tot 0,4 seconden.
(Om de test correct te kunnen uitvoeren is de inputbox uiteraard overgeslagen.)

Die 0,4 seconden worden dan nog vooral door andere code veroorzaakt, want met 2500 rijen, resulterend in 760 pagina's, zat ik aan 0,7 seconden.

Ik heb bij mij even jouw bestand laten lopen (met gebruik van de timer) met de amper 250 rijen en ik kreeg als resultaat in de msgbox "2,011719".

Ik ga dus alsnog moeten verder zoeken naar een andere aanpak want met mijn 'pover pc-systeem' ga ik op deze wijze altijd een aanzienlijke 'vertraging' behouden in mijn echte bestand waarbij duizenden rijen verwerkt zullen moeten worden.
Het probleem is/was dat ik niet té veel extra werkbladen op voorhand wil/wou maken binnen dit bestand omdat ik er sowieso reeds ruim 25 standaard werkbladen heb zonder de "dataprint" werkbladen wat dus de overzichtelijkheid al redelijk in het gedrang brengt.
Ik vrees dus dat ik opnieuw aan de tekentafel zal moeten gaan zitten...

groetjes,
Bieke
1) HP ProDesk (Windows 10 Pro Edu / Intel(R) Core(TM) i5-7500 CPU@ 3.40Ghz 3.41Ghz)
2) Laptop ASUS (Windows 10 Home / Intel(R) Core(TM) i3-3110M CPU@ 2.40GHz 2.40GHz)
Beide (RAM : 8,00 GB / 64-bits besturingssysteem, x64-processor)
Extern (Seagate Backup+ Hub 6TB / Seagate BUP Slim 2TB / Seagate Expansion Desk 5TB / HP ENVY 6030e)
Bullguard Premium Protection / Office Pro Plus 2016 NL

Offline BlackDevil

  • Ambassadeur
  • *****
  • Berichten: 1.029
  • Geslacht: Vrouw
  • veni vidi vici
Re: vba for..next..-loop wegschrijfvraagje
« Reactie #40 Gepost op: 20 januari 2024, 20:17:04 »
*update*

Omdat ik sowieso een oplossing zocht om mijn (om en bij de 26) standaard werkbladen overzichtelijk te houden ben ik eens in mijn 'echt' bestand gaan kijken hoe ik deze standaard werkbladen met de reeds bestaande andere codes zo efficiënt mogelijk zou kunnen gaan managen.
Ik heb zo bevoorbeeld de 4 (hulp) werkbladen voor de conversie van de namen bij het bijwerken van de 'totaal-db'. Deze (hulp) werkbladen moeten handmatig bewerkt kunnen worden maar hoeven daarom niet constant zichtbaar te zijn. In mijn code had ik een msgbox verwerkt om mij (de gebruiker) te melden of er al dan niet nieuwe namen in de lijsten zijn geplaatst voor handmatige verwerking zodat ik op voorhand weet of ik al dan niet de betreffende (hulp) werkbladen moet openen. Nu zou ik dus die 4 (hulp) werkbladen standaard willen verbergen en adhv de meldingen op diezelfde msgbox, al dan niet de 4 (hulp) werkbladen tijdelijk terug zichtbaar te maken.
En zo zijn er wel meerdere standaard werkbladen die ik op gelijkaardige wijze zou kunnen managen. Inclusief dus ook de template-werkbladen voor al mijn print-versies (in totaal een 15-tal die ik tot 5x (1x per parochie) zal moeten aanspreken) zoals molly reeds suggereerde in één van haar vorige berichten.
Ik heb dus een cleane versie van het test-bestand gemaakt waarin ik reeds de 6 template-werkbladen voor de digitale akten heb aangemaakt en verborgen heb gezet.
Hiermee valt er dus al een groot deel van de 'algemene' layout-code weg.

Zodra ik de code volledig heb aangepast aan deze nieuwe aanpak zal ik versie (4.0) bijvoegen.

groetjes,
Bieke
1) HP ProDesk (Windows 10 Pro Edu / Intel(R) Core(TM) i5-7500 CPU@ 3.40Ghz 3.41Ghz)
2) Laptop ASUS (Windows 10 Home / Intel(R) Core(TM) i3-3110M CPU@ 2.40GHz 2.40GHz)
Beide (RAM : 8,00 GB / 64-bits besturingssysteem, x64-processor)
Extern (Seagate Backup+ Hub 6TB / Seagate BUP Slim 2TB / Seagate Expansion Desk 5TB / HP ENVY 6030e)
Bullguard Premium Protection / Office Pro Plus 2016 NL

Offline BlackDevil

  • Ambassadeur
  • *****
  • Berichten: 1.029
  • Geslacht: Vrouw
  • veni vidi vici
Re: vba for..next..-loop wegschrijfvraagje
« Reactie #41 Gepost op: 21 januari 2024, 07:48:48 »
het is gebeurd  :D
ben terug aan de tekentafel gaan zitten en jawel, ben gewoon terug naar de basics gestapt (less is werkelijk vaak more  ;D) en heb het dus 'simpel' gehouden  ;).
Zoals in mijn vorig bericht reeds gemeld heb ik gewoon voor de 6 soorten registers een eigen 'template'-werkblad (DIG) gemaakt waarbij enkel de 4 eerste kolommen een complete opmaak hebben gekregen en deze vervolgens verborgen.
Op elk 'IDX'-werkblad komt dan een knop met daarachter een eigen 'sub'.
In het voorbeeld-bestand zijn dus wel de 6 'DIG'-werkbladen aangemaakt maar is er nog maar enkel voor de dopen een 'IDX'-werkblad toegevoegd.
De 'sub' zelf is dus simpel en relatief kort en heeft (bijna) alles wat het nodig heeft om mijn geïndexeerde akten te kunnen verwerken naar de digitale akten ter publicatie.
Ik zeg 'bijna' omdat er dus nog 2 kleine onderdelen zijn die gecodeerd moeten worden.

1) Om te kunnen bepalen welke parochie ik wil verwerken ben ik afgestapt om dit via een "inputbox" te doen omdat ik de 'onderbreking' nogal storend vind en dit sowieso toch voor enige 'vertraging' (hoe minuscuul ook) zorgt. Ik speel nu met het idee om van de kolomtitel in de cel "A1" een keuzelijst te maken met als 1e item de kolom-titel en als verdere keuze-items de reeds ingevoerde parochies. Zodoende kies ik dan op die manier welke parochie ik wil verwerken en moet in de code enkel de waarde in "A1" ingelezen worden om de rest van de code te kunnen verwerken. Zodra de waarde van "A1" is vastgelegd in de code mag dan de waarde in "A1" teruggezet worden naar de kolom-titel. Ik weet hoe ik simpel een (werkblad-)keuzelijst kan vullen met gekende waarden maar weet niet zo meteen hoe ik de gegevensvalidatie moet instellen om enkel de unieke waarden uit kolom A en dan de kolom-titel te vermelden. Dus voor dit deel heb ik zelf nog geen actie ondernomen.

2) aan het einde van de sub zou er dan nog een extra stukje code moeten komen om het nieuwe 'DIG' werkblad naar PDF te printen waarbij de PDF dan de werkbladnaam als bestandnaam moet krijgen.

De locatie waar deze 2 extra onderdelen moeten komen in de code heb ik als commentaar in de code geplaatst.

In bijlage dus mijn nieuwste versie (4.0)

groetjes,
Bieke
1) HP ProDesk (Windows 10 Pro Edu / Intel(R) Core(TM) i5-7500 CPU@ 3.40Ghz 3.41Ghz)
2) Laptop ASUS (Windows 10 Home / Intel(R) Core(TM) i3-3110M CPU@ 2.40GHz 2.40GHz)
Beide (RAM : 8,00 GB / 64-bits besturingssysteem, x64-processor)
Extern (Seagate Backup+ Hub 6TB / Seagate BUP Slim 2TB / Seagate Expansion Desk 5TB / HP ENVY 6030e)
Bullguard Premium Protection / Office Pro Plus 2016 NL

Offline Della Jordan

  • Volledig lid
  • **
  • Berichten: 160
  • Geslacht: Vrouw
  • Hey, ik ben nieuw hier !
Re: vba for..next..-loop wegschrijfvraagje
« Reactie #42 Gepost op: 21 januari 2024, 08:33:44 »
PDF code
c00 = ThisWorkbook.Path & "\"
    c01 = ActiveSheet.Name
ActiveSheet.ExportAsFixedFormat xlTypePDF, c00 & c01 & ".pdf", , , , , , False
Groetjes,Della

Offline Della Jordan

  • Volledig lid
  • **
  • Berichten: 160
  • Geslacht: Vrouw
  • Hey, ik ben nieuw hier !
Re: vba for..next..-loop wegschrijfvraagje
« Reactie #43 Gepost op: 21 januari 2024, 08:41:43 »
Selecteer een cel in kolom A bv Parochie2
dan is volgende code voldoende.
par = ActiveCell.Value
Groetjes,Della

Offline BlackDevil

  • Ambassadeur
  • *****
  • Berichten: 1.029
  • Geslacht: Vrouw
  • veni vidi vici
Re: vba for..next..-loop wegschrijfvraagje
« Reactie #44 Gepost op: 21 januari 2024, 08:55:50 »
@Della,

Hartelijk dank voor jouw aangereikte code/oplossing.

Maar jouw voorstel voor de parochie-selectie is in dit geval niet erg handig.
Zolang het aantal rijen minder is dan 100 dan is dit nog haalbaar maar in mijn echte bestand gaan de rijen oplopen tot makkelijk 20000....
Als ik dan de 5e parochie wil verwerken ga ik wel héél vaak op 'pgdn' moeten klikken...
Vandaar mijn idee om met een keuzelijst te werken.

De PDF-code is wel  :thumbsup:


groetjes,
Bieke
1) HP ProDesk (Windows 10 Pro Edu / Intel(R) Core(TM) i5-7500 CPU@ 3.40Ghz 3.41Ghz)
2) Laptop ASUS (Windows 10 Home / Intel(R) Core(TM) i3-3110M CPU@ 2.40GHz 2.40GHz)
Beide (RAM : 8,00 GB / 64-bits besturingssysteem, x64-processor)
Extern (Seagate Backup+ Hub 6TB / Seagate BUP Slim 2TB / Seagate Expansion Desk 5TB / HP ENVY 6030e)
Bullguard Premium Protection / Office Pro Plus 2016 NL

 


www.combell.com