Modules & VBA :: Preserving Characters From Excel Import To Access
Feb 26, 2015
The excel worksheet that I am importing into my database has some formula's, for an example =2+2. I am importing this worksheets, then checking fields against the main table, then exporting back to Excel. But I want to be able to keep the "=" signs when I import to remain so that when I export back into Excel the columns with the formulas will already be there.
In importing data from Excel 2002 to Access 2000, I have several columns of text data that has more than 255 characters; however, importing into Access does not give me the option to redefine those data fields from "Text" to "Memo". As a result, Access truncates the data to 255 characters.
Is there anyway to work around this issue by still using the Excel file? I have saved the Excel file as an HTML file and this seems to work, but it is an extra step that I would like to avoid.
Two Solutions to address moving an Access Memo field into Excel when string has > 255 characters. All my 'reports' use Excel VBA (Access Reports are not used). The Excel reports can have 40,000 records. Speed to create the report can be an issue.
Describing 2 Solutions below to address moving Access memo fields with > 255 characters into Excel.After running this code
Code: 720 ObjXL.DisplayAlerts = False ObjXL.Columns("X:X").Select ObjXL.Selection.NumberFormat = "@" ' set column to Text 730 ObjXL.Worksheets(intWorksheetNum).Cells(intRowPos, 1).CopyFromRecordset rsNutsAndBolts
The Comments column are limited to 255 characters. So, the CopyFromRecordset (recordsetvariable) creates the 255 character limitation.
The reason? The 255 character limit is because CopyFromRecordset sutomatically uses the Characters property of the Range object. The 255 limit would not be there if the Cell Value property is used to assign the string to that cell.
Dim sRx as String ' String Prescription sRx = "String with > 255 characters ... you fill in the rest ...." Cells(1, 1).Value = sRx ' Cell's Value property assignment can be very large
Solution 1:
The record set is still in memory. By using a loop, a cursor can start with record 1 (memo column) and assign that value to the Excel row / column using the .value as shown above. Basically, this moves one memo field at a time, record by record. e.g. Read First recordset in Access, copy to variable, assign value to Excel row/column Then move next on each Access and Excel.
Solution 2:
An Access Memo filed [RxNotes] can have up to 750 characters. Cut it apart into three new fields that end up out in the very right Excel columns AA, AB, AC.
Note1=Mid([RxNotes],1,250) Note2=Mid([RxNotes],251,250) Note3=Mid([RxNotes],501,250) Then using Excel Object - Concat the cells back cell by cell... X2=CONCATENATE(AA2,AB2,AC2))
Then delete the columns AA, AB, AC to hide the evidence..Neither solution is all that elequent. Read about this and by golly, it made a difference
ConcatComments = "'" & CommentString
Before using the CopyFromRecordset be sure to add a single quote in front of the large string.
Turns out the interface between Access and Excel look for this to prepare Excel immediately for the string to be a string, not something else. Some of my strings had weird print characters that kind of looked like Japenese characters. It seemed random, it always happened if the string was 255 or more characters (ramdonly, not always). The single quote doesn't show up in Excel, but got rid of all the noise.
I'm trying to import an excel file that includes a column of Part Numbers that I am interested in. I am trying to import that excel file into an access table called 'TableForImport'. That table has a column called 'PartNumber'. Thing is it's not just one Excel file that I am uploading...although I am uploading one file at a time. So the column name for each excel file table is different but they all have one column for the Part Numbers that I am interested in.
My code won't allow me to import the excel file into table 'TableForImport' unless they have the same column name! They never will! How do I accomplish my task without editing the excel file information? Here is my code:
I'm stuck on a step where I want to import an excel worksheet into the msaccess like we do normally. I do not have any data inside, it's just the header I will be importing. The data will be feeded by other forms based on some selections. My requirement is the "Default value" of each field should be set to 1 as we see in the property of a table in design mode.
The data would be updated later for some fields via macro or commands, but the fields were nor touched should be set to 1 (Value).
- I have emails with excel attachments coming in multiple times a day to outlook.
- I want to click a button in Access and automatically import the last excel attachment in my email in box based on the timestamp of when it came in (thus getting the last one).
I have code written which imports excel data to a access table but after the first import it fails due to duplicates, how can i tell it to ignore duplicates in the table and only copy new records?
code is below.
Code: Function SyncEmployes() Dim lngColumn As Long Dim xlx As Object, xlw As Object, xls As Object, xlc As Object
I have files that have extension of TSV which are text files but viewable in exel. I figured out a way for the user to click on a button in Access which does the following
1. Run Macro in Excel: The macro prompts the user to select the TSV file. After selection, macro opens the employee.tsv file in the excel (with excel being invisible) and saves it as employee.xls
Code: Sub SaveTSVtoXLS() Dim myPath As String Dim myString As Variant Application.DisplayAlerts = False With Application.FileDialog(msoFileDialogOpen)
[Code] .....
2. Imports the Excel file (employee.xls) into two tables: tblEmployee and tblDepartment using the following codes.
I have a form which i use for a user to select an excel file they want to import and then click a cmd button to import the file into a table which works fine, however i want to append a date into a date field from an unbound txtbx before the file is imported so it will look something like;
I haven't seen anyone run into this particular problem on this forum...
I'm importing data from an excel spreadsheet to an MS Access (2007) table. One of the fields in the table is a text memo field able to support more than 255 characters...
Issue: The issue is that any cell in Excel that is greater than 255 characters is truncated when imported to MS Access even though the field is a memo field. There isn't any documentation on Microsoft's website about this and I don't see any way to work around it other than manually copying the data from excel to MS Access.
I've adapted some code I found which works and allows me to import data from my access table "Device Text" to a specific range in an existing excel worksheet by copying a field "TextEdit" in the recordset. the code is placed in a module behind a command button on an excel worksheet. I have used import to excel because this seems to be less complicated for my needs than exporting from access.
Everything works fine if a single range is set , however I would like to set the range(rng) criteria in the code below to start at a certain cell depending on the value in another field in my access table called "LoopID" this is a number field which is not unique and can be 1,2,3 or 4. I know it wont be evaluated but I've entered the gist in red in my code.
I don't need to import it but I suspect I have to bring LoopID into the recordset somehow to use it,
Code: 'DIM STATEMENTS Dim strMyPath As String, strDBName As String, strDB As String, strSQL As String Dim i As Long, n As Long, lFieldCount As Long Dim rng As Range 'instantiate an ADO object using Dim with the New keyword:
I am new to MS Access and have been trying to use VBA to import a specific worksheet called "Access" in an Excel file (from about 400 users) into a single table. I want the code to search through one folder and import the "Access" worksheet in each Excel workbook within that folder. Each user has the same worksheet name. Here's my problem. I got this VBA code from: AccessMVP where KDSnell gave examples of how to import Excel worksheets into MS Access Tables.
Sub ImportExcel() Dim strPathFile As String, strFile As String, strPath As String Dim blnHasFieldNames As Boolean Dim intWorksheets As Integer ' Replace 3 with the number of worksheets to be imported ' from each EXCEL file
[Code] ....
When I execute the code. Nothing happens. I go to the table and find nothing....or I get Runtime error 3011, where MS Access can not find the object "Access". Also, is it possible to update the table without duplicating records?
I am trying to import data from an Excel file to MS Access (2013).
The Excel sheet consists of 700 columns. A group of 7 columns (always same header) are to be implement in Access one among the other.
That means:
At first columns A-G, than columns H-N, than columns O-U
I am trying to solve this with a loop (as you can see in the code)
But, if I start the modul I get this error:
"Runtime error 1004. The method Worksheets for _Global object failed"
But the module works, of I start it a second time. The error message appears only at the first start.
Apart from that, the code works. Sometimes, the module imported empty rows into the Access table.
Code: Sub ExcelImport() Dim xlApp As Excel.Application Set xlApp = New Excel.Application xlApp.Workbooks.Open FileName:="C:Users...DesktopBeispiel.xlsx"
I Cannot import excel data to an access table .The type is the same.The colums are the same number.No duplicate values exist in the colum that is primary key.
I have a requirement to create a piece of vba that will open all xlsx files in a folder one at a time then import the data in a range (sheet1!A1:G14) into a table named Weekly Input.
I have managed to export the data that I want into a spreadsheet using a command button.
Once my colleagues have completed the spreadsheet, I need a command button on a form with a file search dialogue box which will allow them to transfer the spreadsheet back into the database - updating the relevant records rather that over writing them.
Is there a VB code/Macro I can use which will allow me to do this?
I have a few problems and I want them to be able to be done from switchboard:
1. Is there a way for me to export a particular report (after selecting it) to a closed excel template, that is formatted? It would open the excel template (that has a logo and column headings), export data to below the column headings, then save the file with a unique name?
2. Also, a way to import data from an excel file, after allowing the user to select file? Only data below the column headings mentioned above. Same data will be appended to existing table.
:confused: Hi all - hope someone can help I dont know where to start.
I've got a cmd button that imports data from a excel sheet - that actual code is working fine, however when it runs it causes Access to freeze.
The data in imported correctly - so it must complete the process but Access locks up and has to be ended via task manager.
Any one got any clues why this is happening and how I can stop it?
This is an Access 97 database running mainly on NT and 2000
Private Sub LoadActualsDataButton_Click() On Error GoTo Err_LoadActualsDataButton_Click
' This procedure performs a two file match between the Actuals table (the Master file) and ' The Actuals spreadsheet file (the Transaction file). ' ' Keys : Study Code|Work Package|Period ' ' If the Master key < Transaction key then ' Read the next Master record. ' If the Transaction key > Master key then ' Add the transaction record to the Master file ' Read the next Transaction record. ' If the Master key = Transaction key then ' Update the value on the Master record with the value on the Transaction record ' Read the next Master Record ' Read the next Transaction record. ' ' End of File processing ' At End of File on the Master file, set the Master key to "ZZZZZZ" ' At End of File on the Transaction file, set the Transaction key to "ZZZZZZ" ' Continue processing until both keys are equal to "ZZZZZZ"
Dim MyDB As Database, MySQL As String, MySet As Recordset Dim appExcel As Excel.application Dim MyFiles As String Dim MasterKey As String, TransactionKey As String
Set MyDB = CurrentDb() Set appExcel = CreateObject("Excel.Application")
' Set up the transaction file (Actual Data Spreadsheet)
MyFiles = appExcel.GetOpenFilename("Excel Files(*.xls),*.xls", , "Open Actuals Spreadsheet") If MyFiles = "False" Then Exit Sub
' Check that this is a genuine Actual spreadsheet On Error Resume Next Let Err.Number = 0 appExcel.Sheets("Sheet1").Range("B1").Select If Err.Number = 9 Then MsgBox "This is not a valid Actuals Spreadsheet." appExcel.Quit Exit Sub End If
If appExcel.ActiveCell <> " Extracted Actuals Data" Then MsgBox "This is not a valid Actuals Spreadsheet." appExcel.Quit Exit Sub Else appExcel.ActiveCell.OffSet(1, 0).Range("A1").Select TransactionKey = appExcel.ActiveCell.OffSet & appExcel.ActiveCell.OffSet(0, 1) & appExcel.ActiveCell.OffSet(0, 2) End If appExcel.Visible = True
' Set up the Master File (Actual Table)
MySQL = "SELECT Actuals.[Study Code], Actuals.[TBCS Code], Actuals.[Year/Month], Actuals.Actual " MySQL = MySQL + "From Actuals " MySQL = MySQL + "ORDER BY Actuals.[Study Code], Actuals.[TBCS Code], Actuals.[Year/Month]; " Set MySet = MyDB.OpenRecordset(MySQL) If MySet.EOF Then MasterKey = "ZZZZZZ" Else MasterKey = MySet![Study Code] & MySet![TBCS Code] & MySet![Year/Month] End If
Do Until TransactionKey = "ZZZZZZ" If MasterKey < TransactionKey Then ' Read the next master record MySet.MoveNext MasterKey = MySet![Study Code] & MySet![TBCS Code] & MySet![Year/Month] GoTo Next_Loop End If If MasterKey > TransactionKey Then ' Add a new record from the Transaction to the Master MySet.AddNew MySet![Study Code] = appExcel.ActiveCell MySet![TBCS Code] = appExcel.ActiveCell.OffSet(0, 1) MySet![Year/Month] = appExcel.ActiveCell.OffSet(0, 2) MySet!Actual = appExcel.ActiveCell.OffSet(0, 4) MySet.Update ' MySet.Requery appExcel.ActiveCell.OffSet(1, 0).Range("A1").Select TransactionKey = appExcel.ActiveCell.OffSet & appExcel.ActiveCell.OffSet(0, 1) & appExcel.ActiveCell.OffSet(0, 2) GoTo Next_Loop End If ' Keys are equal so update the Master with the Transaction value MySet.Edit MySet!Actual = appExcel.ActiveCell.OffSet(0, 4) MySet.Update ' GoTo Next_Loop appExcel.ActiveCell.OffSet(1, 0).Range("A1").Select TransactionKey = appExcel.ActiveCell.OffSet & appExcel.ActiveCell.OffSet(0, 1) & appExcel.ActiveCell.OffSet(0, 2) MySet.MoveNext MasterKey = MySet![Study Code] & MySet![TBCS Code] & MySet![Year/Month] Next_Loop: Loop
Hello All is there a way (i guess using VBA) to import an excel spreadsheet into an access table without having to go through the wizards, if you know all the field names and other variables ??
I thought i would ask this question an how to import data from excel into access.
I am using sage to invoice clients and i can output this in to excel format then i would like the best and simplest way to pull the data though into access.
The data file has column headings at the first row ie A1 though to J1 and after this is the data, i have a table setup with the relivent table names, I had thought how easy this would be, but as always this was not the case.
The outputed excel sheet will vary in location so i think i need a diolog box to select the file and then some how link it to extract the data, is this right and if so how can it be achived.
Any thoughts
Alastair
UPDATE **************************************Resolved Thanks to Pat Hartman *************************
I'm having a Excel Sheet With first column which has numeric data for first 70 or 80 records then comes some string data, here i'm using this statement to import data from excel to MS Access DataBase, but its not retriving the records which were in string data type, is there any other way to do this...?
SELECT [Item #], [Description], [Pack Size], [Price] FROM [Database=C:Test.xls;Excel 8.0;HDR=Yes;IMEX=2].[Sheet1$] Where [Item #] Is Not Null
OK. I feel like an idiot but I did read the manual, Googled, and Microsoft help, but still cannot do it. The problem is on the import feature, there is no option to choose an Excel file.
I lowered the macro security level to take it out of "sandbox" mode, I reinstalled office and selected run all features again. I updated as well.
I tried blank databases to import to. No luck. I go to external data, import and I can choose ODBC, XML, sharepoint or Access files only.
I am using MS Office Pro 2003. Thanks for the help.
I'm have an Excel workbook (2013) with two dozen sheets that I'd like to import to Access. The code below is failing when it reaches the "Do.Cmd ..." and it's showing a type mismatch error.
Code:
Sub ImportAllSheets() Dim wkb As Excel.Workbook Dim sht As Excel.WorkSheet Dim xl As Excel.Application