<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>edhild's WebLog : VSTO 2005</title><link>http://blogs.msdn.com/edhild/archive/tags/VSTO+2005/default.aspx</link><description>Tags: VSTO 2005</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Video: Building Presentations from SharePoint Site Content</title><link>http://blogs.msdn.com/edhild/archive/2008/01/03/video-building-presentations-from-sharepoint-site-content.aspx</link><pubDate>Thu, 03 Jan 2008 19:31:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:6969508</guid><dc:creator>edhild</dc:creator><slash:comments>7</slash:comments><comments>http://blogs.msdn.com/edhild/comments/6969508.aspx</comments><wfw:commentRss>http://blogs.msdn.com/edhild/commentrss.aspx?PostID=6969508</wfw:commentRss><description>&lt;P&gt;First sorry for the long time away from posting. It was quite a busy fourth quarter. But welcome to 2008! &lt;/P&gt;
&lt;P&gt;I put together a quick video blog of two demonstrations I show about how to automate the creation of PowerPoint presentations based on SharePoint site content. The first part of the demo shows how a Visual Studio Tools for Office add-in for PowerPoint can call SharePoint's web services to retrieve content and build slides. The second approach shows how this can be done completely server side by manipulating the new Open XML formatted files. Both demos usually get people excited; I hope you enjoy them. The code for these is available on Apress' web site since they are from my book: Pro SharePoint Solution Development. This book is mentioned a lot in the blog so it should be easy to find more info if you are interested. Sorry for the background noise in the video. The HVAC system here is running full strength on this cold day.&lt;/P&gt;
&lt;P&gt;Also, I will be presenting at the upcoming SharePoint conference in Seattle in March. My topic will be "Enforce Governance by Provisioning Sites through Workflows" or something like that. Stop by and say hi. I may have a few books to hand out. &lt;A href="http://www.mssharepointconference.com/Pages/default.aspx" mce_href="http://www.mssharepointconference.com/Pages/default.aspx"&gt;http://www.mssharepointconference.com/Pages/default.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;Just an update: Ian at wssdemo.com has hosted this video on a streaming server which has much better quality: &lt;SPAN lang=EN-NZ style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-fareast-theme-font: minor-latin; mso-ansi-language: EN-NZ; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;A href="http://xpstream.winisp.net/imorrish/generate_ppt_sharepoint.wmv"&gt;&lt;FONT color=#0000ff&gt;http://xpstream.winisp.net/imorrish/generate_ppt_sharepoint.wmv&lt;/FONT&gt;&lt;/A&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;EMBED pluginspage=http://macromedia.com/go/getflashplayer src=http://images.soapbox.msn.com/flash/soapbox1_1.swf width=432 height=364 type=application/x-shockwave-flash flashvars="c=v&amp;amp;v=272932c4-576a-47ea-9f8e-66b6bb424c04" wmode="transparent" quality="high" mce_src="http://images.soapbox.msn.com/flash/soapbox1_1.swf"&gt;&lt;/EMBED&gt;&lt;BR&gt;&lt;A title="Building Presentations from SharePoint Content" href="http://soapbox.msn.com/video.aspx?vid=272932c4-576a-47ea-9f8e-66b6bb424c04" target=_new mce_href="http://soapbox.msn.com/video.aspx?vid=272932c4-576a-47ea-9f8e-66b6bb424c04"&gt;Video: Building Presentations from SharePoint Content&lt;/A&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=6969508" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/edhild/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://blogs.msdn.com/edhild/archive/tags/VSTO+2005/default.aspx">VSTO 2005</category><category domain="http://blogs.msdn.com/edhild/archive/tags/Office+2007/default.aspx">Office 2007</category><category domain="http://blogs.msdn.com/edhild/archive/tags/SharePoint+2007+book/default.aspx">SharePoint 2007 book</category></item><item><title>Almost finished my book... Pro SharePoint Solution Development: Combining .NET, SharePoint, and Office 2007</title><link>http://blogs.msdn.com/edhild/archive/2006/12/08/almost-finished-my-book-pro-sharepoint-development-combining-net.aspx</link><pubDate>Sat, 09 Dec 2006 06:49:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1243408</guid><dc:creator>edhild</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/edhild/comments/1243408.aspx</comments><wfw:commentRss>http://blogs.msdn.com/edhild/commentrss.aspx?PostID=1243408</wfw:commentRss><description>&lt;P&gt;So I have not been posting for quite some time. The major reason is that every moment outside of work is being put into this latest effort. The book is called "Pro SharePoint Solution Development: Combining .NET, SharePoint, and Office 2007". It is going to be published by Apress in the spring. I'm nearing the point where most of the first drafts are complete and people are seeing my name on Amazon.com, sooooo&amp;nbsp;I figured it was time to start sharing.&lt;/P&gt;
&lt;P&gt;The book is for developers and focuses on solution development using Office 2007, Microsoft Office SharePoint Server 2007, and Visual Studio Tools for Office 2005 SE. With these three major components, we are able to tackle some common problems facing information workers as they try to collaborate, use data effectively, etc. After a few overview chapters on each technology, the other chapters are self contained problems/solutions. &lt;/P&gt;
&lt;P&gt;I have posted a page containing more details and the current state of the table of contents. I will use this blog to elaborate as we finish the book up: &lt;A href="http://blogs.msdn.com/edhild/pages/pro-sharepoint-solution-development-combining-net-sharepoint-and-office-2007.aspx"&gt;http://blogs.msdn.com/edhild/pages/pro-sharepoint-solution-development-combining-net-sharepoint-and-office-2007.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Come back for updates! Thanks -Ed&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1243408" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/edhild/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://blogs.msdn.com/edhild/archive/tags/VSTO+2005/default.aspx">VSTO 2005</category><category domain="http://blogs.msdn.com/edhild/archive/tags/Office+2007/default.aspx">Office 2007</category><category domain="http://blogs.msdn.com/edhild/archive/tags/MOSS/default.aspx">MOSS</category></item><item><title>VSTO Task Pane Structure</title><link>http://blogs.msdn.com/edhild/archive/2005/09/20/472086.aspx</link><pubDate>Wed, 21 Sep 2005 03:06:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:472086</guid><dc:creator>edhild</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/edhild/comments/472086.aspx</comments><wfw:commentRss>http://blogs.msdn.com/edhild/commentrss.aspx?PostID=472086</wfw:commentRss><description>&lt;P&gt;So my goal with this post is to show you how I am planning to structure my Task Pane controls to provide flexibility. At this point, all I really have is a plan and I'll let you know if it works out as the project continues. I started with what I think is common sense. My task pane is really three controls: TaskPaneHeader, TaskPaneFooter, and TaskPaneBody. The decision here is to separate the header and the footer so I can have persistant controls like a toolbar and a status label. The TaskPaneBody which sits in the middle is basically a container for other controls which are really the rich UI portions of the TaskPane. I setup these intial structures in the Workbook startup:&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;Friend WithEvents m_taskPaneHeader As TaskPaneHeader&lt;BR&gt;Friend WithEvents m_taskPaneBody As TaskPaneBody&lt;BR&gt;Friend WithEvents m_taskPaneFooter As TaskPaneFooter&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;Private Sub ThisWorkbook_Startup(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Startup&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SetupTaskPane()&lt;BR&gt;End Sub&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;Private Sub SetupTaskPane()&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; With Me.Application.CommandBars("Task Pane")&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .Width = 300&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .Position = Microsoft.Office.Core.MsoBarPosition.msoBarLeft&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; End With&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Globals.Sheet1.Select()&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; m_taskPaneHeader = New TaskPaneHeader()&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; m_taskPaneBody = New TaskPaneBody()&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; m_taskPaneFooter = New TaskPaneFooter()&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; m_taskPaneHeader.Dock = DockStyle.Top&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; m_taskPaneFooter.Dock = DockStyle.Bottom&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Me.ActionsPane.Controls.Add(m_taskPaneHeader)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Me.ActionsPane.Controls.Add(m_taskPaneBody)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Me.ActionsPane.Controls.Add(m_taskPaneFooter)&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;End Sub&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;So far I only have one control that I am loading into the TaskPaneBody. The following control called "Browse" is added by default right now. So in TaskPaneBody, I have the following code:&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;Public Class TaskPaneBody&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Friend WithEvents m_Browse As Browse&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Private Sub TaskPaneBody_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; m_Browse = New Browse()&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Me.Controls.Add(m_Browse)&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; End Sub&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Private Sub m_Browse_BrowseDate(ByVal NewDate As Date) Handles m_Browse.BrowseDate&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Globals.Sheet1.CalStartDate.Value2 = NewDate&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; End Sub&lt;BR&gt;End Class&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;This code actually has an instance of the Browse control. Eventually I will need a mechanism to hide and show the different controls that will be in this container. The Body control alsy give me a place to respond to events. The event handler that you see above is when someone changes the date in my DateTimePicker control in the Browse control, a namedrange cell gets its value set to that date. In a bit you'll see how this assignment actually changes my interface.&lt;/P&gt;
&lt;P&gt;Now in the Browse control itself, I have two main controls. One is the DateTimePicker mentioned previously. The other is simply a label which I am currently using to display the selected cell within a large set of cells in my spreadsheet. This will be obvious in a later post as I hope to use this connectivity to allow this areas of the control to display detail information from the dataset. The code in the Browse control is as follows:&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;Public Class Browse&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Public Event BrowseDate(ByVal NewDate As Date)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Private WithEvents m_EngagmentCells As NamedRange = Globals.Sheet1.EngagementCells&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Private Sub DateTimePicker1_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DateTimePicker1.ValueChanged&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; RaiseEvent BrowseDate(DateTimePicker1.Value)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; End Sub&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Private Sub m_EngagmentCells_SelectionChange(ByVal Target As Microsoft.Office.Interop.Excel.Range) Handles m_EngagmentCells.SelectionChange&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Me.Label2.Text = Target.Address.ToString()&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; End Sub&lt;BR&gt;End Class&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;So you can see here that I have an event that is raised as the DateTimePicker is used. I also have my own hander here when someone moves around within my Engagement Cells namedrange. This range is the intersection of my root values in the first column and the dates across the top. Here is the promised pic:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://h1.ripway.com/edhild/vtso1.JPG"&gt;Screen Shot&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;The only other interesting this here, is to mention that the DateTimePicker is only setting the first date column. The others are only forumla based with a reference to that cell with a "+n". Make sure the columns are formatted to display as a date.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=472086" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/edhild/archive/tags/VSTO+2005/default.aspx">VSTO 2005</category></item><item><title>Detecting Offline State</title><link>http://blogs.msdn.com/edhild/archive/2005/09/19/471584.aspx</link><pubDate>Tue, 20 Sep 2005 04:49:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:471584</guid><dc:creator>edhild</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/edhild/comments/471584.aspx</comments><wfw:commentRss>http://blogs.msdn.com/edhild/commentrss.aspx?PostID=471584</wfw:commentRss><description>&lt;P&gt;So for my VSTO project, I need to be able to detect if I am in an online state. This detection will be pivotal in deciding if I should or can retrieve new data from my data providers (these include SharePoint and some other applications). I wanted to be able to key off of Internet Explorer's "Work Offline" feature so that I could easily test my offline state. I wrapped this functionality in a class called ConnectionManager. It really is just a wrapper around the Win32 call to InternetGetConnectedState. This checks to see if there is an internet connection defined and additionally if it is online or not. Here is the class:&lt;/P&gt;
&lt;P&gt;Public Class ConnectionManager&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Private Declare Function InternetGetConnectedState Lib "wininet.dll" (ByRef lpdwFlags As Int32, ByVal dwReserved As Int32) As Boolean&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Private Const CONNECT_LAN As Long = &amp;amp;H2&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Private Const CONNECT_MODEM As Long = &amp;amp;H1&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Private Const CONNECT_PROXY As Long = &amp;amp;H4&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Private Const CONNECT_OFFLINE As Long = &amp;amp;H20&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Private Const CONNECT_CONFIGURED As Long = &amp;amp;H40&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Private Const CONNECT_RAS As Long = &amp;amp;H10&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Public Shared Function IsWebConnected(Optional ByRef ConnType As String = "") As Boolean&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim dwflags As Long&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim WebTest As Boolean&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WebTest = InternetGetConnectedState(dwflags, 0&amp;amp;)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Select Case WebTest&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Case dwflags And CONNECT_LAN : ConnType = "LAN"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Case dwflags And CONNECT_MODEM : ConnType = "Modem"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Case dwflags And CONNECT_PROXY : ConnType = "Proxy"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Case dwflags And CONNECT_OFFLINE : ConnType = "Offline"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Case dwflags And CONNECT_CONFIGURED : ConnType = "Configured"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Case dwflags And CONNECT_RAS : ConnType = "Remote"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; End Select&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Return WebTest&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; End Function&lt;BR&gt;End Class&lt;/P&gt;
&lt;P&gt;So in my startup routine in my spreadsheet I can test to see the connectivity state:&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color=#9acd32&gt;'Are we connected and online&lt;BR&gt;&lt;/FONT&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim connType As String = String.Empty&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim isOnline As Boolean = ConnectionManager.IsWebConnected(connType)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; isOnline = isOnline And connType &amp;lt;&amp;gt; "Offline"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color=#9acd32&gt;'Load data&lt;BR&gt;&lt;/FONT&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; If (isOnline) Then&lt;/P&gt;
&lt;P&gt;Notice that I have to check both that there is a connection and that the return type was not Offline. This seems to be needed since even an offline IE still returns true from the interop call.&lt;/P&gt;
&lt;P&gt;Coming Soon:&lt;BR&gt;My next writeup will have my task pane structure and a screen shot of what I'm actually building!&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=471584" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/edhild/archive/tags/VSTO+2005/default.aspx">VSTO 2005</category></item><item><title>My first "complex" VSTO 2005 Project</title><link>http://blogs.msdn.com/edhild/archive/2005/09/13/465243.aspx</link><pubDate>Wed, 14 Sep 2005 03:46:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:465243</guid><dc:creator>edhild</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/edhild/comments/465243.aspx</comments><wfw:commentRss>http://blogs.msdn.com/edhild/commentrss.aspx?PostID=465243</wfw:commentRss><description>&lt;P&gt;I know I am behind in posting materials in the resource center... working on that. Actually I got caught up in trying to build a project with VSTO instead.&lt;/P&gt;
&lt;P&gt;So, I've started putting my experiences to good use and have begun development on an Excel based VSTO 2005 project. We have an application here at the MTC that handles all our scheduling info. It is currently built just using Excel linked lists to SharePoint. The problem here is that the complex calendar view is really read-only and you have to go to other sheets and make edits once you have found your entry. Plus there really should be some data from other data sources presented here. So my project got off to a great start. I decided to start with a single dataset as my data source. This was a dataset that I constucted in Visual Studio since my data will really be coming from a lot of different sources. The goal is to use the offline caching capability and then I would write a manager that applies the changes and syncs with the authoritative sources. So as much as I prefer C#, I've forced myself to use VB.NET just because the COM interop syntax seems easier in VSTO.&lt;/P&gt;
&lt;P&gt;So my first task&amp;nbsp;was to databind to some root data tables with list objects&amp;nbsp;down the left hand side of the spreadsheet. This was extremely easy with the databinding experience provided by VSTO. Pretty much drag and drop. But my lists each had a header and a footer that enabled new entries to be added. For my application, I wanted these three lists to really blend together without distinct headers or that footer. I gave up trying to find a property that simply turned them off and added some code that used the length of the list in order to hide these rows:&lt;/P&gt;
&lt;P&gt;Private Sub HideRows()&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Me.Rows(Me.resourcesListObject.HeaderRowRange.Row).Hidden = True&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Me.Rows(Me.roomsListObject.HeaderRowRange.Row).Hidden = True&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Me.Rows(Me.showsListObject.HeaderRowRange.Row).Hidden = True&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Me.Rows(Me.resourcesListObject.HeaderRowRange.Row + Me.resourcesListObject.Range.Count).Hidden = True&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Me.Rows(Me.roomsListObject.HeaderRowRange.Row + Me.roomsListObject.Range.Count).Hidden = True&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Me.Rows(Me.showsListObject.HeaderRowRange.Row + Me.showsListObject.Range.Count).Hidden = True&lt;BR&gt;End Sub&lt;/P&gt;
&lt;P&gt;One thing I noticed is a missed feature of the Excel menu merge with Visual Studio. This feature of VSTO is supposed to provide the Excel menu options within Visual Studio. The problem is that they seem to have forgotten "Freeze Panes" which is supposed to be merged into the "Window" menu tab. Ooops! You could always start your project with a spreadsheet that has the panes frozen to begin with. Or in my case (I discovered it way too late), I froze the panes after running the program and just made sure to save the spreadsheet.&lt;/P&gt;
&lt;P&gt;Here are some tasks I'm working on now that I will blog about soon:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Setting up my task pane control structures 
&lt;LI&gt;Adding a date picker in the task pane so that when a date is chosen a whole row of date columns updates with that date as the first column 
&lt;LI&gt;Resizing the named range which is my interesection of the above lists and the date columns
&lt;LI&gt;Building a wrapper for detecting if the user is "online" or "offline"&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;I'll include some screen shots of progress as I get things going...&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=465243" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/edhild/archive/tags/VSTO+2005/default.aspx">VSTO 2005</category></item></channel></rss>