07. april 2011 - 09:15Der er
12 kommentarer og 1 løsning
excel export fra access hvor excel er exporteret med trackchange
har behov for at ved tryk på en knap at kunne eksportere en tabel til en excelfil, men hvor denne excelfil er gemt med tracktrance funktionen aktiveret, således at hvis en bruger efterfølgende åbner denne excelfil og laver ændringer er det highlightet i excel.
nb. jeg importerer den eksporterede fil ind i access igen i en ny tabel der er magen til exporttabellen, så hvis der findes en access funktion til dette inde i access er denne løsning også interessant.
Teknologi, AI og forretning er i centrum på Computerworlds Cloud og AI Festival i København d. 18. og 19. september. Se hele programmet for den store konference om strategisk brug af Cloud og AI på: www.cloud-festival.dk
Hvad er senariet for beslutte synkronisering af access tabelindhold med ændringer i excel filer? visuel backtrack inspektion? Man kunne gemme pathnames og have en skjult formular til at køre det automatisk styret af ændringer i last modification time
Først vil jeg lige have lov at påpege at det er en mega ineffektiv opdaterings metode , at en mindre ændring, sker ved at slette alt og derefter genoprette - som der er nødvendigt når excel bruges som datafangst metode. Anyway:
Følgene er blot et eksempel på problematikken
Vi skal kunne gemme file lastmodified tidspunkt givet tabel: 'ExcelFileAtt' med netop 1 post og feltindhold
lastModf <intet til start> fRef c:\test.xsl tblN E
Bestem selv hvad der skal stå i fRef og tblN, men tabellen skal findes (her E)
For at få adgang til global data, uden initialisering - dette skal i et standardmodul:
Const fTbl = "ExcelFileAtt"
Function exfileN(): exfileN = DLookup("fRef", fTbl): End Function Function exTblN(): exTblN = DLookup("tblN", fTbl): End Function Function exfileAttTblN(): exfileAttTblN = fTbl: End Function Function exFLastModf() exFLastModf = CreateObject("Scripting.FileSystemObject").GetFile(exfileN()).dateLastModified End Function
Function exLogOfLastModified(): exLogOfLastModified = DLookup("lastModF", fTbl): End Function
Sub exStartLog(): DoCmd.OpenForm "PoolEFC", , , , , acHidden: End Sub Sub exStopLog(): DoCmd.Close acForm, "PoolEFC": End Sub
--------
Hændelsen til knappen hvis aktivering gemmer filen i et excel ark:
Private Sub gemExcel_Click() DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, exTblN(), exfileN() CurrentDb.Execute "update " & exfileAttTblN() & " set lastModf='" & exFLastModf() & "'" End Sub
------------
Ny formular: PoolEFC - lav den
egenskabsark hændelser->timerinterval=5000
der testes med 5 sekunds opdatering
Private Sub Form_Timer() Dim tmpEfile
tmpEfile = Split(exfileN(), ".")(0) & ".tmp.xls" If Len(Dir(exfileN())) Then If exFLastModf() <> exLogOfLastModified() Then ' HACK prevent file access denied tmpEfile = Split(exfileN(), ".")(0) & ".tmp.xls" Shell "cmd /c copy " & exfileN() & " " & tmpEfile CurrentDb.Execute "delete from " & exTblN() DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, exTblN(), tmpEfile, True End If: End If End Sub
------------------
Først sikres det at der er en excelfil ved tryk på gem knappen
Herefter startes 'logning til tabel' ved kald af exStartLog()
Prøv at åbne excelfil og ændre - gemme Efter højest timerinterval/1000 sekunder er ændringen skrevet til tabel
-----------------
Til slut: der er et graverende hack - kopi til temp fil for at få adgang til en excel fil der stadig kan være åben af excel (en anden bruger) - det bør laves mere elegant med testning om det er tilfælde og venten på at excel lukker filen.
Synes godt om
Slettet bruger
07. april 2011 - 18:46#5
rettelse: Private Sub Form_Timer() Dim tmpEfile
tmpEfile = Split(exfileN(), ".")(0) & ".tmp.xls" If Len(Dir(exfileN())) Then If exFLastModf() <> exLogOfLastModified() Then ' HACK prevent file access denied tmpEfile = Split(exfileN(), ".")(0) & ".tmp.xls" Shell "cmd /c copy " & exfileN() & " " & tmpEfile CurrentDb.Execute "delete from " & exTblN() DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, exTblN(), tmpEfile, True CurrentDb.Execute "update " & exfileAttTblN() & " set lastModf='" & exFLastModf() & "'" End If: End If End Sub
Synes godt om
Slettet bruger
07. april 2011 - 18:53#6
og endnu en rettelse:
Private Sub Form_Timer() Dim tmpEfile
tmpEfile = Split(exfileN(), ".")(0) & ".tmp.xls" If Len(Dir(exfileN())) Then If StrComp(exLogOfLastModified(), exFLastModf()) Then ' prevent file access denied Debug.Print "saving with time:" & exFLastModf tmpEfile = Split(exfileN(), ".")(0) & ".tmp.xls" Shell "cmd /c copy " & exfileN() & " " & tmpEfile CurrentDb.Execute "delete from " & exTblN() DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, exTblN(), tmpEfile, True CurrentDb.Execute "update " & exfileAttTblN() & " set lastModf='" & exFLastModf() & "'" End If: End If End Sub
Synes godt om
Slettet bruger
07. april 2011 - 22:12#7
Sidste rettelse: Private Sub Form_Timer() If Len(Dir(exfileN)) Then If StrComp(exLogOfLastModified, exFLastModf) <> 0 And availExFile Then Debug.Print "Last modf time:" & exFLastModf CurrentDb.Execute "delete from " & exTblN DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, exTblN, exfileN, True CurrentDb.Execute "update " & exfileAttTblN & " set lastModf='" & exFLastModf & "'" End If: End If End Sub
Function availExFile() On Error GoTo fExit Dim hndl hndl = FreeFile() Open exfileN For Binary Access Read Write Lock Read Write As hndl Close hndl availExFile = True fExit: err.Clear End Function
Når man excelere i at benytte programel til at slette data, skal man edermame være sikker på at man har et perfekt backupsystem, medmindre data er stort set værdiløse.
Synes godt om
Slettet bruger
07. april 2011 - 23:32#9
sifuentes: påpegning sikre konkrete implementations issues, er sikkert velkomne. Har du prøvet mit eksempel?
har været syg i længere tid derfor har der ikke været aktivitet fra min side. Er nu klar igen så venligst blot besvar så giver jeg point, da sagen ikke længere er aktuel sorry...
Synes godt om
Ny brugerNybegynder
Din løsning...
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.