Hoe u een gekoppelde tabel snel kunt bijwerken wanneer de externe bestandsnaam wordt gewijzigd

Gekoppelde tabellen kunnen fantastisch handig zijn (hoewel niet altijd natuurlijk), vooral als je te maken hebt met externe informatie die regelmatig verandert. Een typisch voorbeeld kan zijn wanneer een leverancier u toegang geeft tot zijn huidige maandelijkse prijsbestand. Maar wat gebeurt er als ze het bestand volgende maand uitgeven en de bestandsnaam verandert van “Pricelist-01-01-2016” naar “Pricelist-01-02-2016”? Het eerste dat zal gebeuren, is dat uw link kapot gaat, dus u moet deze handmatig bijwerken. Elke keer dat ze de bestandsnaam wijzigen. Dat geldt natuurlijk ook voor tabelnamen. Is er een manier om dit snel en gemakkelijk te doen, vraagt ​​u zich af? We zijn blij dat je het vraagt ​​- lees verder en ontdek hoe ...

De scène bepalen - het scenario

Beheer van gekoppelde tafelsIn dit artikel ga ik een fictief scenario gebruiken, maar ik weet zeker dat je het snel zult herkennen!

Elke maand stuurt Acme Trading ons een bijgewerkte prijslijst voor alle verbruiksartikelen die worden gebruikt DataNumen. Zodat we weten hoeveel we elke maand aan briefpapier uitgeven, linken we naar dat bestand in onze office management database.

Wijzig de bestandsnaamHet probleem is dat, hoewel de bestandsindeling hetzelfde blijft, de bestandsnaam elke maand verandert. Vorige maand was het "kantoorkosten jan. 2017.xls", deze maand is het "kantoorkosten feb. 2017.xls".

Niet echt een verandering, ik weet zeker dat u het ermee eens zult zijn, maar tenzij we de moeite nemen om het bestand handmatig te hernoemen (nadat we het oude bestand hebben verplaatst of verwijderd), of het proces van de tabel opnieuw koppelen via de gekoppelde tafelmanager in Access.

Omdat we dit niet wilden doen, hebben we de volgende code gemaakt om het te doen - veel gemakkelijker, zoals ik zeker weet dat je zult zien:

Public Sub UpdateLink (tableName As String, newFileName As String)
    Dim objDB As Database
    Dim objTableDef As TableDef
    Dim newConnect as String
    
    Set objDB = CurrentDb
    Set objTableDef = objDB.TableDefs(tableName)

    'format of the connection string in our case, for example, is:
    ' Excel 5.0;HDR=YES;IMEX=2;DATABASE=File name including path and extension type
    newConnect = "Excel 5.0;HDR=YES;IMEX=2;DATABASE=" & newFileName
    objTableDef.Connect = newConnect
    objTableDef.RefreshLink

    Set objTableDef = Nothing
    Set objDB = Nothing
End Sub

De code uitleggen

Zoals u ziet, geven we de (gekoppelde) tabelnaam door, samen met de naam van het nieuwe bestand waaraan de tabel moet worden gekoppeld. De bestandsnaam moet het volledige pad naar het bestand bevatten. Een mogelijk aandachtspunt in het begin is het vinden van de juiste indeling voor de verbindingsreeks die in de variabele "newConnect" moet worden geplaatst. Hoewel er talloze bronnen zijn om de juiste indeling te vinden, is een van de eenvoudigste manieren die ik heb gevonden, simpelweg de verbindingsreeks van de huidige gekoppelde tabel te bekijken. Voeg hiervoor de volgende regel direct onder de regel "Set objTableDef = objDB.TableDefs(tableName)" toe:

Debug.Print (objTableDef.Connect)

Dat zal de bestaande verbindingsreeks afdrukken in het foutopsporings- / onmiddellijke venster van de code-editor (als dat niet al zichtbaar is, drukt u op CTRL-G vanuit het VBA-code-editorscherm om de zichtbaarheid van het onmiddellijke venster in te schakelen voordat u de code uitvoert.

Een waarschuwing

Zoals altijd, vergeet niet dat, hoewel het bovenstaande codefragment u kan helpen tijd te besparen wanneer u het bestand moet wijzigen waaraan een tabel is gekoppeld, het u niet kan helpen als u een Toegang tot bestandsschade, dus zorg ervoor dat u back-ups bewaart en weet waar u terecht kunt als al het andere niet lukt.

Auteur Introductie:

Mitchell Pond is een expert op het gebied van gegevensherstel in DataNumen, Inc., de wereldleider in technologieën voor gegevensherstel, waaronder herstel SQL-schade en Excel-herstelsoftwareproducten. Voor meer informatie bezoek www.datanumen.com

Reacties zijn gesloten.