Excel VBA Slow Opening - excel

We have an excel workbook (xlsm) which has an embedded VBA code, which looks up the distance between two points using the getgoogledistance module.
Since we have added this to the workbook, it take a very long time to open sometimes in excess of 10 minutes..
I suspect on opening the workbook, it is trying to update all of the entries, hence why it is slow to open.
Is there a way in which I could add a button to the worksheet and rather than on 'open' update the necessary cells, when this button is clicked it updated all the cells?

Yes, you need to go to the options, then customize menu and from the list on the right, check the Developer menu.
Back to Excel, you'll be able to add controls such as push buttons and attach macros to them.

Related

When two Excel workbooks are open, each with VBA code, how do I switch the code view between workbooks?

I have two Excel workbooks, each with VBA code. However, the code window (in response to Alt-F11) only displays the VBA code associated with one workbook. I tried entering Alt-F11 again but, while the label at the top of the code window toggles between my two different spreadsheets file, only one spreadsheet's code is ever displayed.
I tried clicking all of the items in the Project window on the left side (those items related to the non-appearing code), but that didn't help.
Short of closing down one of the spreadsheets, is there any way to toggle between looking at the VBA code for two different, active spreadsheets?
Thanks!
You can either double click on the project explorer, or click in an element with the right button and choose "Display code". It should work.

Macro button under customized ribbon tab tries to open old Excel file

I created a custom ribbon tab on my Excel like Excel_app_v1.xlsm, and a button under this ribbon tab is connected to a macro. So when I click this button, the macro does some table importing applications.
The first strange thing is that I created this ribbon tab and the button for only this Excel file, but the ribbon tab and the button appear in all other Excel files, even if the original Excel file Excel_app_v1.xlsm is not open.
The second problem is that I created a second version of my previous Excel file with "Save-as" option. So the new Excel file is like Excel_app_v2.xlsm. When I click the button under the ribbon tab, it opens the first Excel file Excel_app_v1.xlsm, even if it is not open. I deleted the first Excel file, but then I got an error like "Couldn't find the Excel_app_v1.xlsm on the path".
So obviously the macro button under the customized ribbon tab is linked to the first Excel file, but I couldn't find the menu option to change this. I added ThisWorkbook before all the sheet expressions in the vba code, but it didn't solve the problem. The button-click is still trying to open the old excel file.
The VBA code is below. The button is linked to the Sub ImportTable. Firstly it asks the user if the user wants to continue with the process. It opens the previous Excel file right after clicking on the button, at the same time as the Message Box appears.
Sub ImportTable()
Application.ScreenUpdating = False
YearMonth = ThisWorkbook.Sheets("tab1").Cells(11, 2).Value
' The Macro button opens the previous Excel file before clicking Yes or No on the message box
answer = MsgBox("Warning! Brings the newest source file. You want to continue?", vbYesNo + vbQuestion, "")
If answer = vbYes Then
RunSASCodeViaBatFile ' Another Sub which runs bat file to run a SAS-code. But it doesn't matter. Because the problem happens before I click on Yes or No.
InsertSASFileIntoExcel
Else ' Nothing happens if clicking No on the Message Box
End If
End Sub
The clue to fixing this quickly was posted below by roncruiser, with one slight twist.
Everyone on the web seems to feel that PERSONAL.XLSB is the key here — nope. In fact, playing with that file only confounded me for even longer. Here's what I did instead:
Right click the Ribbon and select Customize The Ribbon;
Navigate to the offending macros that you've installed with buttons;
Find and click on Import/Export;
Export your custom buttons (the macros will go right along just fine);
Open that resulting file, and edit out the offending references to the other file that's causing you so much grief — example:
<mso:button idQ="x1:HideRows_0_EA10D6" label="HideRows" imageMso="_3DPerspectiveDecrease" onAction="!HideRows" visible="true"/>
I took out everything after idQ-"x1... up to the actual name of the macro. I also took out the same external reference found in onAction="... Take everything up to the bang mark.
Save this under whatever name you wish, but with the same extension (for my setup, it was called ExportedCustomizations.exportedUI (yes, that long an extension));
Repeat the first few steps here, but this time import your edited file.
Voila, all is golden.
No messing around with wiping out existing work and starting all over. Worked a charm for me, so a big tip o' The Hat to roncruiser for the clue.
Just to confirm what sumgain have write above.
It works perfectly just do as he said : remove the part after the "x1:" that refers to a specific workbook until the begining of the maccro's name.
example :
When you export your custom ribbon with the maccro attached to it it will be write like below :
idQ="x1:C:_FolderName_Filename.xlsm_Fill_Formulas_Cells"
THen you remove the part mentionned and it will become like that :
idQ="x1:Fill_Formulas_Cells"
Same for onAction keep only the Maccro Name
Then it will works perfectly as long as you the maccro's name in the workbook stay consistent if you modified the Macros name then you have to modified it in the exportedUI file.
Then when you will reload the new file you can check in the Excel Options customize ribbon on the customize button if you put the pointer on you will see "Maccro: Name of your maccro"
And not the path of the file the maccro was from.
No need to use custom UI editor or any other things such as personnal maccro at least for that and if you are not bother to have custom ribbon in all of your woorkbook.
As well it is obvious but still good to remind it, you need to have the maccro in the workbook this procedure is just there to call the maccro that are associate to the workbook, it doesn't contain the code of the maccro.
Cheers
Romain
Does this still work? I have done this in the past with success but can't seem to get it to work now.
I export the file, edit it and import it back in.
it appears to work, but when i close the Ribbon options pane, my custom buttons disappear.
Same exact thing happened to me. There's a way to get around this.
By default, when you create a macro in Excel and run that macro through a custom ribbon button, that ribbon button macro works only in the workbook that contains it.
To get around this and have the button macros work in all workbooks, you'll need to create a Personal Macro Workbook. Then any macros that you store in your personal workbook on a computer become available to you in any workbook whenever you start Excel on that same computer.
Create a Personal Macro Workbook
To get the same ribbon button macros to work on another computer, you'll need to copy the Personal Macro Workbook to another computer and store it in the XLSTART folder. The link above has all the information you'll need.
Note: Delete the old ribbon button macros. Make sure you create new ribbon button macros that reference the macros from your Personal Macro Workbook.

