knop in formulier 'deze gegevens exporteren naar Excel'

Status
Niet open voor verdere reacties.

Bavaria

Gebruiker
Lid geworden
14 okt 2004
Berichten
126
Ik heb een formulier maar nu zou ik deze gegevens graag ook in Excel willen gebruiken (en eigenlijk ook in Word voor een direct mailing etc). Is het mogelijk om een knop te maken die er voor zorgt dat het huidige formulier naar Excel geëxporteerd wordt?

Wederom bedankt!
 
Met een stukje VBA krijg je het wel voor elkaar:

Code:
Dim db As Database
Dim cn As ADODB.Connection
Dim strSQL As String
Dim pad As String

    Set cn = New ADODB.Connection
    Set db = CurrentDb()
    pad = CurrentProject.Path
    If Right(pad, 1) <> "\" Then pad = pad & "\"
    strSQL = "SELECT * INTO Temp " & vbCrLf
    strSQL = strSQL & "FROM `[Query of tabel] " & vbCrLf
    strSQL = strSQL & "WHERE ([Sleutelveld]= " & Me.Sleutelveld] & ");"

    On Error Resume Next
    Kill pad & "\Test.xls"
    DoCmd.SetWarnings False
    DoCmd.RunSQL strSQL
    DoCmd.SetWarnings True
    
	On Error GoTo 0
	DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "Temp", pad & "Test.xls", True

Omdat Access bij TransfersSpreadsheet de hele inhoud van tabel of query exporteert, ongeacht of je een filter gebruikt of niet, moet je eerst een tijdelijke tabel maken.
Dat doe je met Select Into. Uiteraard geef je hier de juiste tabel of query, en het juiste veld op...
Vervolgens maak je de tijdelijke tabel aan, waarbij de Setwarnings uit zet, om de boodschappen te onderdrukken.
Ik maak in het voorbeeld een test.xls aan in de map van de db, uiteraard kun je het pad aanpassen.
Met Kill wordt het bestaande excelletje gewist, waarna met TransferSpreadsheet de tabel met het enkele record wordt geëxporteerd.
 
Alvast bedankt!

Als ik dit onder een knop zet zegt Access dat het ] teken na & Me.naam] een ongeldig teken is...

strSQL = strSQL & "WHERE ([naam]= " & Me.naam] & ");"

Zou er nog iets bij moeten of iets anders moeten staan?

Gr!
 
Ik vermoed dat je veld Naam een tekstveld is, en geen numeriek veld.
In dat geval wordt de code:

strSQL = strSQL & "WHERE ([naam]= '" & Me.naam] & "');"

Beetje lastig te zien, maar er zijn enkele quootjes (') bijgekomen...
Meestal gebruik je een sleutel(getal)veld om te filteren, werkt vaak beter...
 
Ik laat hem nu filteren op het Id veld maar dan blijft dezelfde fout bestaan...

Gr
 
Juist ja dat ding ontbrak :rolleyes:

Maar als ik de knop nu gebruik krijg ik de melding dat ik een gegevenstype niet heb gedefinieerd...

Ik gebruik de code zoals hieronder weergegeven. Tabel1 is de tabel waar de gegevens uit gekopieerd moeten worden. Wat zou ik moeten veranderen?

Private Sub Knop9_Click()

Dim db As Database
Dim cn As ADODB.Connection
Dim strSQL As String
Dim pad As String

Set cn = New ADODB.Connection
Set db = CurrentDb()
pad = CurrentProject.Path
If Right(pad, 1) <> "\" Then pad = pad & "\"
strSQL = "SELECT * INTO Temp " & vbCrLf
strSQL = strSQL & "FROM `[Tabel1] " & vbCrLf
strSQL = strSQL & "WHERE ([Id]= " & Me.[Id] & ");"

On Error Resume Next
Kill pad & "\Test.xls"
DoCmd.SetWarnings False
DoCmd.RunSQL strSQL
DoCmd.SetWarnings True

On Error GoTo 0
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "Temp", pad & "Test.xls", True
End Sub


Zoals je ziet niet echt thuis in vba:confused: maar wederom bedankt!

Gr
 
Het zou kunnen, dat je de bibliotheken niet allemaal hebt draaien.
Daarvoor moet je naar het VBA scherm (Alt+F11), naar <Extra>, <Verwijzingen>.

In bijgaand plaatje staat welke bibliotheken je aan moet vinken, en ook de volgorde waarin ze moeten worden geladen.

Als je e.e.a. hebt aangepast, op <Bewaren> klikken, en de database opnieuw openen. (Voor de zekerheid).
 

Bijlagen

  • Verwijzingen.jpg
    Verwijzingen.jpg
    41,6 KB · Weergaven: 94
Thanx!

Echter wanneer ik dit probeer te veranderen krijg ik de melding:

De opgegeven naam is strijdig met een bestaand project/module/objectbibliotheek.

Nu heb ik een nieuwe database gemaakt zonder er iets in te maken maar dan blijft deze melding... Waar kan dat mee te maken hebben?

Gr!
 
Heb het opgelost :) mocht de bibliotheken niet verschuiven...

Maar als ik nu op de knop klik gebeurt er niets, hij geeft ook geen foutmelding. Waar zou dat aan kunnen liggen?

Gr.
 
Owja ik heb de database een keer gekopieerd waardoor ie in een andere map dan de Excel file was gekomen... Nu staan ze weer bij elkaar maar krijg ik de foutmelding:

Access kan het object Temp niet vinden (in de laatste regel van de code).

Ik ga er vanuit dat hiermee de Temp tabel wordt bedoeld? Deze heb ik aangemaakt dus dan zou het moeten werken toch?

Gr.
 
Als de procedure stopt, en je hebt de uitvoering stopgezet, bestaat de tabel Temp dan? En zitten er records in? Want dat zijn twee voorwaarden om te kunnen exporteren.
Eventueel kun je het exporteren overslaan als er geen records in de tabel zitten, met een If-lus.
 
De tabel Temp heb ik zelf aangemaakt maar dit is verder gewoon een lege tabel omdat de te exporteren gegevens verschillend kunnen zijn...

Maar hoe kan ik de procedure starten, stopzetten en zien of er gegevens in de tabel komen? Als ik op de knop in het formulier klik gebeurd er niets, geen foutmelding maar ook de tabel Temp wordt dan niet gevuld.

Gr :thumb:
 
De tabel Temp zou je om te beginnen weg kunnen gooien, want als het goed is wordt die aangemaakt door de procedure. Hierbij wordt de oude Temp vervangen, dus je hebt weinig aan een lege Temp.
Als de tabel niet wordt aangemaakt, is er dus een probleem. Probeer dat dus eerst: de Temp die je zelf hebt gemaakt weggooien, en controleren of er een nieuwe wordt gemaakt met de juiste gegevens.
 
Nu ik de tabel Temp heb verwijderd krijg ik wel een foutmelding, Access kan Temp niet vinden.

Als suggestie wordt de laatste regel van de code geel gemaakt

DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "Temp", pad & "Test.xls", True
 
Dat hij stopt bij de laatste regel, betekent dat de tabel blijkbaar wel wordt aangemaakt. Dus is de vraag: klopt dat, en staat er wat in?

Overigens constateerde ik in de geplakte code wel een tekstfoutje:

Set cn = New ADODB.Connection
Set db = CurrentDb()
pad = CurrentProject.Path
If Right(pad, 1) <> "\" Then pad = pad & "\"
strSQL = "SELECT * INTO Temp " & vbCrLf
strSQL = strSQL & "FROM [Tabel1] " & vbCrLf
strSQL = strSQL & "WHERE ([Id]= " & Me.[Id] & ");"

Voor [Tabel] stond een quootje: '
En die mag daar dus niet staan....
 
Laatst bewerkt:
Vervelend zo'n quootje, nu werkt de code wel :D thanx!

Maar had nog wel een vraag, is het mogelijk om de excel file automatisch te openen nadat de gegevens erin worden geexporteerd?
 
Dat kan je met het commando FollowHyperlink het makkelijkst doen. Anders moet je een Excel bibliotheek toevoegen, en het via VBA regelen, wat meer werk is, denk ik
De juiste syntax weet ik niet zo uit mijn hoofdd, maar die staat wel in de help uitgelegd.
 
Is het ook mogelijk om de gegevens naar een bewerkte/opgemaakte excel file te laten sturen?

Als ik Test.xls aanpas worden deze bewerkingen niet weergegeven wanneer de excel file vanuit access geopend wordt.

Thanx again!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan