I am working on designing a PARETO, and I need to pull data from multiple sheets via a single workbook.
So when someone opens this pareto, and push a button, a pareto will be created via the information on another workbook.
Is it possible to get that information without copying it all over?
In English, I have a workbook called Open Order, and another called PARETO. If I push a button in PARETO I want to have it pull data from Open Order, and say ok, 20% of all jobs in Open Order Archive sheet are late... is it possible to do this without having both books open or no?
Yes. As long as one is open it can extract data from the other even when that is closed. BUt I would recommend opening both because extracting a lot of data this way can be (or at least used to be) VERY slow. Apparently each 'Lookup' opens a new instance and does not close it immediatley afterwards.
Related
I have a userform in excel VBA that about 40 people use. When submitting data through the userform to write on the sheet it works perfectly. However, I tested with 5 users simultaneously using this same form and it seems like OneDrive syncing starts to mess up with the submitions (lines are being overwritten).
Is there a work around so that this overwritting does not happen when users are submiting data simultaneously?
You haven't provided much information about how you've set this up or how it's used but, as I'm picturing the shared workbook, you could determine and "reserve" the destination location upon opening of the userform, instead of upon completion.
There are a number of issues you'd have to work through, as co-authoring in this way can be tricky, and this is not ideal. Ideally you'd be transitioning to MS Access or another relational database. (If you already know some basic VBA, the learning curve isn't as steep as it might seem.)
I have several files where I have several tasks. Each task has a "to be completed" date attached to it and a formula that calculates whether the task is "overdue" or "not yet due".
To generate a complete overview, I've created one Masterfile and used Power Query to link all these individual files. This works properly, however one issue I can't resolve which is the following:
The Power Query does not refresh the "overdue/not due" formula, when I am refreshing the Query. As such the Masterfile states that tasks that were "not due" at the time I saved the original file, are still not due, although they are in fact "overdue".. I think the Power Query read the original files without updating the formula's.. Is there anyway to resolve this?
There is no easy way to resolve this. Three possible options :
If you want to accomplish this just from within your Masterfile, you can create a VBA script in your Masterfile that opens and closes all linked workbooks (see more info here). Please note that you must have access to these files (can be tricky if these are on a network drive or in the cloud);
You also can just manually open and close the individual files before you open the Masterfile (or before you refresh the data);
Change your approach/formulas, and use the individual files as pure data files, without any formula's that need refreshing, and do all calculations in the Masterfile.
My personal preference/recommendation would be 3), as I have some bad experiences from working with linked workbooks. My own approach if it is really necessary to exchange data between Excel files, is to create a Transfer tab/worksheet in the source workbook where you put all data that the other workbook needs, and create a Source tab/worksheet in the other workbook, and I copy/paste-as-values from one to the other, in particular when both workbooks are "in development". Once workbooks are stable (but does that ever happens?), you still can link the Target>Source worksheets (but auditing errors is just easier instead of having links all over your workbooks).
I'm trying to learn better excel skills by working on a hobby project. Currently, my Excel workbook grabs data from an online database and archives it via command button. When I need to, I can look at a summary sheet which analyzes the data and presents it nicely.
The problem is that I need this data to be continuous and if I'm not around to click the command button it will have gaps in the data. The more accurate the better. So, I'm looking for a way that the workbook can be opened, updated and closed without me around. Better yet, if this is possible with something like OneDrive so I don't need my pc on all day - that would be the best solution.
Can anyone suggest a way for this auto-update process to work and/or inform me if OneDrive is capable of doing it also?
I am trying to develop a manner in VBA to track changes in a document without having to hide the contents in an extra sheet within a workbook.
I understand that if you change the extension of an Excel file to ".zip", you can access the Excel document as components sorted into directories. Is there a way to save and write to a text file within one of these directories so that I can access it every time the document is opened, without having to have the user drag a log file along with the Excel document?
Some facts:
When Excel opens the file, the file is blocked by Excel. There is no possibility to write to that file within VBA
You can store additional data into that file externally or after the Excel workbook has been closed
You would need to have code externally from the workbook to accomplish writing to that file after it has been closed. You may want to use VSTO or an oldschool Excel Addin.
you have to ensure that Excel will not destroy your changes when restructuring or repairing the file.
In the first run, your idea sounds very natural, to not use sheets from a programmer's point of view. You only have full control on Excel files when
you use external libraries (e.g. Spreadsheet Gear) or
you remote control Excel via automation.
you use openxml SDK for Excel
you use VBA
You could insert additonal information and take care that this information is not skipped by Excel.
When you want to do the tracking this way, I would suggest you to use an Excel Addin. There is actually no need for installation when using this kind of Addin. Attach to open workbook and close workbook events and ensure that all changes are written to the Excel Workbook after it has been closed. Certainly you would have to attach to all kind of other events to track all changes to the workbook. You may need to have in mind that there can be more than one workbook opened at a time.
Actually there are alternatives.
write your logging code in VBA or whatever fits
abstract away how your persist the code (e.g. use a data provider)
think about these two alternatives to store logging data:
You can save logging data in cells of excel. When using a "newer" version of excel, you have a limit of 1 million rows. You may want to implement a rolling mechanism that ensures that you never go over the border of 1 million records. (you may be dont want to track a million changes)
You can use the document properties to store you information as xml.
Last but not least, the most obvious: Why not using Excel's functionality of tracking changes? Understand track changes in Excel 2013
Currently we have a Excel VBA application, which consists of 25-30 Excel sheet (and all of those sheets all hidden and we do background processing on them and display it to VBA forms UI), and we have developed a UI using VB forms. But problem we are facing is whenever we click on Save button using this code:
ThisWorkbook.Save
But this saves entire workbook not an individual sheet, so even if we make changes in single sheet it saves entire workbook and this save processing makes very slow (since it needs to save all excel sheet containing lot of data unnecessary, even if there is no changes).
My question is is there any way we can save "only one sheet in a particular excel sheet" not an entire excel file?
Note: I am a Java developer and I worked on VBA before, But it was years back, and I have forgotten bit. Any guidance would be appreciated. Or any pointers on how to handle this situation would be appreciated. Please let me know if you need any more information, I can edit this question.
What I have tried already? I did a lot of research from yesterday, I searched in previous questions on SO, but didn't get any useful information. As per my research it says we cannot do this. Am I on right path?
The short answer is no. You cannot save a single worksheet at a time.
You may want to try to reduce the amount of data in the workbook. Try storing data in several workbooks and when it is needed, open that specific workbook, make the needed changes, and then close it.
If it is necessary to have access to all data at once then consider using access or some other database.
It is also possible that the sheets have "blank data". Cells that don't contain anything in them but excel thinks they do so when saving it tries to save way more than needed.
Assuming that it is the active worksheet that you want to save then you could do something like this:
ActiveSheet.Copy
ActiveWorkbook.Close True, "path"
This copies the active worksheet which creates a new workbook which will become the active workbook. Then just call the close method on that and give it a file name.
I think you should consider splitting your application into multiple workbooks:
The workbook that contains all the logic, user forms and programming code. This workbook handles all other workbooks as well as the displaying of it. Potentially, this could be even an "Application Specific Addin", that stays dormant but activates as soon as any of it's subsequent workbooks gets opened. For this architecture approach check out the section on "Application Specific Addins" in this link.
This workobook/add-in can also hide the other workbooks, so that the user will not notice it's multiple workbooks.
One or multiple data workbooks: Depending how interlinked the data is, you can separate this, e.g. in a "Sales data" workbook which contains the large database, as "Base data" workbook, that contains all the smaller data (e.g. products or stores tables).
This way, you can reduce the saving to the "relevant" sheets. However, of course this requires quite a bit of reprogramming - but it's worth the effort, as for instance it also allows to provide updates/bug fixes without having the transfer the data between versions, as you only need to distribute the the file with programming logic. :-)