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.
Related
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?
I am trying to automate the adding of new text files, which all have the same (known) layout.
The columns are separated using tabs (the TAB button). My question is, is it possible to do this in VBA? Like, in the access wizard for importing text files?
I am using the DoCmd.TransferText method in VBA
You'll need to go through the wizard once to make your specification file. TO do this import your text file like normal but before you get too deep into the wizard click on the bottom left, the "Advanced..." button. This is where you make your spec file.
Make ll these columns match your input file, data types and all. Be sure to select the {tab} field delimiter and the appropriate text qualifier if you are using one.
Save your spec (which can later be edited by coming back to this same screen and clicking Specs... then saving over your old one)
Now you can use in VBA like this
DoCmd.TransferText acImportDelim, "your spec name", "destination table name", sourceFilePath
There is a parameter HasFieldNames that you'll have to decide if it is true or false based on your file.
With the import wizard the downside is that for even the slightest change in file format, you'll have to click through all those steps yet again to get the import working.
Check out #Remou's answer in ms Access import table from file in a query for a way to do it in straight SQL. I am actually using the same method in a project of mine. I use something like this (see my link for the details):
insert into MyTable (column-list...)
select (column-list...)
from [data-source-specifications].[file-name]
any-other-clauses...;
Just one caveat. If you put this SQL syntax into a normal Access query object, there's a good chance that Access will mangle it to the point where it won't even be able to open the query object. So compose and save the query in a text file while you try it out in Access. Once the query is tested and working, save it in a VBA subroutine so that Access will run it exactly as is, like so:
sub MyTableImport()
sqlStr = " insert into MyTable (column-list) " ' leave a space at the
sqlStr = sqlStr & "select (column-list...) " ' end of each line of the string
sqlStr = sqlStr & "from [data-source-specifications].[file-name] "
sqlStr = sqlStr & "any-other-clauses... ;"
DoCmd.RunSQL sqlStr
end sub
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
I'm using 'Saved exports' to update an application in Access. Until recent it has been working fine because every user was using the same location. Since Windows 8, this location is protected and some have relocated the target file. An input box asks for the path to this new location.
Now I'm looking for a way to introduce this path into the Saved Export or a VBA-way to export forms and queries to the target file.
My research showed me a lot of export of data, but never the export of components.
If you really want to continue using Saved Exports to transfer the database objects then you'll have to tweak the XML in the ImportExportSpecification object as described in the answers to the question here:
How to specify a different file path for a saved Excel import
However, that approach offers little benefit in your case because you don't need the extra features of a Saved Import/Export (column mapping, date formats, character sets, etc.). It would be much more straightforward to use the VBA DoCmd.TransferDatabase method like this
targetDbSpec = "C:\Users\Public\SomeOtherDb.accdb"
DoCmd.TransferDatabase _
TransferType:=acExport, _
DatabaseType:="Microsoft Access", _
DatabaseName:=targetDbSpec, _
ObjectType:=acQuery, _
Source:="ClientQuery", _
Destination:="ExportedQuery"
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