Access VBA - Export table to CSV file - vba

I know many variations of this question were already asked but I kinda hit a dead end. I am trying to export a table with 2 columns into a .csv file. I tried it using similar question with this line of code.
Once without specification:
DoCmd.TransferText acExportDelim, , "+SapDebExp", "U:\Desktop\sapDeb1.csv", True
Once with specification:
DoCmd.TransferText acExportDelim, a11, "TSapDebExp", "U:\Desktop\sapDeb.csv", True
But no matter what I try all the columns are compressed into a single column in the created .csv
I also tried a workaround with this:
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel8, "TSapDebExp", "U:\Desktop\sapDeb.xlsx", True
FileCopy "U:\Desktop\sapDeb.xlsx", "U:\Desktop\sapDeb.csv"
This worked and the columns were separated in the end file but when you first open the .csv there comes a pop-up message saying "you sure you want to trust this file". This wouldn't be a problem since you only need to click it once but I want to import this file somewhere else (so no one will open the .csv file between the export and import). Is there another workaround or am I doing something wrong with the first method?

Related

Why do I get error 3073 in VBA when using "TransferSpreadsheet acImport" but not when using "TransferSpreadsheet acLink"

I just want to import a number of Excel sheets into MS Access to combine data from several months (each in one .xlsx file). Got it to work as long as I link the .xlsx files using
DoCmd.TransferSpreadsheet acLink, acSpreadsheetTypeExcel12, tableName, fileName, True, "A4:L23"
but not when using acImport option
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12, tableName, fileName, True, "A4:L23"
I get an 'error 3073 - Operation must use an updatable query' when I change the option from Link to Import.
As I want to add a column containing the month and year for which the data applies, I need to be able to add a variable which i cannot do using linked tables.
Thanks for your suggestions or an explanation of what I am doing wrong.
KR,
Martin
You probably need to use acSpreadsheetTypeExcel12Xml:
AcSpreadSheetType enumeration (Access)
Andre and Gustav,
thanks to both of you for your help!! Really appreciate it!
I thought I should test the code in a new Access DB and the code does work there. The issue seems to be caused when you switch between linking and importing in the same database.
In the new DB I can switch between importing and linking (acLink/acimport in the DoCmd.TransferSpreadsheet statement), but imported or linked tables must be deleted in Access BEFORE running the vba code. Maybe that is obvious to most of you, but was not to me :-)

Export Access Query WITHOUT Formatting

Relatively simple, but I can't seem to work it out. I want to export a query from access into a .csv (tab or comma delimited). When I do it manually through the wizard it works fine. But when I do it via vba, it comes complete with dash formatting that looks like the borders in the table!
I tried two methods and got the same results
DoCmd.OutputTo acOutputQuery, "Qry_GRADE", "MS-DOSText(*.txt)",_
"grade.csv", True, *ExportSpec*, , acExportQualityScreen
I used it with or without "ExportSpec", which is a specification I created when exporting manually.
This is the second method:
Dim testSQL As String
Dim qd As DAO.QueryDef
testSQL = "SELECT * FROM Qry_Grade"
Set qd = db.CreateQueryDef("tmpExport", testSQL)
DoCmd.TransferText acExportDelim, , "tmpExport",_
"C:\Users\Databoe\Documents\KidsTV\grade.csv"
db.QueryDefs.Delete "tmpExport"
This is a solution I've found which seems like overkill
And this is what the output looks like:
You can see it's not actually split any of the columns when opening the file in excel and that every second line is just a string of "-"'s
What about DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, myQueryName, myExportFileName, True for direct excel file export.
I tried your approaches, but I only get formated text with your first try DoCmd.OutputTo acOutputQuery, "Qry_GRADE", "MS-DOSText(*.txt)",_
"grade.csv", True, *ExportSpec*, , acExportQualityScreen which is as expected because it's a text export not csv.
With your second method I always get an excel compatible result. Maybe you have an error trap that hides an error and the first grade.csv is not overwritten. Use a different filename for the second method to prevent that.
Found a second trap. You don't specify full file path in first method, but in second. If C:\Users\Databoe\Documents\KidsTV is not your default document path, you have 2 grade.csv in different folders, but you maybe think that you only have one that gets overwritten.
I just ran into this problem myself, and found a great work around. It doesn't save as a .csv, but you can save as a comma delimited .txt file.
Use the export wizard on the External Data tab to export your query as a .txt file without formatting.
Once the file is exported you get a dialogue box asking if you want to save export steps. Click the box and save the export.
There is an action available in the Macro wizard called "Run Saved Import/Export." Select this action and choose your saved export from the dropdown menu.
Very frustrating that even now I cant seem to make Access export a simple csv file. I do not know why they think I need pretty formatting. Try this: open Excel, Click Get Data, From Database, From MicroSoft Access Database. Select the Access Database you wish to export from. Select the table/query we want saved as an csv. This will set up a link to this table. Once imported, save the Excel file to an csv file.

How to import csv file to Access with VBA code?

I have a csv file, that I need to import to Access using VBA.
I'm using the following code :
Call DoCmd.TransferText(acImportDelim, , TableName, SourceFile, HasFieldNames)
Where TableName, SourceFile and HasFieldNames are variables that store information about the file.
The import works but I have only one column imported in the table.
Does anyone have an idea please ?
The file is a csv with the separator ";" and has multiple columns.
Thank you.
"CSV" stands for "Comma Separated Values". Hence, the default import functionality looks for commas.
If you're using anything but commas, try this:
Start importing the file manually.
When you have specified the settings, just before clicking Finish, click Advanced...
Click "Save As" and specify a name (or accept the one proposed by Access).
Make note of the name you choose, let's say "Data Import Specification".
Click OK twice, then cancel the import.
Now use the import specification that you created in the code:
DoCmd.TransferText acImportDelim, "Data Import Specification", "Table1", "D:\Data.csv", False
You need to create (and use in .TransferText) an Import Specification where you specify the separator string. See e.g. these answers:
https://stackoverflow.com/a/3417067/3820271
https://stackoverflow.com/a/32806065/3820271

MS Access 2003 Error

I'm getting the following error when I try to run a macro that eventually uses the DoCmd.TransferText function. Here is the error below:
Cannot find object. Make sure the object exists and you spell its name and path correctly
I've used this method before to create a text file and add contents to it either from a table or a query.
Can someone correct me on this but doesn't the Transfer Text method create the file if it doesn't already exist?
Here is the code where i call it:
'Create Dispense File
DoCmd.TransferText acExportDelim, "DispenseExportSpec", "qryExport", DispenseFileName
Call Sleep(5000)
DoCmd.TransferText acExportDelim, "ExportDispenseCFSpec", "qryExportDispenseCF", ExportDispenseCFName
Call Sleep(5000)
(It fails on the first) This can't/shouldn't be a permissions issue as I have full read/write/edit abilities over the folder and its subfolders; it's not a path issue as I've verified multiple times, so what is the the problem here?
Access Version: MS Access 2003
Thanks
Try removing the spec argument and let it use the default? The documentation on that seems wonky. Just do a DoCmd.TransferText acExportDelim, , "qryExport", DispenseFileName

Modify Excel File and save as CSV using vba

I am working on populating a new application full of resident data. I have to export a list of residents for each property. Unfortunatly the new application has to have the residents imported 1 property at a time. This means im stuck loading 200+ properties by exporting an excel file, slightly modifing the data and then importing into the new application.
For each property that is exported I must remove a '-' from the first column and i have to remove all of the ',' throughout the entire document. I then change the formating on a date column to 'mm/dd/yyyy'. Then the document is saved as a CSV and can be imported.
I would like to write a script that can perform the updates to the excel file and save it to a csv. Please advise if this is worth my time. This is a one time load so it might be better to just power through.
Thank You
Possibly a little prematurely, as I'm not certain this is what you want to achieve, but you could try this (save first):
Sub replaceStuff()
ActiveSheet.Range("A:A").Replace "-", ""
ActiveSheet.Cells.Replace ",", ""
ThisWorkbook.SaveAs "doc", xlCSVWindows
End Sub