• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Bestandsverwijzing

Status
Niet open voor verdere reacties.

Jarodxxx

Gebruiker
Lid geworden
26 nov 2006
Berichten
243
Ik weet niet of 't eigenlijk wel kan,

maar in excel gebruik ik veel verwijzingen naar bestanden ergens op m'n pc.

een vb: C:\Documents and Settings\Naam Gebruiker\Naam Bestand.xls

Ik probeer eigenlijk een manier te bedenken, waarbij ik bij het wijzigen van de bestandslocatie

vb: naar C:\Documents and Settings\Naam andere Gebruiker\Naam Bestand.xls

Dit niet overal in de code weer hoef aan te passen.

Is hier uberhaupt een methode voor? bv doormiddel van een soort config bestand o.i.d. of iets anders. Wat veel handiger werkt?

Groet,

JC
 
JC,

Ik weet niet precies wat je bedoelt.
Als je het hebt over bestandsverwijzingen in VBA-code, zou je wellicht kunnen denken aan een publieke constante definiëren en die aanroepen in de rest van de code. Wijzigingen hoef je dan maar op een plek door te voeren.


Groetjes

Jofred
 
JC,

een soortgelijke vraag heb ik hier op het forum gelezen. het kan ook zijn in de Wordsectie. ik heb nu geen tijd om het op te zoeken, maar als je zoekt op 'links' vind je misschien wel iets.

steven

PS ik ben pas sinds oktober 2006 terug actief op dit forum, dus het is van daarna.
 
Dan proberen we het....

Dan proberen we het in de herhaling;)

Wat ik bedoel is:

1. ik haal veel gegevens uit andere excelbestanden die bij elkaar staan in een map.
Maar deze map wil ik toekomstig ook wel eens wijzigen.
2. in mijn code verwijs ik naar de bestanden zoals ik noemde in punt 1.
3. het probleem is: als ik de bestanden verplaats dan moet ik overal in de code weer aanpassen waar die bestanden nu staan.

vb C:\Bestand1.xls zou toekomstig kunnen worden D:\Bestand1.xls.
Nu moet ik dat overal in de code aangaan zitten passen = erg tijdrovende klus, maar dat hoef ik je niet uit te leggen.

Zo duidelijker en suggesties?

tx!

Jarod
 
zou je dan niet kunnen werken met het pad in cel A1 te zetten en dan deze waarde op te halen in jouw code.

indien dit ook niet is wat je bedoelt, moet je eens een klein voorbeeldje geven. maar antwoorden hierop zal pas voor morgen zijn. heb nog wat ander werk liggen.

steven
 
Een voorbeeld

Voorbeeld van een stuk code:

Code:
'in sheet "" en tabblad "" een lege rij zoeken
    Set TCOR = Workbooks.Open("C:\Testbestanden\Test1.xls")
    Sheets("Test1").Activate

Ik gebruik dit (even aangepast met test als voorbeeld) bv in m'n code.
ik open nu vanuit C:\Testbestanden\

Aangezien ik nog niet weet waar de bestanden komen, wil ik liever niet overal in de code de toekomstige locatie van de bestanden aanpassen.

Toekomstig zou de verwijzing best eens D:\Data-bestanden\Datasheet1.xls kunnen worden.

Dat wil niemand graag overal in zijn code aan hoeven passen lijkt me. Ik iig niet.
Is er een handigere (vba) manier? om dit te realiseren?

alvast bedankt voor de input.

Jarod.

ps: er moet ook gewerkt worden:-)
 
Dag Jarodxg,

Zet aan het begin van je programma

Const Bestand1 As String = "C:\Bestanden\Bestand1.xls"
Const Bestand2 as String = enzovoort

In je programma gebruik je Bestand1 enz en als die naam verandert dan wijzig je de const naam

Gegroet,

Axel.
 
Dit werkt:

Code:
Dim pad As String
    pad = "C:\Testbestanden\"
    Set TCOR = Workbooks.Open(pad & "Test1.xls")
    Sheets("Test1").Activate

;)
 
Blond

Misschien een blonde opmerking,

maar moet ik dit nu niet bij elk userform toevoegen?
Da's nog veel werk:-)

Is 't niet aanroepbaar of gewoon bij het veranderen van de locatie dat ie 't gelijk snapt? zoals bij installatie van een programma o.i.d.?

Jarod.
 
Maak er zoals bij Axel een Const (constante) van en declareer het als een String.

Dus neem zijn code.

Gebruik wel Public, zoals in dit artificiële voorbeeld:

Code:
Public Const MijnNaam As String = "Wigi"

Plaats die regel bovenaan je code, nog boven de eerste Sub.

Wigi
 
100 Userforms

Stel je hebt 100 userforms, dan is dat nog veel werk om te muteren

Is dit de enige oplossing?
Ik dacht zelf aan een soort oplossing in de trant van:

Hij weet de naam van de .xls bestanden.
Alle gebruikte bestanden staan in 1 map.

De locatie van de .xls bestanden kan varieren.

Is het dan zo te doen dat je het eerste deel C:\ aanpast als dat D:\Documents and Settings\Jarod\ wordt?

vb:

Code:
Private sub Locatiebestanden()

