excel-tabel koppelen relatief pad ??

Status
Niet open voor verdere reacties.

martino007

Gebruiker
Lid geworden
11 okt 2015
Berichten
6
Ik heb een Excel-tabel gekoppeld aan een Access database
Beide bestanden (Excel-file en Access database) staan in dezelfde directory/map.
Dat werkt ... tot op het ogenblik dat ik beide bestanden in een andere map op een andere plaats (bv. op de server) plaats.
Access database vindt Excel-file niet meer. Ik krijg mededeling ".... is geen geldig pad"
Wellicht omdat Access werkt met "absolute paden" .(bv. C:\Users\ikke\Documents\mapnaam\file.xlsx)
Hoe kan ik Access duidelijk maken dat er een "relatief pad" moet gebruikt worden?? (bv ../file.xlsx)

Met dank
Martino007
 
Wijzig dit: C:\Users\ikke\Documents\mapnaam\file.xlsx
Eens in: Environ("USERPROFILE") & "\Documents\mapnaam\file.xlsx"

Een andere manier om de documentenfolder te vinden is dit:
Code:
Set WshShell = CreateObject("WScript.Shell")
strDocuments = WshShell.SpecialFolders("MyDocuments")

Of gebruik CurrentProject.Path
 
Hoe heb je de koppeling gemaakt? Je kunt in Access koppelingen bijwerken (overigens niet op de manier van edmoor, maar die weet nu eenmaal niet zoveel van Access ;) ). Ik heb daar in de cursus een hoofdstuk aan gewijd, met een functie die dus automatisch koppelingen bijwerkt.
 
Ik gaf alleen aan hoe hij de map op kan halen. De moeilijke dingen m.b.t. Access laat in aan jou :)
 
Laatst bewerkt:
Allen

Ik heb de koppeling gemaakt via de gewone weg . Access 2013 Externe gegegens -> Excel > koppelen
Het is de bedoeling dat de Excel-file en de Access-database op een server staan in dezelfde map.
De benaming van de server kan wijzigen.

@OctaFish: is de cursus waarnaar je verwijst te vinden op internet ?

Bijkomend probleem zou ook kunnen zijn dat indien er meer dan 1 gebruiker de database opent er mogelijks een bericht wordt gegenereerd dat de Excel-file geopend is . Hoe zou ik dat dan oplossen

Voor de duidelijkheid even de context schetsen
Op regelmatige tijdstippen moet een Exce-file gecontroleerd worden. Die controle gebeurt in Acces met query's (die voor de layout opgenomen zijn in formulieren). Er worden dus geen data toegevoegd of verwijderd. Van de Access-database maak ik een "accde" toepassing.
De gebruikers moeten dus enkel een Excel bestand hernoemen tot het bestand dat gekoppeld is met Access

@edmoor : Ik vermoed dat "CurrentProject.Path" wellicht een oplossing kan zijn
Waar kan ik dat pad veranderen?

Met dank
Martino007
 
CurrentProject.Path is de map waar je database staat. Om naar je Excel document in dezelfde map te wijzen kan je dan dit doen:
CurrentProject.Path & "\file.xlsx"
 
@OctaFish: is de cursus waarnaar je verwijst te vinden op internet ?
Sterker nog: gewoon hier op HelpMij, in de Handleidingen sectie :)
En vraag je nu aan edmoor waar je die code moet veranderen? Veel succes daarmee :).
 
Misschien dat ik je cursus ook een keer ga volgen. Helaas heb ik qua werk en hobby niks met Access te maken, maar het lijkt me wel leuk om een keer te doen :)
 
@OctaFish

Mooie cursus, mooi werk ! :thumb: Daar zal ik regelmatig eens gaan snuffelen
Kan u mij duidelijk maken waar ik die code best toevoeg ?
CurrentProject.Path & "\file.xlsx"

Groeten
Martino007
 
Niet.... Tenzij je het echt nodig hebt :).
Het is de bedoeling dat de Excel-file en de Access-database op een server staan in dezelfde map.
De benaming van de server kan wijzigen.
Ik heb de constructie van je db nog niet helemaal door. Bij ons verandert de naam van de servers namelijk nooit. Nou ja: één keer in de 5 jaar, als er een nieuwe server wordt neergezet. Maar om daar nou een procedure voor te maken?
 
Voor mij is het gewoon belangrijk te weten waar ik de code :
CurrentProject.Path & "\file.xlsx"
kan toevoegen zodat de Acces-database de gekoppelde Excel-tabel vindt die beiden in dezelfde map staan .
Ongeacht de plaats van die map
 
Je hebt niks aan die code; je moet een functie hebben die er iets mee doet en die functie moet je dan (bijvoorbeeld via een AutoExec macro) laten uitvoeren. Maar zonder die functie heb je aan de regel ook niks.
 
OK, een AutoExec macro maken kan ik
Ik vermoed dat die macro bij het opstarten van de database dan een stukje code uitvoert .
U schrijft een functie...
Hoe ziet die functie er dan uit ?
 
Je denkt nogal kort door de bocht :). Hier staat een beschrijving van de functies die er bij komen kijken. Ik gebruik zelf meestal deze code:
Code:
Public Function RefreshTableLinks() As String
On Error GoTo ErrHandle

Dim db As DAO.Database
Dim tdf As DAO.TableDef
Dim strCon As String
Dim strBackEnd As String
Dim strMsg As String
Dim intErrorCount As Integer
Dim tmp As Variant
Set db = CurrentDb

'Door alle tabellen in de TableDefs Collectie lussen.
For Each tdf In db.TableDefs
    If Left$(tdf.Connect, 10) = ";DATABASE=" Then       'Tabel is een gelinkte tabel.
        strCon = Nz(tdf.Connect, "")                    'Lees de Connection String uit.
        'Gebruik de SPLIT opdracht om de back-end database naam te splitsen.
        tmp = Split(strCon, "\")
        'Checken of we een Access database te pakken hebben
        If InStr(1, tmp(UBound(tmp)), "mdb") > 0 Or InStr(1, tmp(UBound(tmp)), "accdb") > 0 Then
            'De nieuwe Connection String opbouwen en verversen.
            Set tdf = db.TableDefs(tdf.Name)
            tdf.Connect = ";DATABASE=" & [B][COLOR="#0000FF"]CurrentProject.path [/COLOR][/B]& "\" & tmp(UBound(tmp))
            tdf.RefreshLink
        Else
            'Als er een foutje is: de foutmelding toevoegen aan de foutmeldingsboodschap.
            intErrorCount = intErrorCount + 1
            strMsg = strMsg & "Niet gelukt om de back-end database naam uit te lezen." & vbNewLine
            strMsg = strMsg & "Tabel Naam: " & tdf.Name & vbNewLine
            strMsg = strMsg & "Connect = " & strCon & vbNewLine
        End If
    End If
Next tdf

ExitHere:
    On Error Resume Next
    If intErrorCount > 0 Then
        strMsg = "Er waren problemen met het verversen van de tabel links: """ _
        & vbNewLine & strMsg & "In Procedure RefreshTableLinks"""
        RefreshTableLinks = strMsg
    End If
    Set tdf = Nothing
    Set db = Nothing
    Exit Function
    
ErrHandle:
    intErrorCount = intErrorCount + 1
    strMsg = strMsg & "Error " & Err.Number & " " & Err.Description
    strMsg = strMsg & vbNewLine & "Tabel Naam: " & tdf.Name & vbNewLine
    strMsg = strMsg & "Connect = " & strCon & vbNewLine
    Resume ExitHere

End Function
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan