Map- en sub map namen wijzigen d.m.v. formulier en VBA

Status
Niet open voor verdere reacties.

Chrelske

Verenigingslid
Lid geworden
5 apr 2016
Berichten
24
Geachte forum lezers,

Heeft iemand van jullie een idee hoe je vanuit een formulier "Klanten" in MS-Access diverse mapnamen en submap namen in een keer kunt wijzigen?
Op de server staan diverse mappen met allerlei submappen met daarin bestanden die vanuit MS-Access benaderd worden.
Onderstaand is het schema hoe deze mappen in elkaar zitten.
Mapnamen en projecten.jpg
Op diverse formulieren wordt er d.m.v. een hyperlink naar deze mappen gezocht.
Deze hyperlink maakt gebruik van een verborgen tekstveld met de gehele url naar deze specifieke plek op de server.
In deze url zit ook de klantnaam opgenomen.(die uit de tabel klanten wordt gehaald)
Als nu de klantnaam wijzigt bv. Amsterdam RAI naar RAI Amsterdam dan werken alle linken niet meer want die gebruiken nu in de url de nieuwe naam uit de database,
maar de map namen zijn allemaal nog niet aangepast.
Wat ik nu wil bereiken is dat als in het formulier "klanten" op klantnaam wijzigen wordt geklikt een nieuw formulier wordt geopend waarin je dan de nieuwe naam kan invullen.
Klantenformulier.jpg
KlantnaamWijzigen.jpg
Als je dan op OK klik dan moet er vanaf de root map F:\Projecten in alle submappen gezocht worden naar Amsterdam RAI en die worden aangepast naar RAI Amsterdam.

Hetzelfde gebeurt er ook als ik de naam van een beurs moet veranderen, maar dat is maar in één map in één jaar.
Dat heb ik kunnen oplossen d.m.v. "Name BeursnaamOud As BeursnaamNieuw"
Name As.JPG

Waarschijnlijk zal de klantnaam wijzigen wel op ongeveer dezelfde manier gaan, maar zoeken in alle submappen gaat mijn VBA kennis te boven.

Ik zou het te gek vinden als iemand hier een oplossing voor heeft.
Alvast bedankt voor het meedenken.
 
Het zou op exact dezelfde manier moeten werken. Je hebt immers het volledige pad van de oude map, en de nieuwe mapnaam kun je op basis daarvan ook prima samenstellen. Ik ben dus benieuwd naar waarom je de Name functie in dit geval níet aan de praat krijgt...
 
Bij het aanpassen van bv. een beursnaam, dan heb ik inderdaad het volledige pad naar de oude beursnaam bv. F:\Projecten\2012\BeursnaamOud,
En als ik dan in een vergelijkbaar formulier de nieuwe beursnaam intyp dan wordt het nieuwe pad F:\Projecten\2012\BeursnaamNieuw.
Dan heb ik inderdaad twee waarden die dan gemakkelijk met Name As aangepast kunnen worden.

Mijn probleem ligt denk ik meer in het feit dat als je de klantnaam wilt wijzigen er wellicht 40 projecten zijn waarin deze naam zit.
Zowel in het jaar 2012 als in het jaar 2013, 2014.... kunnen deze projecten zitten, en ook nog eens op verschillende beurzen.
Als je dus op OK klikt in het formulier Klantnaam wijzigen moet er nu niet één pad worden aangepast, maar tegelijk 40.
Er moet dus gezocht worden vanaf F:\Projecten\....... en dan in elke submap zoeken naar KlantnaamOud en die vervangen naar KlantnaamNieuw.
Ik weet nu dus niet meer hoe ik één voor één alle mappen kan doorzoeken en dan stuk voor stuk de KlantnaamNieuw moet invullen.

Je kan denk ik niet met Name As in één keer een hele lijst aanpassen?
Er moet dus geloopt worden elke keer als er KlantnaamOud staat vanaf F:\Projecten\....
Daar begin ik het spoor te verliezen.
 
