I have a master spreadsheet that we use for tracking a certain activity. The spreadsheet contains various lines with item descriptions, and open columns where end users are to fill in dates.
An updated master spreadsheet goes out to various end users to update date values and return it to the coordinator. The coordinator then takes the various feedback sheets, and updates the master accordingly.
Up to now, this has been quite a labor-intensive task as end-users change filtering settings before sending it back, and there are 1000+ lines, so it is hard to see what the end-users updated.
Does someone know of an effective method to do a task like this, using Excel directly or VBA?
I would recommend creating a server version of the master spreadsheet so that end-users could check out that document,fill in their dates and avoid the redundancy of having someone retype everything. Sharepoint's ideal for this kind of thing.
If you want to keep it to Excel alone, though, perhaps you could save all the modified user-input-provided workbooks to a designated folder. Then write a macro to loop through each of these files in the folder. Supposing that the cells the users fill/inputting data into were previously empty, check to see if they're now not empty and copy those changes to the master file.
Related
Is it possible to insert a code so we can track all copied excel files in the future?
The reason why: we are creating a template excel file that people can copy and fill in. The problem is that they regularly have to fill in the same information so instead of starting from the template they copy the already filled in template.
If we decide to change the template, we want to change all the files that were copied so there are no multiple versions going around.
All the files are stored on a server in subfolders so We can access them all. Titles of the file will vary based on the wishes from the customer.
After reading you, I see that:
Summary:
You have one single Template that everybody copies
You store all the filled templates on one Server Subfolder
Title of the Files varies from Customer's needs
Challenges:
For Performance shake, you might need of a program than Excel to manage those files
Otherwise, it is possible to use Excel VBA, but is somehow/enough complicated so you would need to have an advanced skills and enough time to write everything handling that Subfolders' file renaming if you wish to collect the data in one Single Excel.
Suggested Solution:
I recommend you to have A Locked Worksheet + Workbook Excel
Template so your customers won't be able to edit its structure and
it will keep all of your templates to be the same.
You better have some kind of the Standard in the nomenclature of your Excel Files which will help you use that description later on for search/filter/sorting ...
You can have a Reset Button as well within the Template where your customers will click and will empty all the fields effortless.
In short, If you wish to track of files being copies, you would need more than Excel VBA for that as you need to play with A windows service for you to track them.
Hope this will give you some ideas. All the Best!
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.
I have a dozen spreadsheets with identical structure and formulas, essentially tables, only the data differ, say one spreadsheet per country.
For example there is a spreadsheet to manage the US employees, another for the UK employees, and another for the Canada employees.
They are exactly the same except that each will store a different set of employees.
The spreadsheets act both as a database to store data and a user-interface to interact with data.
Each change (updating or adding a formula, updating some drop-downs values, changing style...) has to be replicated in all the spreadsheets which is time consuming and error-prone.
As an example I could change the formula to compute the seniority of each employee by editing the 3 spreadsheets.
I was wondering if there was a reasonably simple way to avoid duplicating the common parts, only having different data.
I'd like to avoid a full-blown development with plenty of VBA code, a complete database, some user input forms... but if really necessary I can write some VBA and build some database to fill in the blanks if there is no out-of-the-box solution.
With a full-blown development I would do something like:
store all the employees in a single SQL database table
develop a single spreadsheet
when opening the spreadsheet ask the user to choose a country to only load the this country's employees
save the data changes to the database
If you're effectively talking about an efficient way to handle version control so that input sheets that have previously been distributed to users match a master template, then I'm afraid there is no out-of-the-box solution.
I use something along the lines of http://datapigtechnologies.com/blog/index.php/building-version-control-in-excel/ to force users to download the latest template should they be using an older one.
In addition, I also place a big note at the top to prompt users to download a new template each time, rather than recycle an old one, because if a user didn't enable macros the automatic download of the latest template won't kick in.
Note that the above screenshot shows a form that I've built in Excel's grid itself, using shudder merged cells. (i.e. It is not a userform)
If the templates need to preserve user-submitted data that isn't held centrally, then you're probably going to need to develop an add-in along the lines of what the authors do in the book Professional Excel Development.
could anyone suggest a way multiple user can access single Excel file(Database) using Single userform. I have a system where multiple users have to update single excel file (Adding or deleting record). So could any of you suggest how should i proceed. I know this is an software process question rather than a software code question. But still asking, if Anybody could help me as i cannot find a feasible solution to do so.
When you have a network share available, would 'Shared Workbook' do the trick? (sounds a lot like it to me). You basically check a box that the workbook is from now on 'shared'. Excel will allow several users in parallel to open the same file for editing. It will make sure that everyones writes end up in the file (and that each save gives you others' edits).
You can find more info e.g. here: https://support.office.com/en-ie/article/About-the-shared-workbook-feature-49b833c0-873b-48d8-8bf2-c1c59a628534?ui=en-US&rs=en-IE&ad=IE
This may not be what you want, but you an have multiple users editing multiple files, but have the data combined into a single file. This will work as long as you have a fixed maximum number of data editors (say 20). Just create a simple data entry file with the userform built in that stores the data entered in a sheet. Now create 20 copies of this, one for each user, and store them in a file sharing environment like SharePoint or a shared network drive. Now you can have the master "database" file aggregate them into a single file by using workbook links.
In order to be able to do things with them as if they were a single data set, you need to do a sort of union of the data, which is not straightforward in Excel. Again, you need to establish a hard maximum size for each user to edit - for example, 5000 rows. On a Sheet in your database workbook, designate rows 2-5001 for the first user, then leave an empty row (usually I color it black to make it easy to spot), then 5002-10003 for the next user, etc. In Cell B2, put the formula
=if('J:\Network folder\[Data Entry 1.xlsm]DataSheet'!B2="","",'J:\Network folder\[Data Entry 1.xlsm]DataSheet'!B2)
and fill that to all the cells in that range (down to row 5001). Then repeat in the next range (B5002, for the second range:
=if('J:\Network folder\[Data Entry 2.xlsm]DataSheet'!B2="","",'J:\Network folder\[Data Entry 1.xlsm]DataSheet'!B2)
I am in the process of upgrading an excel spreadsheet we use to manage timecards with for employees every week, we use OCR to process them. Currently our big spreadsheet, its a multi-tabbed spreadsheet where every employee in a given department can see everyone else's time that gets logged.
What I am in the process of doing is making individual spreadsheets inside folders for each employee to access, these folders will be locked so employees of each department cant go in and see other peoples timecards. One master spreadsheet with the use of index/match will pull the data into the master spreadsheet.
I have one page completed for one employee but I have about 20+ more employees to go and it took 6 hours to do one page, is there a way that I can change the spreadsheet connection of one individual page instead of the entire workbook?
here is an illustration:
i have hundreds of cells on one tab connected to this external spreadsheet
With the use of the "Edit Links" prompt I am aware that I can change data sources, but I want to edit the connection per tab not the entire workbook
i want to have one tab pulling from one data source, and the next tab pulling from another data source. I want to accomplish this without going into each cell and updating the link and spending a 40 hour work week on something so small.
How can I do this?
thanks!
using replace all, [ctrl + h] for windows, you can change any value within formulas on the entire page
works great