Automatisch map aanmaken van keyveld en hyperlink

Status
Niet open voor verdere reacties.

jerxjac

Gebruiker
Lid geworden
24 apr 2006
Berichten
21
Ik heb nu deze functie in een excel bestand welke overgezet moet worden naar een Access database, maar geen idee hoe de zelfde werking te krijgen [noob met access]
Nu is het zo dat er bij wijziging van de sheet in excel een map op de server word aangemaakt(macro), waarna er een hyperlink beschikbaar is in een cel verderop, door middel van een formule.

Private Sub Worksheet_Change(ByVal Target As Range)

With ActiveSheet
MakeDirs .Range("A4", .Cells(.Rows.Count, "A").End(xlUp)), "I:\Algemeen\Kwaliteit\Creatie_producten\"
End With

=HYPERLINK(TEKST.SAMENVOEGEN("I:\Algemeen\Kwaliteit\Creatie_producten\";"\";A90);A90)

van de waarde in de key veld (ID) moet een map worden gemaakt in "I:\Algemeen\Kwaliteit\Creatie_producten\", en in een andere cel moet dan een klikbare hyperlink beschikbaar zijn voor deze map (mag ook zelfde cel zijn als waar ID staat)

Ik hoop dat iemand mij kan helpen hiermee,.. ben nog niet bekend met access maar leer gaande weg ;)
 
In Access hoef je geen Hyperlinks te maken; als je op een tekstveld op een formulier de gebeurtenis <Bij klikken> (of (<Bij Dubbelklikken>) het commando FollowHyperlink geeft, dan het gewenste effect (map openen neem ik aan).
De functie die je gebruikt om mapjes te maken bestaat in Access in ieder geval niet; ik vermoed dat het een functie is die je ergens vandaan hebt gehaald en in Excel hebt neergezet. Die zou dan in Access ook moeten werken, want hij is verder niet Excel-specifiek denk ik. Zelf doe ik het zo, met een functie:

Code:
Sub TestMap()
    CreateFolder "H:\Algemeen\Kwaliteit\Creatie_producten\"
' Of, zoals je het in Access zou gebruiken:
    CreateFolder Me.Tekstvak.Value
End Sub

Code:
Function CreateFolder(strFolder)
'Aanroepen met:     CreateFolder "H:\Algemeen\Kwaliteit\Creatie_producten\"
Dim oFSO
    Set oFSO = CreateObject("Scripting.FileSystemObject")
    If oFSO.FolderExists(strFolder) Then
        Exit Function
    Else
        CreateFolder (oFSO.GetParentFolderName(strFolder))
    End If
    oFSO.CreateFolder (strFolder)
    Set oFSO = Nothing
End Function
Overigens kun je beter de CODE knop gebruiken voor code dan de QUOTE. Ziet er (de CODE knop dus) een stuk fraaier uit :)
 
Bedankt voor de feedback! ik zal kijken of ik het morgen kan uitproberen:d
 
Octafisch,

Zoals ik al aangaf ben ik een noob (en ik ga me zo steeds meer voelen, acces maco’s/vba is totaal anders dan excel…)

Als ik in een tekstvel op gebeurtenis > bij FollowHyperlink invul accepteerd hij dat niet, krijg de melding “de expressie bij klikken die u hebt opgegeven als instelling voor gebeurtenis eigenschap, heeft de volgende fout veroorzaakt: Een of meer expressies kunnen niet worden geevalueerd, omdat in een expressie naar FollowHyperlink wordt verwezen”.

Kun je mij stap voor stap vertellen hoe en waar ik deze VBA codes moet invullen en gebruiken?
In je eerste code “CreateFolder Me.Tekstvak.Value” moet ik Tekstvak en Value door iets vervangen?


Jerxjac
 
Het was ook niet de bedoeling dat je mijn 'code' (die geen codevoorbeeld was) letterlijk zo zou invoeren. Ik wilde je meer in de goede richting duwen. FollowHyperlink heeft uiteraard specifieke kenmerken.
Code:
Application.FollowHyperlink Me.Leverancier, , True
bijvoorbeeld. Access VBA is overigens exact dezelfde taal als Excel VBA, dus zo lastig zou de overstap niet hoeven te zijn. Al is Access uiteraard een heel ander programma als Excel, en moet je de zaken wel anders benaderen. Zo baseer je opdrachten in Excel op waarden uit een cel (de Range opdracht), en Access gebruikt (op formulieren en rapporten) tekstvakken en keuzelijsten e.d. Dus moet je verwijzen naar de naam van die objecten.

Dus ik kan weinig anders als voorbeeld geven dan hierboven, omdat ik je db niet heb. Ik zou de aanmaak van de map wel aan een knop koppelen. Van welk tekstvak je dan een map maakt, moet je natuurlijk nog wel in de code de naam aanpassen.
Code:
Sub TestMap_Click()
    CreateFolder Me.Tekstvak.Value
End Sub
En voor je hyperlink:
Code:
Private Sub Tekstvak_Click()
Dim sHyperlink As String
    sHyperlink = "I:\Algemeen\Kwaliteit\Creatie_producten\" & Me.Tekstvak
    Application.FollowHyperlink sHyperlink, , True
End Sub

De functie kun je letterlijk zo overnemen, ook in Excel overigens, daar werkt hij op exact dezelfde manier.
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
With ActiveSheet
    CreateFolder "I:\Algemeen\Kwaliteit\Creatie_producten\" & .Range("A4", .Cells(.Rows.Count, "A").End(xlUp))
End With
End Sub
Maar dit terzijde.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan