30. september 2003 - 14:03Der er
14 kommentarer og 1 løsning
Ændre navn på linket ark i excel fil
Jeg har en Acc2002 database som linker op til et ark i en excel fil - desværre bliver denne excel fil opdateret andetsteds fra så arkets navn ændrer sig et par gange i løbet af ugen - er der nogen måde hvorpå man kan ændre på navnet som der linkes til, eller "bare" linke til det første ark i xlsfilen uden at bruge ark-navnet ?
Navnet på arket ligger i MsysObjects men det kan jeg vist ikke få lov til at redigere i.
Jeg kan selvfølgelig også bare importere skidtet, men det vil jeg helst undgå.
Følgende virker under Access 97: (klippet ud af en større helhed)
Const LinkNavn="NavnPåExcelLink" Dim Tdf As TableDef
' Slet det gamle link CurrentDb.TableDefs.Delete LinkNavn
' Opret nyt link Set Tdf = CurrentDb.CreateTableDef(LinkNavn) ' Link navn With Tdf .SourceTableName = "COL$" ' Arknavn .Connect = "Excel 5.0;HDR=YES;IMEX=2;DATABASE=" & Filnavn ' Filnavn End With CurrentDb.TableDefs.Append Tdf
Fdata - det ser lovende ud, jeg havde selv overvejet at genbruge noget kode jeg har liggende fra en funktion som checker om linkede tabeller er intakte, men hvordan får jeg opsnappet ark-navnet, som jeg ikke kender på forhånd ? (SourceTableName = "COL$") - det er typisk en beskrivelse og trækningsdato.
Sub RelinkExcel() Const LinkNavn = "Sheet1" Const Filnavn = "C:\Temp\Book1.xls"
Dim ArkNavn As String Dim Tdf As TableDef
' Slet det gamle link On Error Resume Next CurrentDb.TableDefs.Delete LinkNavn On Error GoTo 0
' Find første ark ArkNavn = FindFørsteArk(Filnavn)
' Opret nyt link Set Tdf = CurrentDb.CreateTableDef(LinkNavn) ' Link navn With Tdf .SourceTableName = ArkNavn & "$" ' Arknavn .Connect = "Excel 5.0;HDR=YES;IMEX=2;DATABASE=" & Filnavn ' Filnavn End With CurrentDb.TableDefs.Append Tdf CurrentDb.TableDefs.Refresh
Set Tdf = Nothing End Sub
Function FindFørsteArk(Filnavn As String) As String Dim ExcelObj As Object Set ExcelObj = CreateObject("Excel.Application")
With ExcelObj .Workbooks.Open FileName:=Filnavn FindFørsteArk = .Sheets(1).Name .Quit End With
Jeg har nu afprøvet koden og det virker i princippet, og så alligevel ikke. Det lor.. system som sprøjter excel filen ud starter arknavnet med et mellemrum, der ikke kan accepteres af din kode. Jeg får nedenstående fejlmeddelse - det underlige er bare at når man linker manuelt så virker det. hvis jeg fjerner mellemrummet virker det også, men det kan det andet system ikke levere....nogen ideer ?
<Name> is not a valid name. Make sure that it does not include invalid characters or punctuation and that it is not too long. (Error 3125) The specified name does not follow standard naming conventions or is not a valid parameter or alias name. Check your entry to make sure you have not included invalid characters or punctuation and that the name is not too long.
Don't give up. Hvis det ikke giver problemer med andre brugere, kan du jo vælge at omdøbe arket:
Sub OmdøbFørsteArk(Filnavn As String, NytNavn as String) Dim ExcelObj As Object Set ExcelObj = CreateObject("Excel.Application")
With ExcelObj .Workbooks.Open FileName:=Filnavn .Sheets(1).Name = NytNavn .ActiveWorkbook.Save .Quit End With
Set ExcelObj = Nothing End Sub (ikke testet)
... og så kan du jo let åbne arket. Kombineret med tidligere fremsendte burde det spille.
Hvis du ikke kan omdøbe, ser det lidt sort ud. Løsningen virker jo som sådan; men jeg kan sagtens se dit problem. Jeg har ikke umiddelbart andre ideer.
Ja, jeg har i mellemtiden lavet en løsning a ala det sidste du foreslår - jeg kopierer filen til et tmp-dir, og omdøber første ark - rimeligt lallet, men det virker. Du får selvfølgelig point for din super indsats.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.