VSTO: Really password-protect & hide MS Excel Worksheets - visual-studio

Is it possible to do the following two things with VSTO VB:
HIDING SHEETS: Prevent users from un-hiding worksheets that they are not meant to. The xlVeryHidden works great but it's almost easily overridden by using another workbook and writing a simple VBA macro to loop through and unhide them all. What is the best way to combat hidden sheets not been shown unless done by the VSTO VB code?
PASSWORD PROTECTING SHEETS: What is the best way to password-protect Excel worksheets in a VSTO VB project? Does VSTO offer any better method than VBA; which is a simple password-protection where the password is saved in an easily accessible XML document? Essentially, I've locked the worksheets only allowing certain ranges to be edited by the end users and they shouldn't be able to edit them.
I am using Visual Studio 2012, working on a MS Office 2013 Excel Workbook at a document-level.

You can set the property Visible to XlSheetVisibility.xlSheetVeryHidden in order to hide the worksheet. Your probably could try to disable macro by via Application.AutomationSecurity property then set it to msoAutomationSecurityForceDisable to disable macro.
There's a nice and neat tutorial about how to programmatically hide Excel worksheet. Please don't forget to take a look at it.
You can set your password to password-protect worksheets via Workbook.SaveAs method. Also, if you'd like to check if workbook is password protected via Workbook.HasPassword property. Also you can find this tutorial about how to protect worksheets.

Related

Excel-Addin with visible form

I have a query on the usage of windows form in excel add-in, application level.
Objective Statement:
Display customized windows form control, similar to a way a chart is being inserted into excel
Custom Pane
I have tried custom pane add-in but it seems to be on a entire workbook level, i need something on a worksheet level
Task Pane
I can't seem to use the task pane in application add-in for excel
Windows Form Control
When I click on a cell in excel i will lose focus to the windows form, i will need the windows to be together with the worksheet, but i can't use showdialog.
Thanks for the help in advance.
From your answer it is hard for me to figure out if you we are looking at a code solution here or something more high level, so I am going to assume that you are looking for a code solution, please correct me if I am wrong.
Have you considered using an OLE object or ActiveX?
There is an example from Microsoft here, how to develop an ActiveX control. (Here is some other walkthrough that I found helpful).
Just to give you a hint how it (the example mentioned above) looks like, here is the screenshot of the compiled example that I added onto the excel sheet:
ActiveX control can be added both manually, or by code, so I could imagine that you could also provide a COM Excel Add-in that would add some buttons onto the ribbon, that when pressed, would add the desired controls onto the sheet.

Choosing between Excel Add-In, Template and Workbook?

I'm looking for some high-level help with determining the best type of Visual Studio 2010 project to use for an Excel custom application.
I will be developing a program that requires the user to enter a dataset in a particular way. Not using a form per se, but rather in columns and the program will need to do some custom validation on the items in order to prep the data. From there, the user will be able to conduct various operations on the data via a custom Ribbon and associated options. The program will also transmit the data via web service.
I've fooled around with the Add-In project and that gives me a lot of what I need but I'm wondering if a Template or Workbook project is better for this in terms of data entry and being able to "guide" the user a little more.
How do you go about choosing between which project type to use? Do all the project types support a custom Ribbon?
Sorry if this is too far off topic. I'm referring to VBA, not Visual Studio, but it might still be relevant.
With an AddIn, compared to a Workbook, you can separate your code from the user's data. So, if the code is complex, and you'll need to update it separately from user's workbooks with data, this is not a bad idea.
With an AddIn, you can add buttons that do things like check to make sure the user data workbook is ok, or process it in someway. However, the AddIn custom buttons will load ever time a user opens any Excel worksheet. This doesn't sound good, but in practice, isn't so bad. You can code your AddIn so it does nothing as long as no one uses a button, so it almost doesn't hurt load times, etc...
A Workbook might be useful if you need to really guide the user - that is, you cannot rely on the user to hit a button to verify something, and instead you need to verify on every change, for example. However, the workbook solution incorporates the user data and your code in the same workbook, so if you need to update the code for existing users' data, that's harder.
I use a combination of AddIn (.xlam) with buttons, and a template (with minimal self-describing data only).
I'm not sure about the template-only option, so won't comment on that.

Excel functionality without Excel

Currently we have a system which we paid for that pushes information into Excel through a plugin and only into Excel. This is the way the product was designed. In a spreadsheet you enter a command which then pulls the appropriate data.
I wrote a few lines of code to save the data from excel into a SQL database and then push this information onto a webpage so it can be easily viewed.
The problem with this is that it requires Excel to be open 24/7. Every so often Excel will hiccup causing information to stop updating. This is easily fixed by restarting the Excel spreadsheet, but is tedious.
My question: is there any API which allows me to mimic Excel without having Excel open?
Are you looking for a spreadsheet component that can be embedded in an application. You can find a list here:
http://www.devdirect.com/all/SPREADSHEET_PCAT_1977.aspx
After some research on this it has become clear to me that there is no Excel API from Microsoft to allow access to Excel without excel.

Programatically configure Office 2010 Word Ribbon via VBA

Is it possible to configure a Ribbon (e.g. adding a tab etc.) in Office 2010 programatically via VBA? I.e. by writing VBScript code in a macro.
Br. Morten
You can manipulate a Ribbon tab and its controls using VBA, but you cannot create one. Not with the Object Model anyway. The best you could do - somehow - is to get some kind of OPC dll (like an ActiveX component) that handles opening/relationships/closing of OPC documents (like .docx documents) and old school MSXML for creating a ribbon definition and adding it to the package.
Have a look at this blog post for Excel
http://www.xtremevbtalk.com/showthread.php?t=265636
and this one for Word
http://www.wordarticles.com/Shorts/RibbonVBA/RibbonVBADemo.htm
If your UI is static, i.e. you don't need to programatically change the behavior of, or add/remove UI elements on the fly, you can define a customUI within a macro-enabled template. You can use your VBA functions as call-backs for the UI elements defined in the XML.
Have a look at this guide. In a nutshell, you define a customUI\customUI14.xml file within the .dotm archive. This XML describes your custom ribbon elements using this schema.
This definitely works for Word templates (.dotm files). I think a similar approach works for any OOXML format.

Inject Open XML into an Open PowerPoint Presentation

I'm looking for a way to inject PresentationML and/or DrawingML into an open PowerPoint 2007/2010 presentation using the Open XML SDK or just System.IO.Packaging. There is an article on doing this with Word, but in that example it is using the Range.XML routine in Word's object model, which I cannot find an equivalant for in PowerPoint's object model.
The reason I'm looking to do this is if I have an item on it that the PowerPoint client does not support editing of but that Open XML does (and as a result, PowerPoint will display it). I want to set this myself via a managed-addin (VSTO) on the open presentation. An example would be the underline of text (not that I'm looking for this, but it is an example) - in PowerPoint, you cannot make the underline of text a picture <a:blip/>, but in Open XML you can.
Does anyone know how to do this?
I am using both OpenXML SDK 2 and the Object Model to process presentations.
What I do, simplistic as it sounds, is to save the presentation, close it, perform all the XML modifications I need using OpenXML SDK, and then load the presentation back and continue with the Object Model.
Nope, according to Microsoft support: http://www.ureader.com/msg/10972430.aspx

Resources