Hier staat de locatie van de bestanden voor alles (in een soort module ofzo)
vb C:\Testbestanden. Dit kun je dan gemakkelijk hier voor alles wijzigen in bijvoorbeeld
D:\Documents and Settings\Jarod\Testbestanden\ 

end sub

in de code zeg je dan de iets in de trant van:

Kijk voor de locatie bestanden in 'Locatiebestanden' hier staat de 'root' folder van alle files in.

volgens mij zou zoiets dan ook kunnen voor de bestanden in de folder. (zelfde voorbeeld als hieboven alleen dan voor de losse bestanden die in de map staan die in 'Locatiebestanden' wordt genoemd)


Code:
Private sub BestandTest1()

Hier wordt aangeroepen in 'locatiebestanden' staat Test1.xls

End sub

in de code van de userforms zou je dan misschien iets kunnen doen van

Code:
Set TCOR = Workbooks.Open kijk naar 'locatiebestanden' en BestandTest1)

Zoiets

't is heel wat ik weet 't maar wel een leuke:-)

Jarod
 
Laatst bewerkt:
Dag Jarod,

In de eerste plaats wat doet een mens met 100 userforms?

In de tweede plaats. Als je stap voor stap uitlegt wat de bedoeling is dan denk ik mee.

gegroet,

Axel.
 
Locatie bestanden

In stukken:

Alle bestanden staan in een soort root folder ik roep nu in mijn vba code vb C:\Testbestanden\Testbestand1.xls aan.

Bij een mutatie van de locatie is dat veel werk.

Stel dat ik een plaats heb (vba module o.i.d. denk ik?) waar de root folder staat C:\Testbestanden\

in mijn vba-code refereer ik dan naar de module/die ene plaats.

ik hoef nu alleen de plaats van de 'root folder' aan te passen. ipb al mijn vba-code

Jarod

ps: dit was stap 1 stap 2 is ook de bestanden in de root folder
 
Laatst bewerkt:
Dag Jarod,

Je hebt een hoofdmap Testbestanden en daar staan al je testbestanden 1 t/m x.

Nu ga je de hoofdmap van naam veranderen en in je macro worst die hoofdmap st]eeds aangesproken op wel 30 verschillende plaatsen en nu moet je die allemaal gaan wijzigen en wie weet sla je er eentje over en dan loopt je macro vast.

Dan is dit de oplossing:

Je zet bovenaan je macro: Const Hoofdmap as String = "C:\Testbestanden\"

En overal waar in je macro "C:\Testbestanden\"staat zet je nu Hoofdmap (let op dit is een variabele naam).

Als je de eerstvolgende keer je hoofdmap een andere naam geeft bijvoorbeeld Textbestanden. Dan verander je de eerste regel in:

Const Hoofdmap as String = "C:\Textbestanden\"

En klaar is Kees.

Ik hoop dat je nu uit de brand bent.

Succes,

Axel.
 
Niet gek jong

:D lang niet gek.

nou vroeg ik me af of je ipv constante hoofdmap string locatiebestand ook net zoiets kunt doen, alleen dat je zegt kijk voor bestandslocatie in module.... X

in module x staat dan dat de locatie of hoodmap = C:\Testbestanden\

Dan hoef je alleen nog maar module x aan te passen.

Groeten en tot zover al bedankt!

Jarod
 
Als je hem Public maakt, dan kan je het overal gebruiken.
 
Grotendeels duidelijk

Heren,

Wat ik als tips heb gehad werkt, dus proficiat!

Ik gebruik nu:

Code:
Set TCOR = Workbooks.Open(pad & "Testbestand1.xls")

met

Code:
Dim pad As String
    pad = "C:\Testbestanden"

Nu wil ik eigenlijk van

Code:
Dim pad As String
    pad = "C:\Testbestanden"

een soort public maken in een module (onder modules) zoiets:


Code:
Public Sub rootfolder()

Dim pad As String
    pad = "C:\Testbestanden"

End Sub

Hoe gebruik ik dat bij set TCOR =

en kan dit zo wel?

Jarod

ps: we zijn er bijna:-)
 
Kan dit?

Hallo jongens,

Kan deze ene laatste post wel?
Ik wil er namenlijk een soort knop van maken die een rootfolder vraagt.
Als dan de folder met externe bestanden wijzigt klik ik op de knop en wijzig ik de rootfolder.

Groet,

Jarod
 
Dag Jarod,

Vanuit Word kun je het register benaderen:

System.Profilestring("Mappen", "Hoofdmap") = "C:\Testmap\"

map = System.Profilestring("Mappen", "Hoofdmap")

Ik weet niet of dat vanuit Excel ook kan. Zo niet dan kun je de volgende ciode gebruiken:

CreateObject("Word.Application").System.Profilestring("Mappen", "Hoofdmap") = "C:\Testmap\"
en

map = CreateObject("Word.Application").System.Profilestring("Mappen", "Hoofdmap")

Succes,

Axel.
 
Ik moet bekennen...

Axel,

Bedankt voor de response!

Ik moet hier afhaken, aangezien ik hier even niet helemaal begrijp wat je bedoeld, wat dit doet en hoe ik dit moet toepassen?

Kun je het me kort uitleggen?

Jarod
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan