Importing Excel Data into Access - Generate GUID - excel

breaking my head about this and searching as far as I could, to no avail...
What I have:
Two XLS Sheets to be imported into one Access DB.
Data is structured the following way:
Table 1 - Master Data (one row per Submission)
User Project Date From Date To
Table 2 - Detail Data (up to ten rows per Submission)
Date Start Time End Time ....
While those two tables are imported into the same Access db, they are going into different db tables, so I Need a master key to link the master to ist subsequent Detail data set.
What I am therefore looking for is to generate a GUID which will be attached to both data sets and can be used for joining the sets in Excel.
I have been trying both, to generate an ID in Excel (VBA or formula) or add it when importing into acccess, when importing, have not found a proper way to achieve this.
Maybe there's an alternative Approach to my requirement, curious for ideas.
Thanks!

I've had luck with the following:
Public Function GenerateGUID() As String
GenerateGUID = Mid$(CreateObject("Scriptlet.TypeLib").GUID, 2, 36)
End Function
(Found here: https://stackoverflow.com/a/23126614/1240745)

Related

Comparing data between two sheets in Powershell - how to find data after cells with specific values?

To start, unfortunately I cannot use Import-Excel (yet! organization is looking to implement the module "soon") or other outside modules, so am just working with excel objects manually.
I made an automated report that appends to an excel document every day. It looks something like the included picture. The servers and their data are not in the same cell position for each daily sheet, but are always grouped together (so Server1 and its data might be in the middle of today's sheet, but at the beginning yesterdays sheet). Databases can change, so I'll also be looking into error checking that a database actually exists on both sheets to compare them.
I want to check the most recent sheet (sheet labeled 2020-08-10) and compare each database with the same databases on the oldest sheet (sheet labeled 2020-08-08) to get a size % difference between each database, but I can't seem to figure out how to automate finding the multiple "Database" rows of each server, then going down and grabbing each database and size to compare.
Any help or guidance to get me researching in the right direction is appreciated.

Check For Matches And Import Data Into Specific Cells From An External Source

We are trying to track some online marketing metrics and I'm having some trouble. I have 2 tables in different tabs (one imports data from several external data sources, ultimately we want this to be a series of google sheets) and one is the working table.
I have rows on the imported data with month and other attributes defining the data and in the working data these are columns. The working data has a lot of other cells too that are not there with calculations, etc.
What I need to do is to check on the working sheet which month (for example) we are in, then go to the working data and scan all the data for matches with that month. Then I want to consolidate each of the data parameters into the working sheet. Ideally I wouldn't even have to import all the external data into a tab on the working spreadsheet, if I could find a way to work where it would check the external documents for the matches that would be great. The structure of the data in the external documents is the same as displayed here fore the imported data.
Note that in this case it is month but it could be anything random so DATE functions wouldn't work.
So I want to pickup the data from the external source above, and insert in the relevant places. But while the months will not change, other data can change the order in which is imported so we need to check that the headers from picture 2 match the row labels from the imported data.
I hope that makes sense. I would really appreciate any help. Was up until 4 AM trying to figure this out and I would hate to go back to my boss saying he's gonna need to get someone else to do this as I can't. :/
Thank you.
So I resolved this with a INDEX(array, MATCH(),MATCH()) function. First I selected the answer array from the cells with the info I wanted then used the MATCH Function to match the row and the columns I wanted in the matrix.
This created another problem where no answer existed as it threw an error so I had to envelop the whole expression in an IFERROR function.
The final solution was like this:
=IFERROR(INDEX(Table_Query_from_Excel_Files,MATCH(!H1:I1&A1,INDEX(Table_Query_from_Excel_Files[Month]&Table_Query_from_Excel_Files[User location],,),0),MATCH(!A1,Table_Query_from_Excel_Files[#Headers],0)), 0)

How do I lock an additional column to rows imported from Power Query in Excel 2016 without a unique key column?

I am using Power Query in Excel 2016 to combine data from 12 different workbooks within the same folder system into one table, and need to add an additional column in the master table that tracks the status of each row. However, when I refresh the data, the Status column does not follow the rows to which it is initially applied.
I have already looked at [ Inserting text manually in a custom column and should be visible on refresh of the report ] but this solution only works with a unique ID column. Because each of the 12 workbooks is edited separately and because there is no single column that can be guaranteed to have unique values between all of the different spreadsheets, I don't have a key to join the data to the additional column.
I believe there is always a way of finding a Unique ID. If you can get your head around this, it is not that difficult to solve your problem.
See my below example, I used three sample workbooks saved in a Test folder. Depends on the way you add them to the query editor, in my example I used From Folder and follow the prompts without making any changes and combined the tables automatically. Once combined there is a Source.Name column automatically added. I suggest to leave this column in your output table as it can form part of the Unique ID if your data is highly identical across the workbooks.
An optional step (not in my screenshot) is to add an Index column and concatenate the index number with a product/task name so it can make that specific line of data entry even more unique.
Once you added the Status column with data entered manually on the master table, load the master table back to query editor.
Then go back to the original query (Test (Input) in my example) and merge it with the reloaded output query. See my screen-shot for how to 'uniquely' merge the two tables.
The rest is self-explanatory. I think the key is finding elements of the Unique ID and incorporate it in the merge part.
Let me know if you have any questions. Cheers :)

Copy and paste Excel rows between two workbooks based on criteria from exported Access data

I have no previous experience in Access, VBA coding or in Excel macros prior to teaching myself the past month via these forums. Thank you forums and contributors. I have enjoyed my Access learnings so far, the challenge that it has provided and appreciate any help that I can get. As such, the code and methods that I have used to this point may well be convoluted and confusing. I will do my best to provide relevant details and accurate terminology.
I work in a lab and I am creating an Access Form for semi-automated reporting. Samples are received from clients and are logged into the Excel Table R&D Log. The worksheet is InProcess. Samples are sorted based on the site in which they originate and given a one or two letter site code (G, D, WH, etc.) and an ID "yy-000" in separate Excel columns (i.e. D 18-096). Samples may be submitted for multiple analyses (Metals, Water, Soil, etc.) and may even have multiple rows of reporting if multiple analytes are identified in the sample. There are several other columns, such as receipt date, reporting date, units, etc. Once samples are reported, I manually copy and paste them into the Archived worksheet, and delete the record and blank row from the InProcess worksheet. Since one sample may have multiple analyses and even more potential results, each record would be reported on a new Excel row (with the same D 18-096 ID number). Thus, there is not a single unique identifier or primary key for each sample in the current format. R&D Log is updated manually by lab technicians and the worksheet InProcess is a linked table in an Access Database.
The Access Database is using two combo boxes on a Form frmInProcess to filter a Query qryInProcess of the linked table. The combo boxes are filtering the report destination (one client may receive multiple site codes) and the analysis (reports are separated based on type of analysis). The Query is also filtering out blank results and blank dates, so only completed samples will appear on the filtered Form. I have generated VBA code to this point that will export the Form to a .pdf, save the file with unique filename, and open outlook to mail out the report. I have also managed to export the filtered Form frmInProcess to an Excel file Access Test (not the linked file).
What I would like to do now is to automate the transfer of completed test results from the Excel worksheet R&D Log: InProcess to R&D Log: Archived and delete the record from the InProcess worksheet. I am not sure if I can export the filtered Form into a linked Excel table, or if I must use a separate Excel file (or if it even matters for simplicity of code?). I would now like to read the exported filtered Form in Excel Access Test, lookup matching rows in R&D Log based on several criteria (site, ID, Analysis, Analyte, Report Date) and automate the transfer of records between R&D Log worksheets. End result being that Access generates reports for completed tests, and the records are removed from InProcess testing and transferred to Archived testing in Excel. I am guessing that I may need to close the Access application and perform this in Excel. Hope this is easy enough to follow.
Thank you.
In my experience, importing an Excel document into a temporary NEW (or totally empty) Access table is usually the easiest way to go. Then you do not have to worry about cell references like you do in Excel VBA. Even if the Excel document has old data in it with just a few new changes each time, importing it into a temporary Access table could be the simplest way to go, because then you can compare the data in this table with the data in another, permanent Access table and update the latter based on the former.
As far as the original Excel file, if you need to delete rows there, it might be quicker to export a new Excel file with just the data the old one is supposed to end up with, and then use VBA to delete (or - safer! - rename) the old file.
So the development process goes something like this:
Save import steps by first importing an Excel file via Access' ribbon options "External Data" (tab) ->"Excel" and when you finish, be sure to check the "Save import steps" box and note the name you give the "saved import" because you will need that in your VBA code.
In Access, write a function for deleting the table. The VBA code is:
Const cTable = "MyExcelTempTable"
If TableExists(cTable) Then
DoCmd.DeleteObject acTable, cTable
End If
Now you can test your delete function on the data you imported.
Write VBA code to import the same spreadsheet to create the same table:
Const cSavedImport = "Import-MyExcelTempTable"
' Import the Excel file
DoCmd.RunSavedImportExport cSavedImport
Write more VBA function(s) to check the imported table for bad data and then to copy it into the permanent table. You might be updating existing records or adding new ones. Either way, you could use Access queries or SQL to do this and run them from VBA.
Write a VBA function to rename the old Excel file. (You could use an InputBox if the Excel file name is different each time. I do this for importing Excel files, and I set a default value so I do not have to type as much.)
Write a VBA function to export the new version of the Excel file.
Make yourself a button on a form that, when clicked, runs a VBA function. Inside that function, run Steps 2 through 6, above.
I am not sure my answer exactly matches what you are trying to do, but hopefully you get enough of a picture of the workflow to figure out the details of what you need.

Microsoft Access: How to create a single report with multiple totals rows (totaling based on date)

I am very new to microsoft access. I work in an Immunization program where I routinely collect data about vaccinated children. I used to have excel spreadsheets (different spreadsheet for every campaign) but as the number of spreadsheets grew, comparison between data of different campaigns became difficult.
Now I am trying to get all the data into a database program in which I can bring data from multiple campaigns into a single report easily.
After jumping into access, first I need to get the basic things done that excel could do very easily. e.g.
This is sample data from day 1 and day 2 of the campaign. In access I can create a query which shows data from day 1 only and a totals row at the end. But how do I create a single query/report which shows separate totals row for each day. In other words, how do I reproduce the data in pictures above in a single access report.
Edit:
I am planning a single table that contains data from all the campaigns in various columns.
The table in microsoft access looks like this:
Link to the access database file:
link to access database file
June7 has provided the correct advice - though it is cryptic.
Your table structure appears correct - you want a single table with the identity of the campaign and date (or whatever parameters you seek to differentiate them).
Your query is to collect those records into a record set. (Although there is an aggregate query type - it is not meant for what you seek to do.) You don't want to report on the entire database each time probably so one uses a query rather than the table itself to be the record set of the report. How that query is delimited is up to you.
The report object is where one then groups - and a group can have a total. You will want to look into online/text instructions on this for actual implementation.

Resources