Je kan denk ik niet met Name As in één keer een hele lijst aanpassen?
Een schattige gedachte :). Maar nee, dat zal niet gaan. Je kunt denk ik met Dir wel door de mappen in een hoofdmap lopen, en dan doorlussen naar daarin gelegen mappen, net zo lang tot je alles gehad hebt. Ik vermoed dat als je de mappenstructuur (en de projecten) vanuit de Klant aanmaakt, dat je veel sneller klaar bent, hoef je maar één map aan te passen :)
 
Ik wist niet dat ik ook nog schattige gedachten kon hebben.:D
Dat hoor ik niet vaak.

Toch nog een andere gedachtegang van mij die misschien kan werken.
als ik nu een query maak die van alle projecten van deze klant het pad naar deze map laat zien,
en ik geef in dezelfde query ook het pad zoals het zou moeten worden.

KlantnaamOudKlantnaamNieuw.JPG

Is er dan niet een manier om per record het oude pad op te zoeken en daar de nieuwe naam aan te geven?
Als je denkt dat dit misschien een oplossing kan zijn, wil je me dan op weg helpen met de VBA code om door deze lijst heen te lopen.

En weer bedankt voor je meedenken.
 
Met zo'n query achter de hand is het een fluitje van een paar cent. Open (we hebben het uiteraard over een VBA oplossing) een recordset op basis van de query, en loop er doorheen met een lusje. Gebruik de twee velden in de Name opdracht om de mappen te hernoemen.
Je hebt maar een paar regeltjes nodig.
 
Ik ben niet lui maar meer onwetend met VBA.
Mag ik je vragen om voor mij die paar regeltjes code te produceren.
Ik heb nl. nogal veel moeite met lopen door een recordset en dan één voor één deze afhandelen.

Bij voorbaat al bedankt.
 
Het is mij nog niet gelukt om door de bestanden heen te loopen.
Wellicht kan iemand mij toch nog een keer op weg helpen.
 
Na het e.e.a. uitgeprobeerd te hebben kom ik al wel een heel eind maar er zit nog één ding in de weg.

Eerste maak ik met een tabelmaakquery een tabel aan die zowel het oude als het nieuwe pad opslaat.(zie afbeelding eerder bij deze vraag).
Die wordt dan gebruikt als recordset en loop daar doorheen en moet per loop het pad aanpassen.
Maar als ik dat wil doen dan geeft hij een foutmelding dat hij het pad niet kan vinden.
Terwijl in de VBA code KlantnaamOud en KlantnaamNieuw perfect worden weergegeven.
Maar als de cursor op de Name staat geeft hij onderstaande melding Name = "Microsoft Access"
Ik denk dat deze melding in de weg zit om een goede Name As te krijgen.

Name KlantnaamOud As KlantnaamNieuw.jpg

Wellicht zie ik wat over het hoofd en is de oplossing nabij.
Alvast bedankt voor het meedenken.
 
Ik dacht dat je de namen van folders wilde aanpassen .... ??
 
Sorry voor de wat onduidelijk tenaamstelling.
Maar met KlantnaamOud bedoel ik het gehele pad naar de bestaande folder,
en met KlantnaamNieuw geef het gehele pad aan naar de folder met de nieuwe naam.

Ik had het beter FoldernaamOud en nieuw kunnen noemen.
Maar de werking is denk ik hetzelfde.
Ik ben op deze naam gekomen omdat deze handeling alleen moet plaatsvinden als de naam van de klant wijzigt.

De code staat in een module maar ik krijg een zelfde soort foutmelding als ik het vanuit een formulier uitvoer.
Alleen dan staat er bij Name: Name = "frmKlantnaamWijzigen" dus de naam van het formulier.
En ook daaar geeft hij aan kan de mapnaam niet vinden.
 
Soms stuur je wel eens te snel je probleem op zonder dat je eigenlijk een probleem hebt.
De foutmelding kwam doordat één origineel pad niet dezelfde naam had als in de tabel.
Dan kan je zoeken tot je een ons weegt.

Dus eigenlijk werkt de code wel zoals het hoort.
Iedereen bedankt voor het meedenken en ik zal in het vervolg eerst beter testen waarom iets niet werkt.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan