Lunatik
Lunatik

Reputation: 3948

Process for updating Excel add-in?

I have an Excel 2003 add-in deployed in one of our departments that occasionally needs updated. What currently happens is that I publish the new version from my machine to a central location, this updates a version number stored in a database that the add-in checks each time any of the modules within it are run, and if a newer version number is found then the add-in halts with a message informing the user that they need to update the add-in.

This currently involves them running another workbook with a workbook_open event that changes the add-in.

What I'd like to have is the add-in detect that a newer version is available and silently install it before carrying on with the user's operation. The problem is that this fails on the first step of uninstalling the existing version because any code in the add-in immediately finishes when the add-in in uninstalled.

I would create some code in the user's personal.xls on-the-fly to handle the changeover but I am unable to set the 'Trust access to Visual basic project' flag in the users' machines so can't have replicating code in the add-in.

The only way I can see from here is to have two add-ins, one that handles the updates and one that actually does the work. The problem comes when I inevitably have to update the update add-in!

Can anyone else suggest a better solution? This must be 100% Excel, no VSTO etc.

Upvotes: 3

Views: 19358

Answers (6)

Son Goku ssj4
Son Goku ssj4

Reputation: 51

Because I didn't find the 'workflow' anywhere I'll post my experience from yesterday when I dealt with almost the same problem. (No automatic updates)

In the @Lunatik's link to dilydoseofexcel.com, Charles posted his Addin (downloadable from http://www.decisionmodels.com/downloads.htm#addload) which resolved my situation.

Prerequisites

Any user that wants to use plugins that are on the remote server has to add the AddLoaderV2.xla addin.

From Excel: Developer Tab - Excel Add-ins - Browse - ...\AddLoaderV2.xla - select 'NO' when asked to copy it locally

Structures

  • Server side folder structure
T:\my\remote\folder\SOFTWARE\MSOFFICE\Excel_Add-ins
.
├── AddinLoad.txt
├── AddLoaderV2.xla
└── USER_SonGokussj4
    ├── FinancialFunctions_v0.0.1.xlam
    ├── FinancialFunctions_v0.0.2.xlam
    └── dev_FinancialFunctions_v0.0.3.xlam
  • AddinLoad.txt contents
FinancialFunctions, auto, T:\my\remote\folder\SOFTWARE\MSOFFICE\Excel_Add-ins\USER_SonGokussj4\

Note: The prefix USER of the folder is just my preference I because maintain addins for a big number of people.

My Workflow (updating Addin)

  • When I want to update FinancialFunctions_v0.0.2.xlam, I make a copy (because v0.0.2 is used by many people): dev_FinanctialFunction_v0.0.3.xlam
  • I open the v0.0.3 and make needed changes
  • When I'm done, I rename it to FinanctialFunctions_v0.0.3.xlam
  • I send an e-mail to my department, that new version is available
  • Now every new opened Excel will auto load (defined within AddinLoad.txt) the v0.0.3
  • If user don't want to close their Excel, in Addins Tab, there is: https://i.sstatic.net/BULMD.png so the user just select the Addin to reload

Closure

I imagine it won't be a lot of work to do some automatization from your Addin like "check if new version is available, if yes, call the reload function of the AddLoaderV2 Addin."

Hope this helps someone. My biggest problem was understanding the naming of the .xlam files and AddinLoad.txt root name to always load only the newest version. There is a 3-page readme when you download his Addin.

Charles to the rescue! Have a great day.

Now I have to find something similar to load PowerPoint addins...

Upvotes: 0

Robin Hammond
Robin Hammond

Reputation:

We use a separate addin as a bootstrapper.

  1. The main addin can update the bootstrapper
  2. If the main addin needs an update, it loads the bootstapper, then uses an OnTime call to schedule a call to the bootstrap routine in the bootstrap and immediately unloads itself.
  3. The ontime call executes.
  4. bootstrapper loads main addin, relaunches main addin, unloads itself.

Complicated, but it works.

Upvotes: 4

Lunatik
Lunatik

Reputation: 3948

It was nice of Dick Kusleika to blog about managing add-ins today!

http://www.dailydoseofexcel.com/archives/2009/07/29/conditionally-load-excel-add-ins/

Some good suggestions that can be applied to my situation there.

Upvotes: 3

krzysztof
krzysztof

Reputation:

I tried something different, step as following: 1. write an addin and put it on shared drive space 2. add the project to VBA references 3. your functions and macros used in excel sheets add as references to addins every time excel sheet loads, new addin and references refreshes.

i chabge the solution to update button, because of problems when network is not online.

Upvotes: 0

geejay
geejay

Reputation: 5618

Using out of the box ClickOnce deployment, the add-in version is checked whenever the app using it (Excel) starts. Not sure if you can deploy non-managed code in this way.

Upvotes: 0

lprsd
lprsd

Reputation: 87077

One way I achieved something similar, albeit, a while ago is as follows:

Provide a button called Update on a common page (may be a common file, if you are using many) and when users click that, it opens a xls in a network location and copies the code from that file to the local file and closes the newly opened files.

That way, whenever I had an update, I would send an email asking them to update code locally.

It worked as I had few users and updates were fairly few in number. If you want an auto update, what prevents you from checking the version number during each and every opening of the file.

Upvotes: 0

Related Questions