imprteren van variabele excelfile in access

Status
Niet open voor verdere reacties.

sis123

Gebruiker
Lid geworden
17 feb 2005
Berichten
284
Private Sub importdocmd_Click()

DoCmd.TransferSpreadsheet (acImport), acSpreadsheetTypeExcel97, "BAS", "c:\NM\030309.xls", True, "030309!a1:j9"


End Sub


' commando werkt perfect
' enkel de filenaam is hier vast
' nu dient er iedere dag een file te worden ingeladen en de naam van die file draagt de datum bv 030309
' hoe kan ik dit oplossen door een variabele erin te zetten ?
 
Als je altijd op een bepaalde dag een bepaald bestand wilt binnenhalen, dus bijvoorbeeld op 8-4-2009 het bestand van 7-4-2009, dan leg je de bestandsnaam eerst vast in een variabele.

Bijvoorbeeld:

sNaam=Format(Date-1;"ddmmyy"
sFile="c:\NM\" & sNaam & ".xls"

DoCmd.TransferSpreadsheet (acImport), acSpreadsheetTypeExcel97, "BAS", sFile, True, sNaam & "!a1:j9"

Stoei hier maar eens wat mee!

Michel
 
Als je altijd op een bepaalde dag een bepaald bestand wilt binnenhalen, dus bijvoorbeeld op 8-4-2009 het bestand van 7-4-2009, dan leg je de bestandsnaam eerst vast in een variabele.

Bijvoorbeeld:

sNaam=Format(Date-1;"ddmmyy"
sFile="c:\NM\" & sNaam & ".xls"

DoCmd.TransferSpreadsheet (acImport), acSpreadsheetTypeExcel97, "BAS", sFile, True, sNaam & "!a1:j9"

Stoei hier maar eens wat mee!

Michel

Dat werkt al prachtig, :thumb: ,
maar heb je nog een oplossing voor weekend en/of verlofdagen, dan staat de pc niet op ? :confused:


--------

Private Sub importdocmd_Click()

Dim Prompt, sNaam As String
Prompt = "Vul hieronder de bestandsnaam in"

sNaam = InputBox(Prompt)

' sNaam = Format(Date - 1, "ddmmyy")
sFile = "c:\NM\" & sNaam & ".xls"

DoCmd.TransferSpreadsheet (acImport), acSpreadsheetTypeExcel97, "BAS", sFile, True, sNaam & "!a1:j9"

End Sub

-----

Nu zou ik nog een check moeten hebben opdat de data niet dubbel ingelezen wordt
 
Laatst bewerkt:
Als je altijd op een bepaalde dag een bepaald bestand wilt binnenhalen, dus bijvoorbeeld op 8-4-2009 het bestand van 7-4-2009, dan leg je de bestandsnaam eerst vast in een variabele.

Bijvoorbeeld:

sNaam=Format(Date-1;"ddmmyy" moet zijn (Date-1,"ddmmyy")
sFile="c:\NM\" & sNaam & ".xls"

DoCmd.TransferSpreadsheet (acImport), acSpreadsheetTypeExcel97, "BAS", sFile, True, sNaam & "!a1:j9"

Stoei hier maar eens wat mee!

Michel
 
Voor het weekendprobleem gebruik ik de volgende constructie:

Code:
If(Weekday,Date,VbMonday)=1 Then 
     sNaam = Format(Date - 3, "ddmmyy")
Else
     sNaam = Format(Date - 1, "ddmmyy")
End If

Daarmee vang je geen feestdagen of zo af, maar die zijn ook bijna niet te programmeren, tenzij je een lijst maakt met dagen die je wilt uitzonderen. dat zou je bijvoorbeeld met een matrix kunnen doen:

Code:
Dim sLijst() as Date
Redim sLijst(3)
sLijst(1)=#1-1-2010#
Slijst(2)=#12-4-2009#
Slijst(3)=#26-12-2009#

Vervolgens kun je met een loopje (For x=LBound(sLijst) To UBound(sLijst) door de datums heenlopen die je wilt uitzonderen, en dan een andere stap laten uitvoeren.

Kun je weer verder?

Michel
 
Voor het weekendprobleem gebruik ik de volgende constructie:

Code:
If(Weekday,Date,VbMonday)=1 Then 
     sNaam = Format(Date - 3, "ddmmyy")
Else
     sNaam = Format(Date - 1, "ddmmyy")
End If

Daarmee vang je geen feestdagen of zo af, maar die zijn ook bijna niet te programmeren, tenzij je een lijst maakt met dagen die je wilt uitzonderen. dat zou je bijvoorbeeld met een matrix kunnen doen:

Code:
Dim sLijst() as Date
Redim sLijst(3)
sLijst(1)=#1-1-2010#
Slijst(2)=#12-4-2009#
Slijst(3)=#26-12-2009#

Vervolgens kun je met een loopje (For x=LBound(sLijst) To UBound(sLijst) door de datums heenlopen die je wilt uitzonderen, en dan een andere stap laten uitvoeren.

Kun je weer verder?

Michel

Ik weet wat je bedoet maar het probleem ligt meer hierin :

- 1 persoon doet de bijwerking (deze kan ook in verlof zijn, ziek vallen, ...), dus filenaam via inputbox ok

- maar er moet een beveiliging en markering (zichtbaar) opdat een file nooit dubbel ingelezen kan worden
 
Dat laatste moet je regelen op tabelniveau, door bijvoorbeeld een sleutel te maken op de juiste velden. Als je in je tabel een autonummering gebruikt als sleutel ben je dus enigszins de sigaar, omdat je daar niets aan hebt als slot op de deur.
Wat ik zelf meestal doe, is importeren in een tijdelijke tabel met een vaste naam, en met behulp van een aparte toevoegquery de nieuwe records toevoegen aan de hoofdtabel. Je hebt dan altijd controle over de importgegevens, en in je query kun je zonder VBA te gebruiken heel goed controleren wat je importeert, en dat je uiteraard niet dubbel importeert.
Als je een voorbeeldje kan posten, kan ik je wat beter helpen, want ik kan me voorstellen dat dit verhaal nog een beetje vaag is...

Michel
 
Ik heb je voorbeeld eens bekeken, en je hebt inderdaad een sleutelveld met automnummering. Die sleutel zou ik vervangen door een combinatie van Datum, KPL en Gemaakt, eventueel ook nog met Temaken, als je daar ook nog variatie in wilt uitsluiten. Met die combinatie kun je je Excelgegevens niet dubbel importeren, omdat je dan een sleutelconflict krijgt. En dat is precies wat je wilt: voorkomen dat er dubbele gegevens worden geïmporteerd.

Als het om daggegevens van personen gaat, en daar lijkt het op, dan zou je ook handmatig een sleutel kunnen genereren uit bijvoorbeeld de datum+code (uit KPL gehaald). Als je voor KPL een aparte tabel hebt, en dat zou ik wel aanraden, dan is dat vrij simpel samen te stellen. Met zo'n sleutel kun je per KPL ook maar één record voor één dag invoeren, en je sleutel beslaat dan maar één veld.

Zelf zou ik de import van gegevens nooit rechtstreeks in de doeltabel importeren, ook al met het oog op het importeren van dubbele records. Ik importeer daarom altijd in een tijdelijke importtabel, en gebruik vervolgens een toevoegquery om de importgegevens, al dan niet bijgewerkt, te importeren. Met behulp van een toevoequery en een goede sleutel, zoals ik hierboven heb aangegevens, kun je ook heel eenvoudig een check inbouwen op je import.

E.e.a. heb ik in bijgaand voorbeeldje hopelijk wat verduidelijkt!

Michel
 

Bijlagen

Laatst bewerkt:
E.e.a. heb ik in bijgaand voorbeeldje hopelijk wat verduidelijkt!

Michel

Ok, tof, heb de opzet begrepen en 't heeft me verdergeholpen, bedankt. :thumb:

Nu zou ik graag in de plaats van de melding met het sleutelconfict een msgbox weergeven.

Vervolgens zou er ook een check moeten zijn dat alle datums wel ingelezen zijn.
 
Bedoel je zo iets?

Michel
 

Bijlagen

Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan