Save As

Status
Niet open voor verdere reacties.

roortman

Gebruiker
Lid geworden
4 jul 2005
Berichten
24
Simpel Acces vraagje....

Heren,

Ik ben niet zo'n MS Access ster, sterker nog ik vind het maar een kl*** programma.
MAar ik moet even iets aanpassen in een database die management hier gebruikt en ik kom er even niet uit.
Misschien moet het wel met VBA, maar ook hiermee ben ik voor Access geen held.

Ik run een macro, daar komt een bepaalde selectiequery uit voort die opgeslagen moet worden op een locatie.
Nu kan ik niet vinden waar ik dat kan instellen, ik heb wel een 'save' in de macro zitten als optie, maar dan kun je weer geen locatie instellen waar dat het opgeslagen moet worden.

Nog mooier zou zijn als ik in VBA (in excell is dit een kaasje), de selectiequery zou kunnen laten opslaan op een locatie met altijd bestandsnaam "Nieuwe Actiefile dd-mm" (dus met de huidige dag en maand).
In excell zou het er ongeveer zo uitzien:

Dim MyDay, MyMonth
MyDay = Day(Now())
MyMonth = Month(Now())

With ActiveSheet
ActiveWorkbook.SaveAs ("C:\Documents and Settings\robboort\Desktop\nieuwe actiefile" & " " & MyDay & "-" & MyMonth), .xls
End With

Maar nu nog in Access...

Hopelijk kan iemand mij snel helpen :D thankx:thumb:
 
Laatst bewerkt:
Hier heb je een voorbeeldje.

Private Sub cmd_Exporteer_Click()
On Error GoTo Err_cmd_Exporteer_Click

DoCmd.Hourglass True

DoCmd.TransferSpreadsheet acExport, 8, "qry_TEST", "C:\test.xls", True, ""

DoCmd.Hourglass False

MsgBox "Bestand aangemaakt en gegevens geexporteerd. ", vbOKOnly + vbInformation, "Mededeling"

Exit_cmd_Exporteer_Click:
Exit Sub

Err_cmd_Exporteer_Click:
DoCmd.Hourglass False
MsgBox Err.Description
Resume Exit_cmd_Exporteer_Click

End Sub
 
Ok, dit ga ik morgen maar eens proberen lijkt me er goed uitzien.
Weet je toevallig of je in Access net zoals in Excell ook dingen hebt als Date() / Now() etc...dit ivm de naamgeving van het te exporteren bestand.
 
Ja die heb je.

Date() // datum
Now() // datum+tijd

Format() // formaat aangeven, dd-mm-jjjj enz

Zoek eens in de help van Access voor meer voorbeelden, opties enz.


Suc6 verder.

Gr,

Remco
 
Thankx, het lijkt te werken als ik hem stapsgewijs uitvoer.
Hieronder de code:
Public Sub Opslaan_File()
Dim MyDate, MyMonth, MyMonthName, MySheetNumber, MyYear
MyDate = Date 'Datum in dd-mm-jjjj
MyMonth = Month(MyDate) 'Maand in mm
MyMonthName = MonthName(MyMonth) 'Maand in Long
MyYear = Year(Now())
MyDay = Day(Now())
On Error GoTo Errorhandler
DoCmd.Hourglass True
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel8, _
"50 run actie for backorder > 0", "O:\#Borstlap Tilburg\Management Information\Nieuwe Actiefile" & " " & MyMonthName & "\" & "Nieuwe actiefile" & " " & MyDay & "-" & MyMonth & ".xls"
DoCmd.Hourglass False
MsgBox "Bestand is geexporteerd.", vbOKOnly + vbInformation, "Mededeling"

Exit_Opslaan:
Exit Sub

Errorhandler:
DoCmd.Hourglass False
MsgBox Err.Description
Resume Exit_Opslaan

End Sub


Nu nog 1, waarschijnlijk domme vraag.

Als ik deze code wil laten draaien in mijn macro dan kies ik 'RunCode' en wil ik via Expression Builder de betreffende Sub openen. Maar dit doet ie niet.
Nu las ik de help file, en ik zag dat het perse een Function moet zijn die het script aanroept.
Dus heb ik een simpele Public Function gemaakt:

Public Function run_opslaan()
Opslaan_File
End Function

maar als ik dit doe krijg ik een foutmelding:
Compile error:
Expected variable or procedure, not module.

Wat moet ik hiermee? Hoe krijg ik de VBA code draaiend via een macro?
 
Probeer de code uit de public sub opslaan_file()

rechtstreeks te plaatsen in de function.
 
Een function geeft altijd een type variabele terug.

Het zal dus zoiets moeten zijn als:
public function MyFunction() as boolean

MyFunction = True
End Function


Grtz,
 
Ok....het werk in principe allemaal prima nu..
Nu loop ik tegen 1 probleempje aan.

Zoals het nu is gaat het goed zolang de map bestaat.
Maar op het moment dat de map niet bestaat moet hij een nieuwe folder maken.
Dit lukt me ook nog wel.

Maar het kan ook zo zijn dat het bestand bijv. al bestaand. Dan overschrijft hij hem niet, maar voegt hij een extra werkblad in de excell workbook toe...
Eigenlijk zou Access het bestaande bestand eerst moeten verwijderen, en dan pas de nieuwe exporteren.
Iemand???

Dit is de huidige code:

Public Sub Opslaan()
Dim MyDate, MyMonth, MyMonthName, MySheetNumber, MyYear
MyDate = Date 'Datum in dd-mm-jjjj
MyMonth = Format(Date, "mm") 'Maand in mm
MyMonthName = MonthName(MyMonth) 'Maand in Long
MyYear = Year(Now())
MyDay = Day(Now())

On Error GoTo Errorhandler
DoCmd.Hourglass True

DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel8, _
"50 run actie for backorder > 0", "O:\#Borstlap Tilburg\Management Information\Nieuwe Actiefile" & " " & MyMonthName & "\" & "Nieuwe actiefile" & " " & MyDay & "-" & MyMonth & ".xls"

DoCmd.Hourglass False
MsgBox "Bestand is geexporteerd.", vbOKOnly + vbInformation, "Mededeling"

Exit_Opslaan:
Exit Sub

Errorhandler:
DoCmd.Hourglass False
MsgBox Err.Description
Resume Exit_Opslaan

End Sub

Volgens mij moet de IF functie die ik nodig heb, zoiets worden:

