Excel VBA add right-click button to addin - vba

I am trying to make an Addin with Pivot right-click button.
All the macros are working in the addin perfectly on every workbook that I open.
The problem is that the right-click buttons don't appear in other workbooks - only in the one with the addin.
Screenshot
As you can see I have written the code in ThisWorkbook module, and the Subs are Private. - I guess that somewhere here is the problem.
Would be very grateful if somebody can help.

Ah, I found the problem.
Obviously, the first part of the code was preventing the buttons to appear in other workbooks.
Other than that, Temporary:=True. it should be False.

Related

Decide which ribbon tab to be selected

The program, that I'm working on, has a separate (additional) Add-in tab in the Excel ribbon. And there are our custom controls, etc. Some of the controls open a new workbook (new Excel window).
In Excel 2010, when the new workbook is opened, our custom tab is selected by default. But in 2013, the first (Home) tab is selected.
In the project, there is no code that controls which tab to be selected by default in a newly open workbook. That is why I am wondering it works in 2010, but not in 2013?
I researched about that, but I could find mostly articles about "how to create new tab", etc.
Any ideas and suggestions are welcome.
This should be the fix you're looking for:
yourRibbonInstance.ActivateTab("tabID")
keep in mind that the id of the tab might not be the same as its displayed name.
Not sure if this might be overkill but you could use a macro that runs on the workbook open event to activate the sheet you want to see first..
Sub workbook_open()
Sheets("Sheet2").Activate
End Sub

No Add-In Tab Though Add-In is Loaded and Working

I wrote an Excel VBA add-in over ten years ago, which uses the old Commandbars to put a menu in Excel's Tools menu (in Excel 2003 and earlier) or in Excel's Add-Ins tab (in Excel 2007 and later). I've never had a problem with the menu appearing, in all versions of Excel from 97 through 2013.
But now a user says Excel Add-Ins menu not appearing for him in Excel 2013. Normally that means the add-in isn't loaded, but in his case the add-in is loaded and working. We know the add-in is loaded and working because the add-in adds user-defined worksheet functions, and those UDFs are working fine for him. But he wants to get to the add-in's menu and can't.
My googling showed that some people are having trouble with the Add-Ins menu in 2013, but I didn't find anything specific to this problem.
Yes, he's tried enabling the Add-Ins tab in Excel Options > Customize the Ribbon.
BTW this is an .xla add-in, not a COM add-in.
Any suggestions?
I have Excel 2010 and had the add-in tab disappear for MrExcel HTML add-in. I tried all types of suggestions - and finally found one that worked for me!
Go to the add-ins folder where you have your add in saved. Right click on the file, and select Properties. At the bottom of the General tab - if it says "Security" - check on the "Unblock" option.
Voila! My add-ins never disappear anymore!
Solved:
Solved this now but really weird solution if you enabled the Add-in whilst the Analysis ToolPaks were enabled it'd have the issue you above, but if you enabled the Add-in whilst the Analysis ToolPaks weren't ticked then went back in to it and re-ticked the Analysis ToolPaks it'd be fine and wouldn't disappear!
Was an extremely strange issue!
See Spiceworks
As far as I understood this is a problem with Excel 2013 (another attempt of the guys at Redmond to make our lives miserable with every update of their products). The workaround I've found is to include the following code into the ThisWorkbook module of the Addin:
Private Sub Workbook_Open()
Workbook_AddinUninstall
Workbook_AddinInstall
End Sub
Cheers!
I had similar issue with excel 2013. Add-in tab was missing. I went to Developer>>>Add-Ins and deselected the add-in I wanted. Click OK then repeat the process and select the same add-in. Click OK. The Add-In tab should appear.
See also https://www.excelcampus.com/vba/add-in-ribbon-disappears/
As of july 2016 the security settings in Excel disable the add-ins in the old default location. THe website shows how to set the directory to trusted status
I had a similar problem where two .xlam files that loaded and appeared in custom ribbon tabs in Excel 2010 didn't show up in the ribbon in Excel 2013 even though they were loading each time a workbook was opened. I tried all sorts of solutions - disabling the Analysis Toolpack, disabling and enabling the .xlam files, making sure the .xlam's attached XML file was up to date (I was thinking an MSO image I had in the XML code was no longer available in Excel 2013), but nothing worked. I eventually tried copying and renaming the .xlam file and enabled it in Excel and, strangely, it appeared in the ribbon.
I have no idea why it needed to be copied and renamed - it's almost like Excel 2013 needed a fresh copy of the .xlam file before it could show up. Very weird!
I've been looking for this answer for a LONG time and the previous code worked, but, for me, only with Workbook_Open() instead of Thisworkbook_Open()
Private Sub Workbook_Open()
Workbook_AddinUninstall
Workbook_AddinInstall
End Sub
Thanks for finding this!
I disabled the add-ins via the Developer tab, and then enabled them via File>Options>Add-Ins>Manage Add-Ins.
Voila!
You can Try by disabling macros with notification. (tried on 2016)
File->options->trust center->macro settings-> tick disable all macros with notification
It worked for me .
If I disabled and enabled, I could get the Add-Ins tab to appear, but every time I opened a document I had to repeat. This seemed to fix it for me:
File > Options > AddIns > Choose "XML Expansion Packs" > Go > Select "Microsoft Action Pane 3" > Attach > Ok
I have had similar problems with Excel 2016 (not with 2010 and 2017), and very strangely it was solved this way :
1) Desactivating the add-in
2) Quitting Excel
3) Activating the add-in
4) Going to File > Close (in French version : Fichier > Fermer)
And when I click "Close" the "Components" menu suddenly appear in Excel 2016 !
Good luck !
Had a similar problem in Excel 2010. Tried all the suggestions above, but to no avail. In the end it turned out that even though it was an .xll add-in, it somehow also was listed as a COM add-in. So going to File > Options > Add-In, then selecting Disabled Items from the list at the bottom of that window and enabling the add-in, worked for me. Now in the list of Active Application Add-ins it shows both the original Excel Add-in, and the unexpected COM add-in without location. Oh, and the tab is back of course. Go figure.

Excel won't show the workbooks worksheets

I have an Excel Workbook containing three worksheets. However all sheets seem to be hidden dispite that their visibility is set to xlSheetVisible (Found by looking at the worksheet properties in the VBA editor).
This is what I have tried so far to solve the problem.
Searched Google for help, but all similar problems have been solved by changing the Visibility from xlSheetHidden to xlSheetVisible. But in my case that setting is already set to xlVisible.
By using VBA I have tried to activate a sheet without any result.
By reading this you might have guessed that I am able to see and access the worksheets from the VBA editor.
Despite that looking at the normal Excel userinterface, all buttons are disabled and clicking at the office/file button in the topleft corner doesn't allow me to save the workbook. However if I make any changes to the VBA itself and tries to close the workbook then Excel asks whether or not I would like to save the workbook.
Everything you describe leads me to believe you're hiding the workbook window, not the worksheets. When a workbook window is hidden, all the sheets become hidden and much of the functionality from the toolbar greys out.
In the Visual Basic Editor, you'd also be able to see all of the worksheets and their visibility would be xlVisible, yet they cannot be seen on the screen. This is because they ARE visible, but the window which displays them is not.
Please try clicking the View tab in the toolbar, and then under the Window pane, click Unhide.
If this doesn't work, then try toggling visibility of the workbook.
It sounds like this may really be your problem...
http://vbadud.blogspot.co.uk/2010/08/hide-sheet-tabs-using-vba-hide-excel.html

Standalone code for Excel

Can VBA code be written to perform actions on any Excel file?
When I create a project in Visual Studio, it asks for an Excel file to be linked to it. All the code that I write is in ThisWorkbook.vb and hence acts only on the Excel file linked to the project.
Ideally, I want a script that:
When the user double-clicks, he/she should be allowed to select an Excel file of choice for the actions to be performed on that file.
If the above is not possible, I'd at least like to invoke the VBA script from within an Excel file.
Basically, the VBA code should be independent of any Excel file.
I looked at VBScript, but the syntax for it seems to differ slightly.
You've mentioned Visual Studio, VBA, and VBScript. The solution I'm outlining works directly with VBA rather than Visual Studio or VBScript. (However, you might adapt Visual Studio (C# or VB) along the lines of what I'm outlining below.) Hope it's helpful, so here goes:
Here's what I do, and, it ultimately results in an .xlam Excel AddIn as #chris above has commented.
Overview
I start with ordinary .xslx workbook, to which I add a VBA project, making it an .xlsm. Then create some VBA Subs (macros). Then create some Excel QAT (Quick Access Toolbar) buttons for the workbook, which are bound to (i.e. they invoke) the VBA subs/macros. Then convert the workbook (with VBA in it) to an .xlam, which is an Excel AddIn. When you're all done, the buttons are accessible from any workbook (and the VBA code has access to any user workbooks as well as those originally in your .xlsm). Further, the workbook associated with the .xlam is invisible. So it just looks like you've added some buttons to the QAT that appear on all users .xlsx windows. The .xlam is pretty easy for users to install (though I provide a buttons to uninstall/reinstall/check version). You can upgrade an .xlam independently of users' workbooks; users' workbooks can thus be data only (.xlsx, no VBA).
Details
Write some Excel Subs you want to use later
You need to be aware that the buttons can only invoke macros (VBA Subs) without parameters, so the macros will have to check things like ActiveSheet and ActiveWorkbook and Selection to figure on what sheet the button was pressed, hence what user data to really operate on. (If you need to refer to your workbook with the VBA code in it, use “ThisWorkbook”). You should be aware that there can be naming conflicts, so try to name the parameterless subs with rather long names, such as MySomewhatUniqueProjectName_button1, etc…
Add Buttons to your .xlsm
Using Excel 2010 (I think this works with 2007 or later), I put workbook-specific buttons on the QAT part of the ribbon, which connect to macros (VBA subs) in the VBA code.
To do this, you from the Quick Access Toolbar customization drop down (the tiny down arrow at the very top row of the Excel window, the last icon from left to right) choose "More Commands…". When the “Customize Quick Access Toolbar” dialog box comes up, from the (2nd) "Customize Quick Access Toolbar:" heading (top to the right), choose "For XYZ.xlsm" from the dropdown instead of the "For all documents (default)". And from under "Choose Commands From:", use "Macros" (instead of “Popular Commands”) from the dropdown. Once you have those two things selected, you can move VBA subs from the left box to the right box using “Add >>”. Each so moved will become buttons visible in your QAT. As you’re doing this you can also edit the icon and text for the buttons, add a separator as needed (I always end with a separator in case other .xlam’s use the QAT). (Now is a good time to save this .xlsm.)
Convert the .xlsm into a .xlam
Then I convert the .xlsm to an Excel add-in, by merely saving it as an .xlam file. This will end up (1) hiding the workbook associated with the code you have (though it is still accessible to itself.). Further, now, (2) the (invisible, as now it's an .xlam) workbook will load whenever Excel is loaded. (To keep this fast for when users use Excel but don’t run my VBA code, I don't run any code when the .xlam is loaded, I only run code when a button is pushed.)
You can manage the AddIn using Excel’s AddIn manager. To update the AddIn, you have to use some trickery. While you can copy over it when Excel is not running, on the other hand, you cannot directly uninstall the AddIn, you can only disable it from Excel. But once disabled, you can delete the .xlam, and relaunch Excel, go to the AddIn manager to try to work with the (now gone) AddIn and you’ll get Excel saying it can’t find it, so do you want to delete it. Say yes, and it will be uninstalled.
FYI, Notes
I keep the .xlsm to edit later, but you can actually debug and edit the .xlam and later convert it back to an .xlsm with a minor bit of trickery: find its "ThisWorkbook" entry in VBA, and then the "IsAddIn" property, set to false, its workbook will suddenly appear and you can save as .xlsm, or edit its workbook and set the property back to true to resave as .xlam directly.)
Answer 1
You can do that in VB.Net too. Just make a regular project. (comment by #SLaks)
This worked for me very well and was exactly what I was looking for.
Answer 2
The very descriptive answer posted by #ErikEidt
I haven't tried this, but it seems like a good and alternative way of getting macros to work.

Excel VBA - Call macro using add in

I have added a toolbar menu for my macro, so I can just press the button and it runs my macro from any excel document. Every time I run the macro though, it opens the source file containing the macro. Is there a way that it won't open the source file and just run the macro? (even opening and closing wouldn't too much of an issue, but I'd prefer not opening it at all)
I haven't been able to find any information about this, so all help to get me started is appreciated.
You can't pull code out of the air to run it; Excel's going to have to open the file the code's stored in to run the code.
If I understand it correctly, you can create an Excel add-in from your code and have the add-in load automatically when Excel starts. Your code will always be available in that case.
This seems like a good place to start:
http://msdn.microsoft.com/en-us/library/aa140990(v=office.10).aspx
USE YOUR PERSONAL MACRO WORKBOOK
Open the VBEditor and find the module containing your macro.
Copy that code.
Now in the VBProject Panel on the left, locate your PERSONAL.XLS or PERSONAL.XLSB project. This is the project where you store macros you want available at all times. Add a module to that project and put your code into it.
Now update your "button" so that it points to the macro in that workbook and you're good to go.
On the off chance your PERSONAL.XLS project does not exist, use the macro recorder to record a "junk" macro and be sure to set it to "Store Macro In: Personal Macro Workbook"... that will create it for you the first time.