Can not delete Command Button from worksheet without Excel crashing

I have a worksheet that I want to delete. Originally it contained 3830 rows. When trying to delete the worksheet, Excel would crash, and completely close. I thought this might be due to the amount of data on the worksheet, and the presence of a formula in one of the columns. So I removed the formula from the column in sections, and then deleted rows in blocks, saving each time. I removed the data until there were only 30 rows left, and still could not delete the worksheet without a crash. After this I went through the VBA and removed any references to the sheet, in case there was some kind of dependency problem. This still did not allow me to delete the worksheet.
As well as the data there is a Command Button embedded in the worksheet, which I have determined is the cause of the problem. The button has no related click event - clicking on it appears to do nothing.
To modify the button I have to enable Design Mode, which I presume is because it is an Active X control. If I try to cut the button via the Right click option, Excel crashes. If I try to delete the button by selecting it and hitting the delete key, Excel crashes. The button is called 'Sort' instead of 'Command Button 1' or similar, but I have not been able to find a reference to this name in the Name Manager.
I have been through the object properties, and can Edit the Command Button Object, moving the object, resizing it, etc. I have also been through Format Control, but with no success. Originally the object was locked, but the worksheet was not. I have unlocked the object, but again this has made no difference.
I have also created a new Active X Command Button and a Form Controls Command Button on the worksheet, and have been able to delete both without any problem. The workbook in question contains a lot of worksheets so ideally I want to be able to resolve this issue without needing to copy each of the worksheets I want to keep to a new workbook, or a similar fix.
Any suggestions would be gratefully received!
I had the same issue. I added the command button and for some reason, when I tried removing it, the excel crashed out.
Solution:
Create a blank excel file and save it with a new name.
Open the file with the command object.
Right click on the sheet and use MoveOrCopy.
Check copy option and copy the sheet across to the newly created
file.
All your formulas, NamedCells get copied across successfully. If you got any VB code, you need to copy it manually.
You can disable automatic calculation of your excel workbook.
Using VBA Code: Application.Calculation = xlManual
Manually: Formluas > Calculaitions Options > Manual
Save the file and then try.
As there is only one button on the sheet and assuming n oother data you can try to delete the sheet using VBA
ThisWorkbook.Sheets("SheetName").Delete

Excel combo box

I have a workbook that has a combo box list in it and works fine until I try to share
the book, then it stops working. I have since found out that this is how Excel is set up!
I have a validation list that works but will only show 8 lines whereas the combo will show all 22 lines at once, which is what I was trying to achieve.
Can I use a form control to work around this and if so how do I do it ?
I have just tested this, adding an ActiveX Combo-box to a sheet, linking it to a list of cells and sharing the workbook, the Combo-box drop down is unaffected.
If you are trying to insert a combo-box to an already shared workbook, then the insert menu will be greyed out, to do this you must open the workbook in exclusive mode by going to Review > Share Workbook and deselecting the share tick box.
Once you have it open in exclusive mode you can then add in the combo-box and re-share.

Click RefreshWorkbook on Bloomberg Ribbon [duplicate]

This question already has answers here:
Closed 10 years ago.
Possible Duplicate:
How to refresh/load RTD Bloomberg function (BDH) in excel in vba
I am working on an Excel Spreadsheet with VBA. I have a Bloomberg BDH function that I want to refresh from VBA. I tried recording a macro and clicking the Bloomberg->Refresh Workbooks button but the macro came up empty. How can I do this from code? I'm using Excel 2007 and I found one option of entering
Application.Run "blpmain.xla!RefreshAllStaticData"
but blpmain.xla can't be found. I'm not sure what version of Excel/BBG-Addin this was for.
Any help?
What I ended up doing was re-pasting down the bloomberg formulas in the appropriate ranges. This forced the data to redownload. Not the most ideal solution but it works.
Basically, unlike BDP...BDH doesn't refresh because its historical(H), if you want refresh it you need to resubmit your formula.
Maybe not the most elegant solution but what I do is change something in the BDH formula. So you can click on a button you make that takes the data and adds a day and then removes it back. That slight change causes it to refresh.
Another thing I used to do was have a BDH bring in all the historical data, but have the top column a BDP realtime feed so it kept freshing.
In the end, the easiest way is to have the users close the excel sheet at the end of the day and have them reopen it when they need it.
Are you sure you've set a reference to the addin?
Open a code module in the workbook in which you want to use the
Add-In's functions
Go to Tools > References to open the References dialog where you
will see a list of all the libraries and other objects (like
Add-Ins) to which you can set a reference.
Put a tick in the box next to the name and click the OK button.
Source
Once you've done this, you can refer directly to the xla function RefreshAllStaticData.

Resources