If folderexists Then
If BESTAND BESTAAT AL = TRUE Then
DELETEFILE
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel8, _
"50 run actie for backorder > 0", "O:\#Borstlap Tilburg\Management Information\Nieuwe Actiefile" & " " & MyMonthName & "\" & "Nieuwe actiefile" & " " & MyDay & "-" & MyMonth & ".xls"
Else
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel8, _
"50 run actie for backorder > 0", "O:\#Borstlap Tilburg\Management Information\Nieuwe Actiefile" & " " & MyMonthName & "\" & "Nieuwe actiefile" & " " & MyDay & "-" & MyMonth & ".xls"
End If
Else
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.CreateFolder("O:\#Borstlap Tilburg\Management Information\Nieuwe Actiefile" & " " & MyMonthName & "\")
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel8, _
"50 run actie for backorder > 0", "O:\#Borstlap Tilburg\Management Information\Nieuwe Actiefile" & " " & MyMonthName & "\" & "Nieuwe actiefile" & " " & MyDay & "-" & MyMonth & ".xls"
End If

Wie kan me helpen???
 
Volgens mij heb ik het al wel redelijk afgevangen zo...
Wie controleert het even voor de zekerheid?

THANKX

Public Sub Opslaan()
Dim MyDate, MyMonth, MyMonthName, MySheetNumber, MyYear

MyDate = Date 'Datum in dd-mm-jjjj
MyMonth = Format(Date, "mm") 'Maand in mm
MyMonthName = MonthName(MyMonth) 'Maand in Long
MyYear = Year(Now())
MyDay = Day(Now())

On Error GoTo Errorhandler
DoCmd.Hourglass True

On Error Resume Next
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.CreateFolder("O:\#Borstlap Tilburg\Management Information\Nieuwe Actiefile" & " " & MyMonthName & "\")

Kill ("O:\#Borstlap Tilburg\Management Information\Nieuwe Actiefile" & " " & MyMonthName & "\" & "Nieuwe actiefile" & " " & MyDay & "-" & MyMonth & ".xls")

DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel8, _
"50 run actie for backorder > 0", "O:\#Borstlap Tilburg\Management Information\Nieuwe Actiefile" & " " & MyMonthName & "\" & "Nieuwe actiefile" & " " & MyDay & "-" & MyMonth & ".xls"

DoCmd.Hourglass False

MsgBox "Bestand is geexporteerd.", vbOKOnly +
vbInformation, "Mededeling"

Exit_Opslaan:
Exit Sub

Errorhandler:
DoCmd.Hourglass False
MsgBox Err.Description
Resume Exit_Opslaan

End Sub
 
Je doet het nu niet met een controle, maar met een bikkelharde overschrijving. Als dat is wat je wilt is het volgens mij OK.

Puntje van aandacht... Je hebt nu de verwijzing naar de map waarin je de export wil hebben hard in de code staan. Dat is niet heel erg onderhoudsvriendelijk. Mooier is om vanuit de map waarind e applicatie staat relatief te werken of een parameter ergens in een tabelletje te zetten waar de lokatie eventueel kan worden aangepast.


Grtz,
 
Daar heb je wel gelijk in ja.
Maar aangezien deze lokatie altijd op dezelfde plek zal blijven staan is dit geen probleem.
Dat geldt ook voor het keihard verwijderen van evt. oude bestand etc. Dat is geen probleem, en het is de meest korte makkelijke oplossing...

Tenzij jij veel betere ideeen hebt?
 
Nu loop ik toch nog tegen 1 ding aan.
In principe werkt het allemaal perfect, maar na het exporteren van het bestand slaat hij blijkbaar toch een beetje aparte manier de "format" op van de cells.
Want als ik vervolgens de excell sheet open via een macro in een excell sheet, dan krijg ik op een gegeven moment de fout dat er een mismatch is in type.

Terwijl als ik het via de oude database doe, waarin de query nog naar mezelf gemaild werd. Dan sloeg ik de gemailde excel sheet op en dan deed ik hem ook via een macro importeren in een excel sheet. Dan doet hij het wel...

Heeft iemand enig idee wat de instellingen zijn waarmee access een sheet mailt, zodat ik die instellingen kan gebruiken met het exporteren van het bestand?

Thankx :thumb:
 
Volgens mij wordt er gekeken naar het eerste record dat de query teruggeeft. Aan de hand daarvan wordt het datatype voor de hele kolom bepaald. Als dat niet goed is voor de overige records gaat dat dus mis.

Vlgens mij (maar pin me er niet op vast) kun je met de transferspreadsheet ook een templatefile meegeven. Als je die maakt met de juiste opmaak gaat het dan wel goed.


Grtz,
 
Je bent geweldig, geen template overigens, dit kan niet met een XLS file.

MAar ik heb wel de docmd.transferobject....... veranderd in onderstaande...

DoCmd.OutputTo acOutputQuery, "50 run actie for backorder > 0", acFormatXLS, "O:\#Borstlap Tilburg\Management Information\Nieuwe Actiefile" & " " & MyMonthName & "\" & "Nieuwe actiefile" & " " & MyDay & "-" & MyMonth & ".xls"

Nu werkt hij perfect.
 
Hoe kan ik het bestand opslaan met de maand eerder

Ik heb het bovenstaande overgenomen om de bestanden goed op te slaan, echter ik wil de maand 1 terug hebben.

Bijv. als ik hem vandaag zou runnen moet hij de opslaan onder de maand mei.

kan iemand mij helpen.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan