<?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>John R. Durant's WebLog : Microsoft Office System</title><link>http://blogs.msdn.com/johnrdurant/archive/tags/Microsoft+Office+System/default.aspx</link><description>Tags: Microsoft Office System</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Why VBA Still Makes Sense</title><link>http://blogs.msdn.com/johnrdurant/archive/2009/09/07/why-vba-still-makes-sense.aspx</link><pubDate>Mon, 07 Sep 2009 13:32:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9892227</guid><dc:creator>johnrdurant</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/johnrdurant/comments/9892227.aspx</comments><wfw:commentRss>http://blogs.msdn.com/johnrdurant/commentrss.aspx?PostID=9892227</wfw:commentRss><description>&lt;P&gt;Not infrequently I am asked, “So, should I use VBA? Is it going to be around in Office 2010? Is it supported? Should I migrate away from VBA now? Can I count on this technology?” (Here I go with a response!)&lt;/P&gt;
&lt;P&gt;These are fair questions, because customers need to know that the software systems they employ are ones they can count on. There’s no question that the IT landscape in terms of teams, tools, software, networks, and so forth have changed dramatically since 1993, when VBA, or Visual Basic for Applications, made its way into Excel. But, VBA still has a place in this world. It still makes sense, and I’ll explain why.&lt;/P&gt;
&lt;P&gt;First, here are some answers: 1) VBA is included in Office 2010 much as it was in Office 2007. 2) It is indeed supported 3) You should continue to use VBA where it fits the needs of your business and migrate only if the need arises.&lt;/P&gt;
&lt;P&gt;Let me elaborate on #3 a little more, because it is the locus of most questions and issues.&lt;/P&gt;
&lt;P&gt;In contrast to 1993, business productivity solution developers on the Microsoft Office platform have more options in terms of what they use to create, build, deploy, and maintain solutions. For example, many developers now target the .NET Framework, and they are accustomed to using VB.NET, C#, or another .NET-compatible language. Many of these developers use Visual Studio .NET, and they are building a wide variety of solutions that integrate Web, databases, middleware, and client applications. More importantly, the user experience is quite different from 1993. Now, users are working in a highly collaborative, real-time sharing, online/offline, mobile, global world. They are populating documents with data from a wide variety of sources, and they are re-purposing the documents and data in very creative ways.&lt;/P&gt;
&lt;P&gt;In 1993, users worked mostly in a monovalent way. Work was done in an exclusive application that didn’t have the broad reach into databases and Web sites like today. Importing CSV files was the primary way of ‘reaching’ into other data. Sharing consisted of saving a spreadsheet up to a file share. Customizing the application was primarily the task of users. Most IT departments had other things on their mind than tinkering with Office customizations. VBA gained huge popularity because of its ability to allow a non-greenscreen programmer to customize her or his application experience. For example, a user could write a VBA ‘script’ or macro that would automate repetitive tasks and save a ton of time. Over the years, many hundreds of millions of documents have been imbued with this kind of code and saved users untold numbers of hours.&lt;/P&gt;
&lt;P&gt;The good news: Even though the user context has changed a lot since 1993, 1997 and beyond, using VBA can still help users save time and effort by automating tasks and customizing their Microsoft Office experience. And, as the application features have evolved to adapt to new user needs has also evolved and grown. Gladly, VBA has remained in step with these evolutionary changes. For example: a great little routine I wrote a long time ago is some VBA that I hooked up to a custom button in Outlook. It allows me, with the click of a button, to save off the attachments for any number of selected emails. The code loops through all selected emails, saves the attachments to a central location I have designated with some logic about how they are stored there so I can sort and find them easily. It then optionally deletes the selected emails. It’s a great little routine that saves me lots of time.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;So, what’s the VBA authoring experience like? What are the advantages?&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;1. You can record macros in some of the applications. So, if there is a task you do over and over, just start the macro recorder and the Office application will communicate with the VBA environment for you and write the code for you. You can then re-run this macro any time to run the steps automatically.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/johnrdurant/WindowsLiveWriter/WhyVBAStillMakesSense_9A30/VBARecordMacro%5B1%5D_2.png" mce_href="http://blogs.msdn.com/blogfiles/johnrdurant/WindowsLiveWriter/WhyVBAStillMakesSense_9A30/VBARecordMacro%5B1%5D_2.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title="Recording macros is easy" border=0 alt="Recording macros is easy" src="http://blogs.msdn.com/blogfiles/johnrdurant/WindowsLiveWriter/WhyVBAStillMakesSense_9A30/VBARecordMacro%5B1%5D_thumb.png" width=208 height=145 mce_src="http://blogs.msdn.com/blogfiles/johnrdurant/WindowsLiveWriter/WhyVBAStillMakesSense_9A30/VBARecordMacro%5B1%5D_thumb.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;2. OK—recording macros is great, but it’s not always enough. And, there are some applications that, while not endowed with full macro-recording capability, still allow you to write the code yourself. VBA really sets itself apart by having such a rich set of built-in tools. First, you have a rich Visual Basic Editor (VBE).&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/johnrdurant/WindowsLiveWriter/WhyVBAStillMakesSense_9A30/VBEditor%5B1%5D_2.png" mce_href="http://blogs.msdn.com/blogfiles/johnrdurant/WindowsLiveWriter/WhyVBAStillMakesSense_9A30/VBEditor%5B1%5D_2.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title="Visual Basic Editor (VBE)" border=0 alt="Visual Basic Editor (VBE)" src="http://blogs.msdn.com/blogfiles/johnrdurant/WindowsLiveWriter/WhyVBAStillMakesSense_9A30/VBEditor%5B1%5D_thumb.png" width=244 height=184 mce_src="http://blogs.msdn.com/blogfiles/johnrdurant/WindowsLiveWriter/WhyVBAStillMakesSense_9A30/VBEditor%5B1%5D_thumb.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;This is the environment for authoring VBA code. The VBE has Intellisense which makes it very easy to call into the application and pass the right information.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/johnrdurant/WindowsLiveWriter/WhyVBAStillMakesSense_9A30/Intellisense%5B1%5D_2.png" mce_href="http://blogs.msdn.com/blogfiles/johnrdurant/WindowsLiveWriter/WhyVBAStillMakesSense_9A30/Intellisense%5B1%5D_2.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=Intellisense border=0 alt=Intellisense src="http://blogs.msdn.com/blogfiles/johnrdurant/WindowsLiveWriter/WhyVBAStillMakesSense_9A30/Intellisense%5B1%5D_thumb.png" width=244 height=119 mce_src="http://blogs.msdn.com/blogfiles/johnrdurant/WindowsLiveWriter/WhyVBAStillMakesSense_9A30/Intellisense%5B1%5D_thumb.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;You also have integrated Help. If you are unsure what to type, what a specific method does, etc., just press F1, and the help system will give you the information, and, in many many cases, a sample of what to type.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/johnrdurant/WindowsLiveWriter/WhyVBAStillMakesSense_9A30/ExcelVBAHelp%5B1%5D_2.png" mce_href="http://blogs.msdn.com/blogfiles/johnrdurant/WindowsLiveWriter/WhyVBAStillMakesSense_9A30/ExcelVBAHelp%5B1%5D_2.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title="Integrated developer help" border=0 alt="Integrated developer help" src="http://blogs.msdn.com/blogfiles/johnrdurant/WindowsLiveWriter/WhyVBAStillMakesSense_9A30/ExcelVBAHelp%5B1%5D_thumb.png" width=181 height=244 mce_src="http://blogs.msdn.com/blogfiles/johnrdurant/WindowsLiveWriter/WhyVBAStillMakesSense_9A30/ExcelVBAHelp%5B1%5D_thumb.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;VBE also has debugging tools. While writing your code or even just looking at a recorded macro, you might want to run the code but stop at a certain location and see what the code is doing. &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;A href="http://blogs.msdn.com/blogfiles/johnrdurant/WindowsLiveWriter/WhyVBAStillMakesSense_9A30/DebugVBA%5B1%5D_2.png" mce_href="http://blogs.msdn.com/blogfiles/johnrdurant/WindowsLiveWriter/WhyVBAStillMakesSense_9A30/DebugVBA%5B1%5D_2.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title="Debugging in VBA" border=0 alt="Debugging in VBA" src="http://blogs.msdn.com/blogfiles/johnrdurant/WindowsLiveWriter/WhyVBAStillMakesSense_9A30/DebugVBA%5B1%5D_thumb.png" width=273 height=104 mce_src="http://blogs.msdn.com/blogfiles/johnrdurant/WindowsLiveWriter/WhyVBAStillMakesSense_9A30/DebugVBA%5B1%5D_thumb.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;There are lots of &lt;A href="http://support.microsoft.com/kb/142999/" target=_blank mce_href="http://support.microsoft.com/kb/142999/"&gt;other debugging tools&lt;/A&gt; that let you alter code on the fly and gain greater insight into what the code is doing.&lt;/P&gt;
&lt;P&gt;Additionally, VBE lets you easily reference applications and code that is not in your immediate project.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/johnrdurant/WindowsLiveWriter/WhyVBAStillMakesSense_9A30/ReferencesDialog%5B1%5D_4.png" mce_href="http://blogs.msdn.com/blogfiles/johnrdurant/WindowsLiveWriter/WhyVBAStillMakesSense_9A30/ReferencesDialog%5B1%5D_4.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title="Referencing code outside your project" border=0 alt="Referencing code outside your project" src="http://blogs.msdn.com/blogfiles/johnrdurant/WindowsLiveWriter/WhyVBAStillMakesSense_9A30/ReferencesDialog%5B1%5D_thumb_1.png" width=244 height=197 mce_src="http://blogs.msdn.com/blogfiles/johnrdurant/WindowsLiveWriter/WhyVBAStillMakesSense_9A30/ReferencesDialog%5B1%5D_thumb_1.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Has a co-worker created a special collection of code routines that everyone typically needs or uses when writing VBA solutions? No problem, just reference this external code, and it’s now available in your VBA solution. Above all, the VBA syntax is pretty easy to learn. It’s based on BASIC (there’s an intriguing history tracing through QBasic, Alan Cooper, and so forth that I won’t go into here), so it’s pretty easy to get into and start using.&lt;/P&gt;
&lt;P&gt;For example, here’s some syntax that checks, when my document is closed, to see if I left comments in there (fortunately, in Office 2007 we made it easier to scub docs of this kind of thing without needing a custom macro, but you get the idea):&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;Private Sub Document_Close()&lt;BR&gt;&lt;/FONT&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT color=#0000ff&gt;If&lt;/FONT&gt; Me.Comments.Count &amp;gt; 0 &lt;FONT color=#0000ff&gt;Then&lt;/FONT&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MsgBox "Hey-- you forgot to remove comments", vbInformation, "Comment Removal"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT color=#0000ff&gt;End If&lt;BR&gt;End Sub&lt;/FONT&gt; 
&lt;P&gt;With very little effort, I could write code that would loop through the entire collection of comments in the document and save them all to a database. If I get stuck, there is a ton of additional help, samples, tutorials, and so forth on the &lt;A href="http://msdn.microsoft.com/office" target=_blank mce_href="http://msdn.microsoft.com/office"&gt;MSDN Office Developer Center&lt;/A&gt;. There is also a very active community (see the Community section of the MSDN site) with Newsgroups, MVPs, and more to help me make progress.&lt;/P&gt;
&lt;P&gt;Finally, the language of VBA is pretty easy to learn, and it has a fair amount of power. There is good control of flow language (If…Then, &lt;A href="http://support.microsoft.com/kb/141691/" target=_blank mce_href="http://support.microsoft.com/kb/141691/"&gt;Select Case&lt;/A&gt;) and so much more.&lt;/P&gt;
&lt;P&gt;3. VBA is a great all-in-one kit for customizing your Office experience&lt;/P&gt;
&lt;P&gt;All of the things I have shared up to this point are included with Office out-of-the-box. You can start developing a custom little solution today with what is included in the software on your desktop. Also, you can extend the reach of your little solution by connecting to external code libraries. We also have design the Office applications themselves to be Web-aware. For example, you can connect to Web sites in Excel and import their data directly into a workbook. Using VBA, you can write code to alter which site the user connects to. You can add little buttons to the users Ribbon so they can click one button and import from one site, click another button and import from another site. The possibilities are endless and are bound only by your imagination. In short, the out-of-the-box Microsoft Office experience is great. People love what it can do. But, there will always be a need to customize the applications to fit more specific needs, automate tasks, and reduce busy work. VBA has been and continues to be a great way to meet those needs.&lt;/P&gt;
&lt;P&gt;4. But, what about .NET? Aren’t there great development tools in Visual Studio .NET for creating Office-based solutions?&lt;/P&gt;
&lt;P&gt;Yes! Visual Studio .NET has an excellent set of tools that allow you to create solutions targeting the Office applications like Excel, Word, PowerPoint, and Outlook. Solutions built using Visual Studio and using .NET code to customize the Office experience are created in a very different way, with different tools, and with different requirements. Visual Studio .NET is a set of professional developer tools. There is more to learning Visual Studio’s tools, IDE and so forth than you need to know to use VBA. Also, because Visual Studio targets .NET code, there are different security, deployment, and maintenance requirements than for VBA. In short, VBA is probably an easier way to begin customizing the Office experience for many users, especially those with less technical expertise. This does not mean that Visual Studio development is particularly difficult. It only means that it requires sacrificing a little more lunch time to learn what’s involved. VBA’s simplicity makes it a great candidate for a lot of ad hoc automation tasks.&lt;/P&gt;
&lt;P&gt;Visual Studio and .NET do provide some appealing aspects to your solution. For example, .NET provides a layer of strong security to your solution that VBA does not provide. But, overall, in my view, the main reason for creating solutions in Visual Studio .NET is to take advantage of the professional development environment, IDE, security, and so forth to create multi-tiered, industrial-strength solutions. Also, it is really, really hard to not be completely won over by how Visual Studio .NET’s Office tools create strongly typed objects out of items you add to the document surface. For example, if I add a content control to a Word document, Visual Studio automatically declares a .NET object representing this content control. Additionally, it is very easy to create task pane solutions in Office using Visual Studio .NET. With three lines of code, the task pane is all wired up.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/johnrdurant/WindowsLiveWriter/WhyVBAStillMakesSense_9A30/Bb981164.5fee6a9e-cba9-45ad-9932-d2f3265e92d4(en-us,office.12)%5B1%5D_2.gif" mce_href="http://blogs.msdn.com/blogfiles/johnrdurant/WindowsLiveWriter/WhyVBAStillMakesSense_9A30/Bb981164.5fee6a9e-cba9-45ad-9932-d2f3265e92d4(en-us,office.12)%5B1%5D_2.gif"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title="Task pane solution in Excel" border=0 alt="Task pane solution in Excel" src="http://blogs.msdn.com/blogfiles/johnrdurant/WindowsLiveWriter/WhyVBAStillMakesSense_9A30/Bb981164.5fee6a9e-cba9-45ad-9932-d2f3265e92d4(en-us,office.12)%5B1%5D_thumb.gif" width=385 height=279 mce_src="http://blogs.msdn.com/blogfiles/johnrdurant/WindowsLiveWriter/WhyVBAStillMakesSense_9A30/Bb981164.5fee6a9e-cba9-45ad-9932-d2f3265e92d4(en-us,office.12)%5B1%5D_thumb.gif"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Visual Studio also has really slick tools for creating customizations in the Office Fluent UI.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/johnrdurant/WindowsLiveWriter/WhyVBAStillMakesSense_9A30/dd935909.image022(en-us)%5B1%5D_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/johnrdurant/WindowsLiveWriter/WhyVBAStillMakesSense_9A30/dd935909.image022(en-us)%5B1%5D_2.jpg"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title="Customizing the Ribbon in Microsoft Office" border=0 alt="Customizing the Ribbon in Microsoft Office" src="http://blogs.msdn.com/blogfiles/johnrdurant/WindowsLiveWriter/WhyVBAStillMakesSense_9A30/dd935909.image022(en-us)%5B1%5D_thumb.jpg" width=244 height=87 mce_src="http://blogs.msdn.com/blogfiles/johnrdurant/WindowsLiveWriter/WhyVBAStillMakesSense_9A30/dd935909.image022(en-us)%5B1%5D_thumb.jpg"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;If you are just beginning, VBA is a great place to start. You can also use VBA for complex solutions. All the same, if you are willing to deepen your technical skill (always a good career move) then exploring Visual Studio is a great idea, and you will find that most of what you learned in VBA code is applicable while coding Office solutions in Visual Studio. For example, the API calls for Office in .NET are roughly synonymous with those you made in VBA. Also, you can call VBA routines from your .NET code in Visual Studio, so investments in VBA are not lost as you migrate a solution to Visual Studio.&lt;/P&gt;
&lt;P&gt;In the final analysis, it’s about choice and flexibility. It is not an ‘either/or’ dilemma. Use VBA for ad hoc task automation, and it has a pretty low entry bar in terms of knowledge and skill. Use Visual Studio if you are or aspire to be a professional .NET developer and all that this implies.&lt;/P&gt;
&lt;P&gt;Some things to help you get going:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/en-us/office/bb497969.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/office/bb497969.aspx"&gt;The Microsoft Office Developer Roadmap&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/dd721892.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/dd721892.aspx"&gt;Check out this book chapter excerpt: VBA Primer&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/office" target=_blank mce_href="http://msdn.microsoft.com/office"&gt;The Office Developer Center&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;IMG src="http://ykioog.bay.livefilestore.com/y1p67qhWCdnH9zAPEJBPh5okY4ELWek2eojBvjTkNqEt6Ot0ZLU8rEqh3dz0vEj900X6sw7mkk90NtVTwscMb-cKQ/guitar_small.gif" mce_src="http://ykioog.bay.livefilestore.com/y1p67qhWCdnH9zAPEJBPh5okY4ELWek2eojBvjTkNqEt6Ot0ZLU8rEqh3dz0vEj900X6sw7mkk90NtVTwscMb-cKQ/guitar_small.gif"&gt; &lt;STRONG&gt;Rock Thought of the Day:&lt;/STRONG&gt; 
&lt;P&gt;I’ve been reading &lt;A href="http://www.amazon.com/U2/dp/0060776757" target=_blank mce_href="http://www.amazon.com/U2/dp/0060776757"&gt;“U2 by U2”&lt;/A&gt;, a great book that gives insight into every song, album, and tour. Read it, and you come away with clues as to how the band really ‘ticks, what has kept them together for so many years, and what the costs of being rock-and-roll stars can be. Most important, their humanity, genuine love of music, and their desire to always get things right comes ringing through--- even when they mess things up or fail to get things right. 
&lt;P&gt;&lt;STRONG&gt;Rock On&lt;/STRONG&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9892227" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/johnrdurant/archive/tags/Microsoft+Office+System/default.aspx">Microsoft Office System</category><category domain="http://blogs.msdn.com/johnrdurant/archive/tags/VSTO/default.aspx">VSTO</category></item><item><title>Office Developer Guild is Live!</title><link>http://blogs.msdn.com/johnrdurant/archive/2009/07/30/office-developer-guild-is-live.aspx</link><pubDate>Thu, 30 Jul 2009 19:54:43 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9853531</guid><dc:creator>johnrdurant</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/johnrdurant/comments/9853531.aspx</comments><wfw:commentRss>http://blogs.msdn.com/johnrdurant/commentrss.aspx?PostID=9853531</wfw:commentRss><description>&lt;p&gt;The developer community for Microsoft Office grand and healthy. And, the knowledge and expertise in our community is pretty vast and deep. To make it easier for us to stay alert about events, up-coming content, etc. and more easily share ideas we now have the “&lt;strong&gt;Office Developer Guild&lt;/strong&gt;”—a group of like-minded professional friends on Facebook. Additional benefits in the ODG include receiving announcements, slightly ahead of everyone else, of up-coming content, events, etc. That way you can tee up your own blog entries in advance! You’ll also receive exclusive messages from community leaders and insiders. As part of the on-going Office developer conversation I’ll be reaching out, asking questions, and soliciting feedback as well.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Who can join?&lt;/strong&gt; Anyone who is interested in how to developer productivity solutions with Microsoft Office. This includes Web, SharePoint, SQL Server, Exchange, VBA, XML and other developers--- all of these products &amp;amp; technologies are relevant.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;How to join?&lt;/strong&gt; Search for my email on Facebook and request to be added: &lt;a href="mailto:john.durant@microsoft.com"&gt;john.durant@microsoft.com&lt;/a&gt;. I’ll add you.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Host the ODG image&lt;/strong&gt;: Place the ODG “badge” on your site or blog so that you identify yourself as a member of the “the Guild”. Be sure to announce on the ODG wall that you are hosting the ODG image (shown below).&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/johnrdurant/WindowsLiveWriter/OfficeDeveloperGuildisLive_87FB/mole3y%5B1%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="mole3y[1]" border="0" alt="mole3y[1]" src="http://blogs.msdn.com/blogfiles/johnrdurant/WindowsLiveWriter/OfficeDeveloperGuildisLive_87FB/mole3y%5B1%5D_thumb.png" width="244" height="126"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;img src="http://ykioog.bay.livefilestore.com/y1p67qhWCdnH9zAPEJBPh5okY4ELWek2eojBvjTkNqEt6Ot0ZLU8rEqh3dz0vEj900X6sw7mkk90NtVTwscMb-cKQ/guitar_small.gif"&gt; &lt;strong&gt;Rock Thought of the Day:&lt;/strong&gt; &lt;p&gt;Billy Corgan, with impromptu band “Spirits in the Sky” (including members of the Seeds and Electric Prunes) did a tribute concert to Sky Saxon last week. They played a very nice new song (one guitar brazenly out of tune), and you can &lt;a href="http://www.youtube.com/watch?v=qqyoP3CRh-Y" target="_blank"&gt;check out the video&lt;/a&gt;. Hard to make out the lyrics, but it is solid. It’s also satisfying to hear the putative new percussionist for The Smashing Pumpkins, 19-year old Mike Byrne. The kid’s got the right vibe for the band. &lt;p&gt;Heard great song by the &lt;a href="http://www.myspace.com/generationals" target="_blank"&gt;Generationals&lt;/a&gt; today, “&lt;strong&gt;Angry Charlie&lt;/strong&gt;” on their new album “&lt;strong&gt;Con Law&lt;/strong&gt;”. &lt;p&gt;&lt;strong&gt;Rock On&lt;/strong&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9853531" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/johnrdurant/archive/tags/Microsoft+Office+System/default.aspx">Microsoft Office System</category><category domain="http://blogs.msdn.com/johnrdurant/archive/tags/VSTO/default.aspx">VSTO</category></item><item><title>Sparklines OM in Excel &amp; Confessions of a Microsoft “Insider” (shhhh)</title><link>http://blogs.msdn.com/johnrdurant/archive/2009/07/29/sparklines-om-in-excel-confessions-of-a-microsoft-insider-shhhh.aspx</link><pubDate>Thu, 30 Jul 2009 02:36:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9852672</guid><dc:creator>johnrdurant</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/johnrdurant/comments/9852672.aspx</comments><wfw:commentRss>http://blogs.msdn.com/johnrdurant/commentrss.aspx?PostID=9852672</wfw:commentRss><description>&lt;P&gt;You might be tempted to think that, given that I’m so-called “insider” I’d know all about everything in Office 2010. But, the fact is that there is so much to the products in Office that few people can know it all and know it early.&lt;/P&gt;
&lt;P&gt;So, this brings me to when I was recently demo’ing Office 2010 and someone asked me to show off new Excel features. (BTW: there is an Excellent series of posts on the &lt;A href="http://blogs.msdn.com/excel/archive/2009/07/17/sparklines-in-excel.aspx" target=_blank mce_href="http://blogs.msdn.com/excel/archive/2009/07/17/sparklines-in-excel.aspx"&gt;Excel Team blog about Sparklines&lt;/A&gt;, how to use and customize them. Read it and the posts that follow it there).&lt;/P&gt;
&lt;P&gt;Well, I had seen a few presentations on Sparklines months ago, but the sheer velocity and volume of my workload prevented me from doing much experimentation. So, there I stood with a perfectly delightful customer asking me to demo anything new in Excel, and, while I could speak to the feature and knew the general API for it, my hands-on experience was….lacking. Fortunately, I learned in a matter of moments and was able to demo the feature. The customer was delighted. Whew!&lt;/P&gt;
&lt;P&gt;I then showed off Sparklines and Slicers (more on in next post) to every person who came to our kiosk to see Office 2010 unveiled. Each one, without exception, was dazzled by the features and could immediately see how they would save users time.&lt;/P&gt;
&lt;P&gt;Excel developers are known for doing some of the most amazing things, and the Excel OM is very rich—including the newly added OM members for Sparklines.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Sparklines&lt;/STRONG&gt; are organized into &lt;STRONG&gt;SparklineGroups&lt;/STRONG&gt;, and each &lt;STRONG&gt;SparklineGroup&lt;/STRONG&gt; contains a variable number of &lt;STRONG&gt;Sparkline&lt;/STRONG&gt; items. In the following image you can see my rows and columns of data with the &lt;STRONG&gt;Sparkline&lt;/STRONG&gt; items in the last column:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/johnrdurant/WindowsLiveWriter/SparklinesOMinExcelConfessionsofaMicroso_E99D/SparklineStep3%5B1%5D_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/johnrdurant/WindowsLiveWriter/SparklinesOMinExcelConfessionsofaMicroso_E99D/SparklineStep3%5B1%5D_2.jpg"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=SparklineStep3[1] border=0 alt=SparklineStep3[1] src="http://blogs.msdn.com/blogfiles/johnrdurant/WindowsLiveWriter/SparklinesOMinExcelConfessionsofaMicroso_E99D/SparklineStep3%5B1%5D_thumb.jpg" width=289 height=61 mce_src="http://blogs.msdn.com/blogfiles/johnrdurant/WindowsLiveWriter/SparklinesOMinExcelConfessionsofaMicroso_E99D/SparklineStep3%5B1%5D_thumb.jpg"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Now, how does what is shown here map to the three objects I just mentioned? In this case, there is one &lt;STRONG&gt;SparklineGroup&lt;/STRONG&gt; representing all the financial data, and there are four &lt;STRONG&gt;Sparkline &lt;/STRONG&gt;items:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/johnrdurant/WindowsLiveWriter/SparklinesOMinExcelConfessionsofaMicroso_E99D/SparklineGroup%5B1%5D_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/johnrdurant/WindowsLiveWriter/SparklinesOMinExcelConfessionsofaMicroso_E99D/SparklineGroup%5B1%5D_2.jpg"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=SparklineGroup[1] border=0 alt=SparklineGroup[1] src="http://blogs.msdn.com/blogfiles/johnrdurant/WindowsLiveWriter/SparklinesOMinExcelConfessionsofaMicroso_E99D/SparklineGroup%5B1%5D_thumb.jpg" width=294 height=54 mce_src="http://blogs.msdn.com/blogfiles/johnrdurant/WindowsLiveWriter/SparklinesOMinExcelConfessionsofaMicroso_E99D/SparklineGroup%5B1%5D_thumb.jpg"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;You can easily write some VBA to get access to these various object instances and work with their properties and methods. At the simplest, the following code shows you the basics:&lt;/P&gt;
&lt;P&gt;&lt;FONT size=1 face=Courier&gt;Private Sub EnumSparklines()&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim slgs As SparklineGroups&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim slg As SparklineGroup&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim sl As Sparkline&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim r As Range&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim slCount As Integer&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim i As Integer&lt;BR&gt;&amp;nbsp;&amp;nbsp; &lt;FONT color=#00a600&gt;'Using a named range to quickly find the Groups&lt;BR&gt;&lt;/FONT&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Set r = ThisWorkbook.Names("spark1").RefersToRange&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Set slgs = r.SparklineGroups&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Set slg = slgs.Item(1)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; slCount = slg.Count&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; For i = 1 To slCount&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Set sl = slg.Item(i)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MsgBox sl.SourceData&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Next&lt;/FONT&gt; 
&lt;P&gt;&lt;FONT size=1 face=Courier&gt;End Sub&lt;/FONT&gt; 
&lt;P&gt;Obviously, there is a lot more to the OM here than what I am showing. For example, the &lt;STRONG&gt;Sparkline&lt;/STRONG&gt; object has a &lt;STRONG&gt;ModifyLocation&lt;/STRONG&gt; method that lets you quickly modify the Range to which the &lt;STRONG&gt;Sparkline&lt;/STRONG&gt; instance refers.&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://ykioog.bay.livefilestore.com/y1p67qhWCdnH9zAPEJBPh5okY4ELWek2eojBvjTkNqEt6Ot0ZLU8rEqh3dz0vEj900X6sw7mkk90NtVTwscMb-cKQ/guitar_small.gif" mce_src="http://ykioog.bay.livefilestore.com/y1p67qhWCdnH9zAPEJBPh5okY4ELWek2eojBvjTkNqEt6Ot0ZLU8rEqh3dz0vEj900X6sw7mkk90NtVTwscMb-cKQ/guitar_small.gif"&gt; &lt;STRONG&gt;Rock Thought of the Day:&lt;/STRONG&gt; 
&lt;P&gt;I can understand why some people do not like Country music. How much can crooners sing about tractors, anyway? Look, I love a John Deere or McCormick tractor like any other corn-fed boy from the mid-west or the south, but there is a limit to the number of meaningful odes one can write in their honor. 
&lt;P&gt;But, what I have found is that most people really like &lt;EM&gt;genuine&lt;/EM&gt; Country music when they hear it. One of the best producers of the best Nashville can offer is &lt;A title='Brad "Telemaster" Paisley' href="http://www.bradpaisley.com/" target=_blank mce_href="http://www.bradpaisley.com"&gt;Brad Paisley&lt;/A&gt;. His new album, &lt;STRONG&gt;&lt;A href="http://bradpaisley.musiccitynetworks.com/" target=_blank mce_href="http://bradpaisley.musiccitynetworks.com/"&gt;American Saturday Night&lt;/A&gt;&lt;/STRONG&gt; is instantly appealing. And, it proves once again that he is simply one of the best guitar players the music industry (of any genre) has ever seen. If you want smart music that wears its roots on its sleeve—check this record out. I know Johnny Cash, Hank Williams, Buck Owens, and Merle Haggard are proud. 
&lt;P&gt;&lt;STRONG&gt;Rock On&lt;/STRONG&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9852672" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/johnrdurant/archive/tags/Microsoft+Office+System/default.aspx">Microsoft Office System</category><category domain="http://blogs.msdn.com/johnrdurant/archive/tags/VSTO/default.aspx">VSTO</category></item><item><title>Office 2010 Developer: What's New!</title><link>http://blogs.msdn.com/johnrdurant/archive/2009/07/14/office-2010-developer-what-s-new.aspx</link><pubDate>Tue, 14 Jul 2009 19:35:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9833315</guid><dc:creator>johnrdurant</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/johnrdurant/comments/9833315.aspx</comments><wfw:commentRss>http://blogs.msdn.com/johnrdurant/commentrss.aspx?PostID=9833315</wfw:commentRss><description>&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;Buckle in! This is a full-throttled post! If you’ve been following the press and the excitement around our partner conference (WPC) this week you have heard that we have opened up the treasure-house of information regarding &lt;/FONT&gt;&lt;A href="http://www.microsoft.com/office/2010/"&gt;&lt;FONT size=3 face=Calibri&gt;Office 2010&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3 face=Calibri&gt;. I’m going to give you some information about what is new in terms of developer features. An entertaining and informative look at “the making of the release” can be found &lt;/FONT&gt;&lt;A href="http://www.office2010themovie.com/"&gt;&lt;FONT size=3 face=Calibri&gt;here&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;.&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;I’ve been developing Office solutions for 12 years, so I’ve seen the full panorama of what has shipped over the years and how it plays out in the real world. What I can say with confidence is that this is the most extensible, developer-friendly version of the Office-branded set of products we have ever produced. What matters most is that you can build solutions that deliver real, quantifiable value to your users and your business.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;Tools Productivity&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;If you are building Office Business Applications, then you will be pleased with what is happening here, because in this release you can more quickly and easily create, build, deploy, and maintain solutions that deliver real user and business value. The tools productivity has taken another leap forward. The Office solution tools in Visual Studio 2010 have truly matured. There are document, application, and add-in templates for nearly every client application in Office. &lt;/FONT&gt;&lt;A href="http://blogs.msdn.com/somasegar/archive/2009/01/10/office-client-developer-enhancements-with-vs-2010.aspx"&gt;&lt;FONT size=3 face=Calibri&gt;We’ve fixed some of the hang-ups&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3 face=Calibri&gt; that made developing Office solutions in C# notoriously tedious. We’ve given developers much more control over how the final solution is “published” (read: ClickOnce deployed), how dependencies are handled. We’ve also included the ability &lt;/FONT&gt;&lt;A href="http://blogs.msdn.com/vsto/archive/2009/05/20/deploying-multiple-office-solutions-in-a-single-installer.aspx"&gt;&lt;FONT size=3 face=Calibri&gt;to deploy more than one customization&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt; in the same publishing motion. A special bonus in the deployment department is that Office 2010 will support VS-based customizations out of the box (no need to worry about deploying any tools runtime on target desktops.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;We’ve vastly expanded &lt;/FONT&gt;&lt;A href="http://blogs.msdn.com/somasegar/archive/2009/02/19/sharepoint-tools-support-in-visual-studio.aspx"&gt;&lt;FONT size=3 face=Calibri&gt;the SharePoint development tools&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt; in the mix. Now, Visual Studio reflects the real-world notion that business productivity solutions often span client and server. There are new designers to help developers get started more quickly without hindering them from going into “black-belt” mode if they need to for super-advanced scenarios. Debugging SharePoint solution is virtually as simple as it is for a “hello world” Winform app.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;We’ve also been innovating with the &lt;/FONT&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/bb448854(office.14).aspx"&gt;&lt;FONT size=3 face=Calibri&gt;Open XML SDK&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;. In fact, a good share of the Chris Capossela keynote demo was written using the Open XML SDK. We included a lot of server-side code in a SharePoint workflow process, and we used LINQ to iterate over the document structure and extract or change content without touching any application object model. This is the very kind of thing we want customers to do in the given scenario, and the Open XML tools make it much easier to do.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;Additionally, we’ve brought exciting new advances for creating Access applications. Check out this &lt;/FONT&gt;&lt;A href="http://www.microsoft.com/office/2010/Access®%202010"&gt;&lt;FONT color=#0000ff size=3 face=Calibri&gt;video&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3 face=Calibri&gt; to see some of what that is all about. Also, check out the team blog and &lt;/FONT&gt;&lt;A href="http://blogs.msdn.com/johnrdurant"&gt;&lt;FONT size=3 face=Calibri&gt;my own blog&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3 face=Calibri&gt; for more specific information about &lt;/FONT&gt;&lt;A href="http://blogs.msdn.com/access/"&gt;&lt;FONT size=3 face=Calibri&gt;Access 2010&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt; in the coming days.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;UI Platform Improvements&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;These gains in terms of tools productivity are exciting, and they are accompanied by important additions to the core Office product extensibility. There are too many for me to enumerate in one message (this one is already getting long), but I’ll give you some highlights. At WPC we began showing off the new &lt;B style="mso-bidi-font-weight: normal"&gt;&lt;I style="mso-bidi-font-style: normal"&gt;Backastage&lt;/I&gt;&lt;/B&gt; view. This is a UI innovation that makes it easier for users to find and work with the kind of operations that are really outside the document authoring experience. For example, in Backstage view you will find more breathing room and a more informative organization for functions related to printing, saving, collaborating, and configuring the application options, for example. Additionally, you can add your own custom elements to the Backstage view (watch &lt;/FONT&gt;&lt;A href="http://www.microsoft.com/office/2010/Introduction%20to%202010"&gt;&lt;FONT color=#0000ff size=3 face=Calibri&gt;Chris Bryant’s brief intro&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;). For example, you can include a view of task or workflow information that is specific to your business needs. You do all of this using an XML schema and programming model that is very akin to the RibbonX implementation.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;We have also added some nice little flourishes to the RibbonX implementation and the Quick Access Toolbar. Now, you can programmatically activate a tab in the Office Fluent UI in response to an event somewhere else in your application code. For example, in Word, if the user performs a certain authoring operation or enters text in a Content Control, you can activate a custom tab on the Ribbon that shows the user further options and commands that relate to the operation they are executing in the document. We’ve also added the ability to customize the context menu that appears when you are in the document surface. For example, when you highlight a sentence in Office 2007, the context menu appears giving users quick access to commands like Bold, Italics, and so forth. Well, in Office 2010, this toolbar is now programmable so that you can add your own custom commands to that toolbar. Finally, the expansion of the Office Fluent UI more thoroughly throughout the Office applications allows developers to provide custom Ribbon experiences in more places.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;Application Extensibility&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;Add to all of this the many enhancements that occur as a normal part of evolving each application and making sure that end-user innovations have, where appropriate, extensibility. For example, at WPC the Stephen Elop keynote showed the new Excel 2010 “Sparklines” and “Slicers” features in Excel. These allow for easier visualization and filtering of data in Excel. Developers can work with these new features programmatically through their corresponding APIs. There is similar progress in other applications like Word, OneNote, PowerPoint, Visio, and Outlook in terms of enriching the API. Outlook 2010 witnesses the further consolidation of its object model making it easier for any developer to target specific Outlook items and their properties in code.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;Looking Ahead&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;Again, in the coming days and weeks, I’ll be bringing more detailed information about tools productivity, UI extensibility, and application refinements that will help developers get work done to fill real business needs.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;Things arrive full circle at the &lt;/FONT&gt;&lt;A href="http://www.mssharepointconference.com/Pages/default.aspx"&gt;&lt;FONT size=3 face=Calibri&gt;SharePoint Conference&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt; later this year when we go big with all of the innovations in SharePoint and go deep on solution development for both Office client and SharePoint. I strongly urge you to attend or get in touch with what happens there. Great things are in store.\&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;IMG src="http://ykioog.bay.livefilestore.com/y1p67qhWCdnH9zAPEJBPh5okY4ELWek2eojBvjTkNqEt6Ot0ZLU8rEqh3dz0vEj900X6sw7mkk90NtVTwscMb-cKQ/guitar_small.gif" minmax_bound="true"&gt; &lt;STRONG minmax_bound="true"&gt;Rock Thought of the Day:&lt;/STRONG&gt; &lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;I am pleased to be the proud owner of 4 tickets to see &lt;STRONG&gt;The Black Crowes&lt;/STRONG&gt; in Seattle this November!&amp;nbsp;I'm also thinking of driving up to Vancouver to see &lt;STRONG&gt;The Silversun Pickups&lt;/STRONG&gt;. This is a band that is even better live. See them whenever you get the chance. If you haven't listened to the band&lt;STRONG&gt; &lt;A title="Local H" href="http://www.localh.com/" mce_href="http://www.localh.com/"&gt;Local H&lt;/A&gt;&lt;/STRONG&gt;, then repent and given them a listen. I also recommend the band &lt;STRONG&gt;&lt;A title=Celebration href="http://celebrationelectrictarot.com/" mce_href="http://celebrationelectrictarot.com/"&gt;Celebration&lt;/A&gt;&lt;/STRONG&gt;, out of the east coast. I bought &lt;STRONG&gt;Tori Amos&lt;/STRONG&gt;' new CD: Abnormally Addicted to Sin. Musically, she's amazing. Creepy though. Look, Robert Smith from the Cure can take me on a melancholy journey any time. He explores the strained and disssonate landscapes of the human experience. But, his optimism somehow still comes through. I keep wanting to Tori to show us that she has "healed", that her music helped her heal. But, I'm not just convinced. Time to heal, Tori! Let's go.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;STRONG&gt;Rock On&lt;/STRONG&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9833315" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/johnrdurant/archive/tags/Microsoft+Office+System/default.aspx">Microsoft Office System</category><category domain="http://blogs.msdn.com/johnrdurant/archive/tags/VSTO/default.aspx">VSTO</category></item><item><title>Office 2003 to 2007 UI Guides Reminder &amp; “If All Goes Wrong” by the Smashing Pumpkins</title><link>http://blogs.msdn.com/johnrdurant/archive/2009/06/29/office-2003-to-2007-ui-guides-reminder-if-all-goes-wrong-by-the-smashing-pumpkins.aspx</link><pubDate>Mon, 29 Jun 2009 17:49:25 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9808648</guid><dc:creator>johnrdurant</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/johnrdurant/comments/9808648.aspx</comments><wfw:commentRss>http://blogs.msdn.com/johnrdurant/commentrss.aspx?PostID=9808648</wfw:commentRss><description>&lt;p&gt;So, I just bought 5 copies of Office 2007 for a friend of mine in the good land of Minnesota. He’s upgrading all of his home computers and those for his kids scattered about the country. One of the first things he’ll notice is the new Office Fluent UI, and he’ll likely need some help finding his way around the new way we display the commands. No more “File | New” etc. in some of the applications. Sure, Office 2007 has been out for a while now, but there are still many thousands of people moving to the new version as the weeks pass. And, it’s good to learn one’s way around the apps even when the old menu structure has been mostly unchanged.&lt;/p&gt; &lt;p&gt;So, I am pushing the reference guides and how to customize the UI to the top of everyone’s inbox:&lt;/p&gt; &lt;p&gt;Access -- &lt;a href="https://mail.exchange.microsoft.com/redir.aspx?C=689ef6d33fee41eb98e4e77ecb76b3a5&amp;amp;URL=http%3a%2f%2fwww.microsoft.com%2fdownloads%2fdetails.aspx%3fFamilyID%3db9574c72-657f-438c-9de9-f8f70dd2d40d%26DisplayLang%3den"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyID=b9574c72-657f-438c-9de9-f8f70dd2d40d&amp;amp;DisplayLang=en&lt;/a&gt;  &lt;p&gt;Excel -- &lt;a href="https://mail.exchange.microsoft.com/redir.aspx?C=689ef6d33fee41eb98e4e77ecb76b3a5&amp;amp;URL=http%3a%2f%2fwww.microsoft.com%2fdownloads%2fdetails.aspx%3ffamilyid%3d89718ABD-2758-47B3-9F90-93788112B985%26displaylang%3den"&gt;http://www.microsoft.com/downloads/details.aspx?familyid=89718ABD-2758-47B3-9F90-93788112B985&amp;amp;displaylang=en&lt;/a&gt;  &lt;p&gt;Outlook -- &lt;a href="https://mail.exchange.microsoft.com/redir.aspx?C=689ef6d33fee41eb98e4e77ecb76b3a5&amp;amp;URL=http%3a%2f%2fwww.microsoft.com%2fdownloads%2fdetails.aspx%3ffamilyid%3dCC37CC1E-028D-4D30-9093-96CC6513ECA1%26displaylang%3den"&gt;http://www.microsoft.com/downloads/details.aspx?familyid=CC37CC1E-028D-4D30-9093-96CC6513ECA1&amp;amp;displaylang=en&lt;/a&gt;  &lt;p&gt;PowerPoint -- &lt;a href="https://mail.exchange.microsoft.com/redir.aspx?C=689ef6d33fee41eb98e4e77ecb76b3a5&amp;amp;URL=http%3a%2f%2fwww.microsoft.com%2fdownloads%2fdetails.aspx%3ffamilyid%3dBEF41DC3-8E28-4282-82D4-CEC2F416CD40%26displaylang%3den"&gt;http://www.microsoft.com/downloads/details.aspx?familyid=BEF41DC3-8E28-4282-82D4-CEC2F416CD40&amp;amp;displaylang=en&lt;/a&gt;  &lt;p&gt;Word -- &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=9044790b-4e24-4277-b714-66d7b18d0aa1&amp;amp;DisplayLang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyID=9044790b-4e24-4277-b714-66d7b18d0aa1&amp;amp;DisplayLang=en&lt;/a&gt;  &lt;p&gt;Here’s the location on the MSDN Office Developer Center where you can find developer info about how to customize the UI: &lt;p&gt;&lt;a title="http://msdn.microsoft.com/en-us/office/aa905530.aspx" href="http://msdn.microsoft.com/en-us/office/aa905530.aspx"&gt;http://msdn.microsoft.com/en-us/office/aa905530.aspx&lt;/a&gt; &lt;p&gt;One of the things that is encouraging is how many non-Microsoft applications are revisiting their UI layout and adopting a similar approach to what we introduced in Office 2007. Over the coming years you’ll see more applications (from us and others) going this direction mainly because &lt;em&gt;how&lt;/em&gt; people work in the applications is so very different from what it was in the 90’s. I also fee persuaded that we have barely scratched the “Surface” (pun intended) in exploring new ways to make it easier for people to interact with the systems upon which they depend.  &lt;p&gt;&lt;img src="http://ykioog.bay.livefilestore.com/y1p67qhWCdnH9zAPEJBPh5okY4ELWek2eojBvjTkNqEt6Ot0ZLU8rEqh3dz0vEj900X6sw7mkk90NtVTwscMb-cKQ/guitar_small.gif"&gt; &lt;strong&gt;Rock Thought of the Day:&lt;/strong&gt;  &lt;p&gt;&lt;img src="http://ecx.images-amazon.com/images/I/61kCIZR7SOL._SS500_.jpg" width="112" height="112"&gt;  &lt;p&gt;What if a hugely famous band decided to let the fans be part of the process of making new music? How would that work? What are the logistics? How would they react? How would the band adjust to the reaction? What would (ugh) critics think? Would it matter? Well, only a few bands in history have really taken up such a project in earnest, and one is, of course, The Smashing Pumpkins back in 2007. And, they packaged up the journey in a compelling documentary called &lt;a href="http://www.amazon.com/Smashing-Pumpkins-All-Goes-Wrong/dp/B001FW2R4E?ie=UTF8" target="_blank"&gt;“If All Goes Wrong”&lt;/a&gt;. It’s honest, revealing, and irresistibly insightful. I own my own, but I’ve been buying copies for friends. What is best is the focus on the music. It’s all about snatching songs out of the universe, playing them, recording them, and seeing what happens. Get a copy.  &lt;p&gt;&amp;nbsp; &lt;p&gt;&lt;strong&gt;Rock On&lt;/strong&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9808648" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/johnrdurant/archive/tags/Microsoft+Office+System/default.aspx">Microsoft Office System</category><category domain="http://blogs.msdn.com/johnrdurant/archive/tags/VSTO/default.aspx">VSTO</category></item><item><title>Office 2010 for Developers: Conference moving to SharePoint Conference 2009</title><link>http://blogs.msdn.com/johnrdurant/archive/2009/06/01/office-2010-for-developers-conference-moving-to-sharepoint-conference-2009.aspx</link><pubDate>Tue, 02 Jun 2009 00:18:13 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9682243</guid><dc:creator>johnrdurant</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/johnrdurant/comments/9682243.aspx</comments><wfw:commentRss>http://blogs.msdn.com/johnrdurant/commentrss.aspx?PostID=9682243</wfw:commentRss><description>&lt;p&gt;As I spent a ton of time at Tech Ed, I was super impressed by the immense amount of interest in Office 2010. I know the excitement will only grow, and one of the best ways for you, the devoted Office Developer, to get inside, in-depth, in-person exposure to all things Office 2010 and SharePoint is at the show dedicated just to these technologies! Today, &lt;a href="http://blogs.technet.com/gray_knowlton/archive/2009/05/30/office-2010-for-developers-office-developer-conference-moving-to-sharepoint-conference-2009.aspx" target="_blank"&gt;Gray Knowlton&lt;/a&gt; announced &lt;strong&gt;how the Office Developer Conference will not take place and the content will be part of the &lt;/strong&gt;&lt;a href="http://www.mssharepointconference.com/Pages/default.aspx"&gt;&lt;strong&gt;SharePoint Conference&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;.&lt;/strong&gt; If you are an attendee of Office Developer Conference in the past, we strongly recommend you come see us at the SharePoint Conference in October, where we’ll cover Office client development in depth. Be sure to sign up for the &lt;a href="http://www.office2010themovie.com/"&gt;Technical Preview&lt;/a&gt; as well!  &lt;p&gt;I will be there (as I am every year) talking about what’s new for developers, how to build business productivity solutions on the Microsoft stack, and more. There’s a lot to be excited about in this release, and you’ll hear more about those things in the months to come, putting a bow on it all at the SharePoint Conference. &lt;p&gt;Join me there!! &lt;p&gt;&lt;img src="http://ykioog.bay.livefilestore.com/y1p67qhWCdnH9zAPEJBPh5okY4ELWek2eojBvjTkNqEt6Ot0ZLU8rEqh3dz0vEj900X6sw7mkk90NtVTwscMb-cKQ/guitar_small.gif"&gt; &lt;strong&gt;Rock Thought of the Day:&lt;/strong&gt; &lt;p&gt;My 43rd birthday is coming up, and I’m working with my sons on a set list for the little show we’ll play at my birthday party. We’ve got our own songs as well as a few covers. Take a look at the set list, and you’ll notice the covers. These are great songs because they hold up over time. We give ‘em a slightly harder edge, and that makes them more our own. But, there are great songs out there that have unfortunately been forgotten: &lt;p&gt;1) Freedom (written by our band, Atlas Falling) &lt;p&gt;2) Fire (by the Bloodhound Gang…without the profanity :)) &lt;p&gt;3) Say It Ain’t So (by Weezer) &lt;p&gt;4) Call&amp;nbsp; Me in the Morning (written by our band, Atlas Falling) &lt;p&gt;5) Tell Me Something Good (by Rufus) &lt;p&gt;6) Mess of the Blues (by Elvis/Led Zep) &lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9682243" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/johnrdurant/archive/tags/Microsoft+Office+System/default.aspx">Microsoft Office System</category><category domain="http://blogs.msdn.com/johnrdurant/archive/tags/VSTO/default.aspx">VSTO</category></item><item><title>TechEd 2009 Is History!</title><link>http://blogs.msdn.com/johnrdurant/archive/2009/05/20/teched-2009-is-history.aspx</link><pubDate>Wed, 20 May 2009 23:37:25 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9632847</guid><dc:creator>johnrdurant</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/johnrdurant/comments/9632847.aspx</comments><wfw:commentRss>http://blogs.msdn.com/johnrdurant/commentrss.aspx?PostID=9632847</wfw:commentRss><description>&lt;p&gt;TechEd 2009 is a done deal. I wanted to toss out a few observations from the event. Here’s what really stood out:&lt;/p&gt; &lt;p&gt;&lt;strong&gt;1) The overall mood was pleasantly up-beat and the attendance was solid.&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;The economic times have hit every budget everywhere, but the tempo was not sagging at TechEd. I heard a number of people say that they were lucky that their organization had bugeted for the event as early as last summer. The people there were really excited about technologies across the spectrum. No single thing stood out to me anecdotally more than another.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;2) The interest in Office 2010 was extremely high&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;We announced a technical preview available to attendees at the show if they signed up while at TechEd. This was the #1 question at the booth: “How can I sign up for the Technical Preview?!”&lt;/p&gt; &lt;p&gt;I was really pleased to see so many people interested in the next version of our Office program. As I fielded many developer questions at the booth I was regretting that it is not yet time to discuss the next version and what’s in store for the developer crowd. Oh well… that time will come!&lt;/p&gt; &lt;p&gt;&lt;strong&gt;3) Many people really “get” our Microsoft value proposition&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;In some circles, it’s “chic” to bash on Microsoft. I understand all that for whatever reason. All the same, it’s really great when a customer walks up and just gushes with excitement about the products he or she is deploying and the solutions that are being built on top. It really stokes my engines when I hear a customer sharing how he built a whole system in Word that radically simplifies how they write contracts in their organization. Another customer talked about how they use PowePoint for all of their training and repair manuals for complex equipment. They use code to generate the PowerPoint decks from other data sources.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;4) We’ve got a lot of work to do to help SharePoint developers get up to speed on what Office client application programmability can do for them&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;As I chatted with SharePoint developers who passed by, they were eager to let me show them what Office programmability means and what it can do. They, for the most part, had no idea that Office could be programmed so easily and that it had so much hidden power. This tells me that they probably came to SharePoint development from the Web dev space. This is a strong trend, and we are going to be doing a lot to help them get into the Office side of things as it will strengthen their solutions considerably.&lt;/p&gt; &lt;p&gt;On the lighter side—I add these observations:&lt;/p&gt; &lt;p&gt;1) The food was not as plentiful. Yeah—I know it’s wrong to complain about food when we have it so abundantly compared to many in the world. But, the spoiled, selfish part of me wanted to see the coolers full of Dove and Hagen Dasz bars return! I loved eating the desserts and so on that crowded the halls outside of the session rooms.&lt;/p&gt; &lt;p&gt;2) The TV in my hotel room was an old-school 20 inch non-flatscreen thing sitting on a stand 15 feet from my bed. Watching NatGeo was pretty lame on that set.&lt;/p&gt; &lt;p&gt;3) My rental car was a Nissan 350Z (free upgrade, baby!). It was really, really fun to drive. Would have preferred a Corvette ZR1 however :)&lt;/p&gt; &lt;p&gt;4) Having dinner with my colleagues, Charles Maxson and Michael Kiselman were highlights of the week for me.&lt;/p&gt; &lt;p&gt;5) Traffic in LA is worse than the hideous reputation that precedes it.&lt;/p&gt; &lt;p&gt;6) Seeing my old contacts Ty Anderson, Robert Bogue, Matt Nunn, Rob Tiffany, Mary Chipman, Brian Randell, and dozens and dozens of others is always satisfying. I was also really pleased to see many customers that I have met in previous years and know that they remember me. People are cool!&lt;/p&gt; &lt;p&gt;7) Missing my wife and sons is not so great.&lt;/p&gt; &lt;p&gt;8) Walking around the streets of LA in the late evening by myself listening to Smashing Pumpkins on my Zune while singing out loud was refreshing and peaceful.&lt;/p&gt; &lt;p&gt;9) The weather in LA is just hard to beat. I love heat.&lt;/p&gt; &lt;p&gt;10) Visiting one of the temples for my church in Redlands was also a highlight. It’s a beautiful and peaceful place.&lt;/p&gt; &lt;p&gt;&lt;img src="http://ykioog.bay.livefilestore.com/y1p67qhWCdnH9zAPEJBPh5okY4ELWek2eojBvjTkNqEt6Ot0ZLU8rEqh3dz0vEj900X6sw7mkk90NtVTwscMb-cKQ/guitar_small.gif"&gt;&amp;nbsp;&lt;strong&gt;Rock Thought of the Day:&lt;/strong&gt;  &lt;p&gt;I’ve often blogged about The Smashing Pumpkins among the many bands I have discussed in my Rock Thought. One of the more intriguing ideas to recently appear in the music industry comes from Billy Corgan. He has proposed a way for his legions of devoted fans &lt;a href="http://www.smashingpumpkins.com/pages/news/studio-subscription-service-update"&gt;to gain unprecedented access&lt;/a&gt; to how he conceives, writes, and records his songs. It’s a novel concept and I predict that other artists will explore similar terrain as they try to connect with their audiences in new and creative ways. As Billy noted in one of his posts, it’s not really about trying to find a new product that can be peddled to fans. Everyone who has worked in the music industry, which I have, knows that touring is THE money printer for music artists. The primary way to earn loads of money is by touring. It’s hard work, lonely, and grueling, but it is usually very lucrative. But, I think that artists are exploring new ways of connecting with fans for different reasons at least initially. Check out what Billy has proposed and sign up for the newsletter so you can get involved!  &lt;p&gt;&lt;strong&gt;Rock On&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;Follow me:&lt;/strong&gt; &lt;a href="http://www.twitter.com/johnrdurant"&gt;http://www.twitter.com/johnrdurant&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9632847" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/johnrdurant/archive/tags/Microsoft+Office+System/default.aspx">Microsoft Office System</category><category domain="http://blogs.msdn.com/johnrdurant/archive/tags/VSTO/default.aspx">VSTO</category></item><item><title>Microsoft Excel and Twitter via Smart Tags in a VS 2008 Solution</title><link>http://blogs.msdn.com/johnrdurant/archive/2009/03/16/microsoft-excel-and-twitter-via-smart-tags-in-a-vs-2008-solution.aspx</link><pubDate>Tue, 17 Mar 2009 01:16:50 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9482065</guid><dc:creator>johnrdurant</dc:creator><slash:comments>5</slash:comments><comments>http://blogs.msdn.com/johnrdurant/comments/9482065.aspx</comments><wfw:commentRss>http://blogs.msdn.com/johnrdurant/commentrss.aspx?PostID=9482065</wfw:commentRss><description>&lt;p&gt;I recent wrote (“&lt;a href="http://blogs.msdn.com/johnrdurant/archive/2009/03/05/twitter-from-excel-2007.aspx" target="_blank"&gt;Twitter from Excel 2007&lt;/a&gt;”) about how Chandoo (Plus JP) caught my attention with their quirky take on updating Twitter from Excel. In there, I said I would lay down an expanded, more useful version. In so doing, I believe I have also provided a &lt;i&gt;raison d’être&lt;/i&gt; for the thing in the first place!&lt;/p&gt; &lt;p&gt;Here’s the shakedown (keeping in mind that &lt;strong&gt;These postings are provided "AS IS" with no warranties, and confer no rights.”&lt;/strong&gt;:  &lt;p&gt;I wrote the VS 2008 Add-in for Excel 2007 with a smart tag. The smart tag recognizes phrases or keywords that you have typed into Excel and then, with one click, let’s you post the cell (containing the keyword[s]) or List to Twitter. &lt;p&gt;&lt;img src="http://9m93fw.bay.livefilestore.com/y1pbjSkx-urM8oUlPoWEJiQlQw0W4DddppgGwNvUPoH8_6ms-TZL23r6e8TsWJDq2SHXetBdfO3P5Sx4Iu1c--Fmw/ExcelTwitterSmartTagMenu.jpg" width="353" height="112"&gt;  &lt;p&gt;You can change what/how the smart tag recognizes (for example using regular expressions), and I have personally written much on this topic already on MSDN (see list of resources at the end of this post). You can also change how the smart tag action handler works of which I have also written a fair amount (see resources again).  &lt;p&gt;Gilding the lily even further, when I post a dialog for your Twitter credentials I encrypt the username and password and store the hashes statefully so that the next time you do the one-click Twitter post you don’t need to re-enter your credentials. I just decrypt them and use the stored ones. This is not mega-industrial strength security practice, but it sure beats putting passwords in the code or storing them as plain-text. At the same, it also provides a superior user experience, because the user does not have to repeatedly provide credentials which would be, at the very least, annoying.  &lt;p&gt;Making this work inside of Word is a snap—very, very trivial. Again, look at the documentation on creating smart tags, and you’ll see how easy that is.  &lt;p&gt;In the near future, I am going to figure out how to do this for Facebook.  &lt;p&gt; Obviously, you’ll need a Twitter account to test this. So, sit back with your bag of M&amp;amp;M’s and strap in for the technical detail! &lt;p&gt;1) For the password encryption/decryption I used the &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=1643758B-2986-47F7-B529-3E41584B6CE5&amp;amp;displaylang=en" target="_blank"&gt;Microsoft Patterns &amp;amp; Practices Application Blocks 4.1&lt;/a&gt;. I &lt;strong&gt;strongly&lt;/strong&gt; recommend working through one of the samples before attempting to go it alone. I’ve done a lot with these blocks over the years, and they are never as ‘plug-and-go’ as one hopes. Anyway, in those blocks is a Security.Cryptographer building block. I use it, and I show you everything I do in this post.  &lt;p&gt;2) Create a VS 2008 Excel 2007 Add-in using VB.NET  &lt;p&gt;3) In the new project, add a form called “TwitterLogin”. Configure it to look like this: &lt;p&gt;&amp;nbsp;&lt;img src="http://9m93fw.bay.livefilestore.com/y1pXWn4fZklKbr1R1pWWZaUQsCpetueyFydG_Nt4OkOQQyeHAea7atQRiEX9cVD32T26CPf0Eo93MU/ExcelTwitterSmartTagLogin.jpg" width="206" height="125"&gt;&amp;nbsp;&amp;nbsp; &lt;p&gt;4) Your control names should be the following:&lt;/p&gt; &lt;table border="0" cellspacing="0" cellpadding="2" width="400"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign="top" width="200"&gt;&lt;strong&gt;Control Type&lt;/strong&gt;&lt;/td&gt; &lt;td valign="top" width="200"&gt;&lt;strong&gt;Name/Caption&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="200"&gt;Label&lt;/td&gt; &lt;td valign="top" width="200"&gt;Username:&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="200"&gt;Label&lt;/td&gt; &lt;td valign="top" width="200"&gt;Password:&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="200"&gt;TextBox&lt;/td&gt; &lt;td valign="top" width="200"&gt;txtUserName&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="200"&gt;TextBox&lt;/td&gt; &lt;td valign="top" width="200"&gt;txtPassword&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="200"&gt;Button&lt;/td&gt; &lt;td valign="top" width="200"&gt;cmdLogin, caption is “Login”&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="200"&gt;TwitterLogin (form)&lt;/td&gt; &lt;td valign="top" width="200"&gt;Twitter Login&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;p&gt;5) Add references so that they look like this: &lt;p&gt;&lt;img src="http://9m93fw.bay.livefilestore.com/y1pNvxeH-riq4RdQZVv8EaCMQY_NqOkxZDDm0aae8d_spAxcXtHvB0J23iAGl08RZqdYD3EZwPa58s/ExcelTwitterSmartTagReferences.jpg" width="241" height="115"&gt;  &lt;p&gt;6) Add a new class called HashHelper.  &lt;p&gt;7) Add a new app.config file  &lt;p&gt;8) Your overall project contents should look like this (you see a key file in here also, and you’ll be adding it in another step or two): &lt;p&gt;&lt;img src="http://9m93fw.bay.livefilestore.com/y1puYFHniqUPruRFY-LwoisyzzKwbUBYFkv64lLBoeTd7olkbl6nOK3L_0714UYak0XHFq7UzOwqlk/ExcelTwitterSmartTagSolutionExplorer.jpg" width="218" height="108"&gt;&amp;nbsp;&amp;nbsp; &lt;p&gt;9) Configure the app.config file to use a new symmetric provider for the encryption/description by right-clicking on app.config in VS. Open the file in the configuration editor by selecting Edit Enterprise Library Configuration on the context menu.  &lt;p&gt;10) In the editor, right click on the Application (the path with your app.config file name) and select New | Cryptography Application Block.  &lt;p&gt;11) Select Symmetric Providers in the new block just added and choose New. Then, select Symmetric Algorithm Provider.  &lt;p&gt;12) In the resulting dialog, select RijndaelManaged as the type, and press the Generate button to automatically generate a key, click OK. You’ll want the name/path of the key to be in the directory of your application (could be anywhere but it’s easier to manager this way) as shown in the previous solution explorer image.  &lt;p&gt;13) Name your new provider “symmProvider”. Verify that it look like this one: &lt;p&gt;&lt;img src="http://9m93fw.bay.livefilestore.com/y1puYFHniqUPru7F2TrlUUWgZzrZzE2V6GHHZNZndMmx_zcBffcpb8hNa7g0N7xB0Hb_2hwgtZptDQ/ExcelTwitterSmartTagAppConfig.jpg"&gt;  &lt;p&gt;14) Close the app.config file and save your changes.  &lt;p&gt;15) Return to your TwitterLogin form and double-click the button to bring up the cmdLogin_click event handler. Add this to that handler:&lt;pre class="csharpcode"&gt;       &lt;span class="kwrd"&gt;Dim&lt;/span&gt; UserNameEncrypt &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt;
        &lt;span class="kwrd"&gt;Dim&lt;/span&gt; PasswordEncrypt &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt;

        UserNameEncrypt = HashHelper.EncryptText(txtUsername.Text)
        PasswordEncrypt = HashHelper.EncryptText(txtPassword.Text)

        &lt;span class="kwrd"&gt;My&lt;/span&gt;.Settings.Username = UserNameEncrypt
        &lt;span class="kwrd"&gt;My&lt;/span&gt;.Settings.Password = PasswordEncrypt&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;p&gt;16) Make sure you have included the following Imports statements at the top of the class for that form:&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;Imports&lt;/span&gt; System.Security.Cryptography
&lt;span class="kwrd"&gt;Imports&lt;/span&gt; Microsoft.Practices.EnterpriseLibrary.Security.Cryptography&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;p&gt;17) Close and save the form.&lt;/p&gt;
&lt;p&gt;18) Open the HashHelper.vb file&lt;/p&gt;
&lt;p&gt;19) Add the following definition code to that file. Your login form and add-in code will be calling into this code to encrypt and decrypt the password as well as store their hashes.&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;Imports&lt;/span&gt; Microsoft.Practices.EnterpriseLibrary.Security.Cryptography
&lt;span class="kwrd"&gt;Imports&lt;/span&gt; System.Text

&lt;span class="kwrd"&gt;Friend&lt;/span&gt; &lt;span class="kwrd"&gt;Class&lt;/span&gt; HashHelper

    &lt;span class="kwrd"&gt;Private&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt;()
    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt;

    &lt;span class="rem"&gt;' Hash provider name must match app.config&lt;/span&gt;
    &lt;span class="kwrd"&gt;Private&lt;/span&gt; &lt;span class="kwrd"&gt;Const&lt;/span&gt; Provider &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt; = &lt;span class="str"&gt;"symmProvider"&lt;/span&gt;

    &lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Shared&lt;/span&gt; &lt;span class="kwrd"&gt;Function&lt;/span&gt; EncryptText(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; plainText &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt;) &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt;
        &lt;span class="kwrd"&gt;Dim&lt;/span&gt; returnText &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt;
        returnText = Cryptographer.EncryptSymmetric(Provider, plainText)
        &lt;span class="kwrd"&gt;Return&lt;/span&gt; returnText
    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Function&lt;/span&gt;

    &lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Shared&lt;/span&gt; &lt;span class="kwrd"&gt;Function&lt;/span&gt; DecryptText(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; HashString &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt;) &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt;
        &lt;span class="kwrd"&gt;Dim&lt;/span&gt; DecryptedString &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt;
        DecryptedString = Cryptographer.DecryptSymmetric(Provider, HashString)
        &lt;span class="kwrd"&gt;Return&lt;/span&gt; DecryptedString
    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Function&lt;/span&gt;

&lt;span class="kwrd"&gt;End&lt;/span&gt; Class&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;p&gt;20) Open your ThisAddIn.vb code file and add these Imports statements:&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;Imports&lt;/span&gt; Microsoft.Office.Tools.Excel
&lt;span class="kwrd"&gt;Imports&lt;/span&gt; System.Windows.Forms
&lt;span class="kwrd"&gt;Imports&lt;/span&gt; Microsoft.Office.Interop.SmartTag
&lt;span class="kwrd"&gt;Imports&lt;/span&gt; System.Net
&lt;span class="kwrd"&gt;Imports&lt;/span&gt; System.IO
&lt;span class="kwrd"&gt;Imports&lt;/span&gt; Microsoft.Practices.EnterpriseLibrary.Security.Cryptography
&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;21) Add the following global variable to your ThisAddIn Class:&lt;/p&gt;&lt;pre class="csharpcode"&gt;    &lt;span class="kwrd"&gt;Private&lt;/span&gt; TwitterTag &lt;span class="kwrd"&gt;As&lt;/span&gt; TwitterSmartTag
&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;p&gt;22) Add this to your ThisAddIn_Startup method:&lt;/p&gt;&lt;pre class="csharpcode"&gt;        TwitterTag = &lt;span class="kwrd"&gt;New&lt;/span&gt; TwitterSmartTag()
        &lt;span class="kwrd"&gt;Me&lt;/span&gt;.VstoSmartTags.Add(TwitterTag)
   
&lt;/pre&gt;
&lt;p&gt;23) Add a new class called TwitterSmartTag and add code so it looks like this:&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Class&lt;/span&gt; TwitterSmartTag
    &lt;span class="kwrd"&gt;Inherits&lt;/span&gt; SmartTag

    &lt;span class="rem"&gt;' Declare Actions for this SmartTag&lt;/span&gt;
    &lt;span class="kwrd"&gt;WithEvents&lt;/span&gt; Action1 &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt; Action(&lt;span class="str"&gt;""&lt;/span&gt;)
    &lt;span class="kwrd"&gt;WithEvents&lt;/span&gt; Action2 &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt; Action(&lt;span class="str"&gt;"whatever"&lt;/span&gt;)

    &lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt;()
        &lt;span class="kwrd"&gt;MyBase&lt;/span&gt;.&lt;span class="kwrd"&gt;New&lt;/span&gt;(&lt;span class="str"&gt;"http://painjunkie.spaces.live.com/jrd#TwitterTag"&lt;/span&gt;, _
            &lt;span class="str"&gt;"Excel-to-Twitter Smart Tag"&lt;/span&gt;)
        &lt;span class="kwrd"&gt;Me&lt;/span&gt;.Terms.AddRange(&lt;span class="kwrd"&gt;New&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt;() {&lt;span class="str"&gt;"Soulfly"&lt;/span&gt;, &lt;span class="str"&gt;"Motorhead"&lt;/span&gt;, &lt;span class="str"&gt;"Judas Priest"&lt;/span&gt;, &lt;span class="str"&gt;"Tool"&lt;/span&gt;, &lt;span class="str"&gt;"Pantera"&lt;/span&gt;})
        Actions = &lt;span class="kwrd"&gt;New&lt;/span&gt; Action() {Action1}
    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt;

    &lt;span class="kwrd"&gt;Protected&lt;/span&gt; &lt;span class="kwrd"&gt;Overrides&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt; Recognize(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; text &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt;, _
        &lt;span class="kwrd"&gt;ByVal&lt;/span&gt; site &lt;span class="kwrd"&gt;As&lt;/span&gt; ISmartTagRecognizerSite, _
        &lt;span class="kwrd"&gt;ByVal&lt;/span&gt; tokenList &lt;span class="kwrd"&gt;As&lt;/span&gt; ISmartTagTokenList)

        &lt;span class="rem"&gt;' Determine whether each smart tag term exists in &lt;/span&gt;
        &lt;span class="rem"&gt;' the document text.&lt;/span&gt;
        &lt;span class="kwrd"&gt;Dim&lt;/span&gt; Term &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt;
        &lt;span class="kwrd"&gt;For&lt;/span&gt; &lt;span class="kwrd"&gt;Each&lt;/span&gt; Term &lt;span class="kwrd"&gt;In&lt;/span&gt; &lt;span class="kwrd"&gt;Me&lt;/span&gt;.Terms

            &lt;span class="rem"&gt;' Search the cell text for the first instance of &lt;/span&gt;
            &lt;span class="rem"&gt;' the current smart tag term.&lt;/span&gt;
            &lt;span class="kwrd"&gt;Dim&lt;/span&gt; index &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Integer&lt;/span&gt; = &lt;span class="kwrd"&gt;Me&lt;/span&gt;.CellText.IndexOf(Term, 0)

            &lt;span class="kwrd"&gt;If&lt;/span&gt; (index &amp;gt;= 0) &lt;span class="kwrd"&gt;Then&lt;/span&gt;

                &lt;span class="rem"&gt;' Create a smart tag token and a property bag for the &lt;/span&gt;
                &lt;span class="rem"&gt;' recognized term.&lt;/span&gt;
                &lt;span class="kwrd"&gt;Dim&lt;/span&gt; propertyBag &lt;span class="kwrd"&gt;As&lt;/span&gt; ISmartTagProperties = _
                    site.GetNewPropertyBag()

                &lt;span class="rem"&gt;' Write a new property value.&lt;/span&gt;
                &lt;span class="kwrd"&gt;Dim&lt;/span&gt; key &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt; = &lt;span class="str"&gt;"Key1"&lt;/span&gt;
                propertyBag.Write(key, DateTime.Now)

                &lt;span class="rem"&gt;' Attach the smart tag to the term in the document&lt;/span&gt;
                &lt;span class="kwrd"&gt;Me&lt;/span&gt;.PersistTag(propertyBag)

                &lt;span class="rem"&gt;' This implementation only finds the first instance&lt;/span&gt;
                &lt;span class="rem"&gt;' of a smart tag term in the cell. &lt;/span&gt;
                &lt;span class="kwrd"&gt;Exit&lt;/span&gt; &lt;span class="kwrd"&gt;For&lt;/span&gt;
            &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt;
        &lt;span class="kwrd"&gt;Next&lt;/span&gt;
    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt;

    &lt;span class="kwrd"&gt;Private&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt; Action1_BeforeCaptionShow(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; sender &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Object&lt;/span&gt;, &lt;span class="kwrd"&gt;ByVal&lt;/span&gt; e &lt;span class="kwrd"&gt;As&lt;/span&gt; Microsoft.Office.Tools.Excel.ActionEventArgs) &lt;span class="kwrd"&gt;Handles&lt;/span&gt; Action1.BeforeCaptionShow
        &lt;span class="kwrd"&gt;Dim&lt;/span&gt; ClickedAction &lt;span class="kwrd"&gt;As&lt;/span&gt; Action = sender
        &lt;span class="kwrd"&gt;If&lt;/span&gt; e.Range.ListObject &lt;span class="kwrd"&gt;Is&lt;/span&gt; &lt;span class="kwrd"&gt;Nothing&lt;/span&gt; &lt;span class="kwrd"&gt;Then&lt;/span&gt;
            sender.Caption = &lt;span class="str"&gt;"Tweet this cell"&lt;/span&gt;
        &lt;span class="kwrd"&gt;Else&lt;/span&gt;
            sender.Caption = &lt;span class="str"&gt;"Tweet this list"&lt;/span&gt;
        &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt;
    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt;

    &lt;span class="rem"&gt;' This action displays the property value for the term.&lt;/span&gt;
    &lt;span class="kwrd"&gt;Private&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt; Action1_Click(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; sender &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Object&lt;/span&gt;, _
        &lt;span class="kwrd"&gt;ByVal&lt;/span&gt; e &lt;span class="kwrd"&gt;As&lt;/span&gt; ActionEventArgs) &lt;span class="kwrd"&gt;Handles&lt;/span&gt; Action1.Click

        &lt;span class="kwrd"&gt;Dim&lt;/span&gt; propertyBag &lt;span class="kwrd"&gt;As&lt;/span&gt; ISmartTagProperties = e.Properties
        &lt;span class="kwrd"&gt;Dim&lt;/span&gt; key &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt; = &lt;span class="str"&gt;"Key1"&lt;/span&gt;
        &lt;span class="kwrd"&gt;Dim&lt;/span&gt; Tweeter &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt; TweetThis()
        &lt;span class="kwrd"&gt;Try&lt;/span&gt;
            &lt;span class="kwrd"&gt;If&lt;/span&gt; My.Settings.Username.Length = 0 &lt;span class="kwrd"&gt;Or&lt;/span&gt; My.Settings.Password.Length = 0 &lt;span class="kwrd"&gt;Then&lt;/span&gt;
                &lt;span class="kwrd"&gt;Dim&lt;/span&gt; LoginForm &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt; TwitterLogin()
                LoginForm.ShowDialog()
            &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt;
            &lt;span class="kwrd"&gt;If&lt;/span&gt; Tweeter.TweetIt(e.Range.Text).Length &amp;gt; 0 &lt;span class="kwrd"&gt;Then&lt;/span&gt;
            &lt;span class="kwrd"&gt;Else&lt;/span&gt;
                MessageBox.Show(&lt;span class="str"&gt;"Twitter successfully updated!"&lt;/span&gt;, &lt;span class="str"&gt;"Twitter Status"&lt;/span&gt;, MessageBoxButtons.OK)
                &lt;span class="kwrd"&gt;Exit&lt;/span&gt; &lt;span class="kwrd"&gt;Try&lt;/span&gt;
            &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt;
            &lt;span class="kwrd"&gt;Throw&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt; Exception
        &lt;span class="kwrd"&gt;Catch&lt;/span&gt; ex &lt;span class="kwrd"&gt;As&lt;/span&gt; Exception
            MessageBox.Show(ex.Message, &lt;span class="str"&gt;"Twitter Update Error"&lt;/span&gt;, MessageBoxButtons.OK)
        &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Try&lt;/span&gt;

    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt;
&lt;span class="kwrd"&gt;End&lt;/span&gt; Class&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;p&gt;24) Lastly, add this class, TweetThis, which actually does the work of posting to your Twitter account:&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Class&lt;/span&gt; TweetThis
    &lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Function&lt;/span&gt; TweetIt(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; msg &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt;) &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt;
        &lt;span class="kwrd"&gt;Dim&lt;/span&gt; username, password &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt;
        &lt;span class="kwrd"&gt;Try&lt;/span&gt;

            username = HashHelper.DecryptText(My.Settings.Username)
            password = HashHelper.DecryptText(My.Settings.Password)

            System.Net.ServicePointManager.Expect100Continue = &lt;span class="kwrd"&gt;False&lt;/span&gt;

            &lt;span class="kwrd"&gt;Dim&lt;/span&gt; bytes() &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Byte&lt;/span&gt; = System.Text.Encoding.ASCII.GetBytes(&lt;span class="str"&gt;"status="&lt;/span&gt; &amp;amp; msg)

            &lt;span class="kwrd"&gt;Dim&lt;/span&gt; request &lt;span class="kwrd"&gt;As&lt;/span&gt; HttpWebRequest = &lt;span class="kwrd"&gt;CType&lt;/span&gt;(WebRequest.Create(&lt;span class="str"&gt;"http://twitter.com/statuses/update.xml"&lt;/span&gt;), HttpWebRequest)
            request.Credentials = &lt;span class="kwrd"&gt;New&lt;/span&gt; System.Net.NetworkCredential(username, password)
            request.Method = &lt;span class="str"&gt;"POST"&lt;/span&gt;
            request.ContentType = &lt;span class="str"&gt;"application/x-www-form-urlencoded"&lt;/span&gt;
            request.ContentLength = bytes.Length

            &lt;span class="kwrd"&gt;Dim&lt;/span&gt; reqStream &lt;span class="kwrd"&gt;As&lt;/span&gt; Stream = request.GetRequestStream()
            reqStream.Write(bytes, 0, bytes.Length)
            reqStream.Close()

            &lt;span class="kwrd"&gt;Dim&lt;/span&gt; response &lt;span class="kwrd"&gt;As&lt;/span&gt; HttpWebResponse = request.GetResponse
            &lt;span class="kwrd"&gt;Dim&lt;/span&gt; reader &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt; System.IO.StreamReader(response.GetResponseStream)

            &lt;span class="kwrd"&gt;Dim&lt;/span&gt; retValue &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt; = reader.ReadToEnd()
            reader.Close()

            &lt;span class="kwrd"&gt;Return&lt;/span&gt; &lt;span class="str"&gt;""&lt;/span&gt;
        &lt;span class="kwrd"&gt;Catch&lt;/span&gt; ex &lt;span class="kwrd"&gt;As&lt;/span&gt; Exception
            &lt;span class="kwrd"&gt;Return&lt;/span&gt; &lt;span class="str"&gt;"error"&lt;/span&gt;
        &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Try&lt;/span&gt;
    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Function&lt;/span&gt;
&lt;span class="kwrd"&gt;End&lt;/span&gt; Class&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;p&gt;25) That about does it. Build the solution and make sure things look good there. Then, run it and see what happens.&lt;/p&gt;
&lt;p&gt; BTW: Follow me:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://painjunkie.spaces.live.com/"&gt;http://painjunkie.spaces.live.com/&lt;/a&gt;
&lt;p&gt;&lt;a href="http://twitter.com/johnrdurant"&gt;http://twitter.com/johnrdurant&lt;/a&gt;
&lt;p&gt;&lt;strong&gt;Smart Tags Development Resources:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.kumo.com/search?q=smart+tags+VSTO+Durant&amp;amp;form=QBLH" target="_blank"&gt;Content I have written&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msdn.microsoft.com/office" target="_blank"&gt;Office Developer Center&lt;/a&gt; (just search for ‘Smart Tags’ there and you’ll see pretty good links)&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:aa889fc7-0ede-4943-86fc-2ee0ebefecc9" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Office+2007" rel="tag"&gt;Office 2007&lt;/a&gt;,&lt;a href="http://technorati.com/tags/XML" rel="tag"&gt;XML&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Office+Development" rel="tag"&gt;Office Development&lt;/a&gt;,&lt;a href="http://technorati.com/tags/OBA" rel="tag"&gt;OBA&lt;/a&gt;,&lt;a href="http://technorati.com/tags/OOXML" rel="tag"&gt;OOXML&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Content+Controls" rel="tag"&gt;Content Controls&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Microsoft+Office+System" rel="tag"&gt;Microsoft Office System&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Microsoft+Word" rel="tag"&gt;Microsoft Word&lt;/a&gt;,&lt;a href="http://technorati.com/tags/VBA" rel="tag"&gt;VBA&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Excel" rel="tag"&gt;Excel&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Twitter" rel="tag"&gt;Twitter&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9482065" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/johnrdurant/archive/tags/Microsoft+Office+System/default.aspx">Microsoft Office System</category><category domain="http://blogs.msdn.com/johnrdurant/archive/tags/VSTO/default.aspx">VSTO</category></item><item><title>Saving Money in IT: Maximizing Value is Key (+ review of new U2 album)</title><link>http://blogs.msdn.com/johnrdurant/archive/2009/03/11/saving-money-in-it-maximizing-value-is-key-review-of-new-u2-album.aspx</link><pubDate>Thu, 12 Mar 2009 01:13:58 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9471039</guid><dc:creator>johnrdurant</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/johnrdurant/comments/9471039.aspx</comments><wfw:commentRss>http://blogs.msdn.com/johnrdurant/commentrss.aspx?PostID=9471039</wfw:commentRss><description>&lt;p&gt;In a recent post to a blog, a writer, &lt;a href="http://creese.typepad.com/pattern_finder/2009/03/saving-money-in-it-granularity-is-key.html" target="_blank"&gt;Guy Creese&lt;/a&gt;, writes that the key to saving money in IT is ‘granularity’. In short- he suggests that the IT cost-saving key is to figure out what the basic use experiences are for people and match them to the cheapest software that suits those needs. I respect his view, and I hope he doesn’t mind if I politely disagree.&lt;/p&gt; &lt;p&gt;Regarding Microsoft Office he says:&lt;/p&gt; &lt;p&gt;&lt;em&gt;“Somebody needs a productivity suite? Give them Microsoft Office. It does everything and then some. In many cases, it does more than the employee needs; but there's no easy way to get Microsoft Office lite from Microsoft.”&lt;/em&gt;&lt;/p&gt; &lt;p&gt;Granted, there is such a thing as overkill. You see it happen all of the time in the business you are in. And, IT has certainly been guilty of excess. I recall in the 90’s when there was comparatively low oversight for IT budgets, and the largesse that many IT departments passed off as ‘essential needs’ was embarrassing. Custom applications were the rage, and many of them were essentially killing gnats with cannons. This, and a number of other factors, contributed to the ‘giant popping sound’ that was the .com bubble in 2001.&lt;/p&gt; &lt;p&gt;Given the current economic conditions and the budget stress that many companies are feeling, the importance of extracting the maximum value from any investment could not be overstated. I liken this value maximization to how I pack for one of the backpacking trips I take each year with my sons. When I pack for a multi-day trip in the mountains, I can only take things that serve more than one function. The proverbial ‘swiss army knife’ is a great example. It makes much more sense taking a sturdy, battle-proven, multi-functioned utility like that than carry around a tackle-box full of separate items. Sure, I may never use the corkscrew, but this doesn’t cause me to lose any sleep, and, like Bear Grylls (Man vs. Wild) would probably say, that corkscrew may do more than pull corks when a need arises.&lt;/p&gt; &lt;p&gt;Microsoft Office, as a suite of applications and technologies serves a very large audience with varying needs. The applications appear comparatively simple and easy-to-use for the beginner, but they have the chops to match the needs of the demanding expert as the need arises. It&amp;nbsp; is a testament to the amazing usability and flexibility of the applications that a loving grandmother in Tokyo can comfortably use Word to type letters to her family while a legal firm uses the same application as the basis for a complex business solution that helps them manage the workflow of legal matters from induction through trial and resolution. The number of ways that the Office applications are used among the hundreds of millions of people who employ them is impressive.&lt;/p&gt; &lt;p&gt;Further, Microsoft Office is positioned in the marketplace as a high-value play. Consider that some other business applications have only one application in the package and cost around $1000.00 (USD) where as the Microsoft Office suite has multiple applications with industry-leading:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;UI design  &lt;li&gt;Help system  &lt;li&gt;Web integration (Outlook Web Access, Excel Services, Project Server,. . .)  &lt;li&gt;Data loss prevention  &lt;li&gt;Support  &lt;li&gt;Customizability&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Overall, Microsoft Office delivers an enormous amount of value for a comparatively low price. It serves a vast and heterogeneous population of users and yet what people don’t need in a given applications doesn’t get in the way. I would say that the more accurate challenge Microsoft Office has is not that it does too much but that we have not done the best job in helping people understand all that it can do and how it can save people time, money, and resources. Time after time, when people learn about features and abilities in Microsoft Office, they have an epiphany and get very excited about using them.&lt;/p&gt; &lt;p&gt;And, it makes sense that Office has such rich power and capability: Our customers have demanded it! At Microsoft, we didn’t whimsically add features to the applications! The applications, features, and designs are the result of a nearly incalculable amount of due-diligence. We listen intently to our customers and invest heavily in focus groups, and research. The various feature priorities are further vetted through a very demanding process often including test-runs with customers before they ever make it into the product. Do we sometimes still miss the mark a little? In my opinion—sure. I think that is true. I’ve never been part of a perfect anything. But, overall, I think we do a pretty good job, and there is lots of evidence that this is so.&lt;/p&gt; &lt;p&gt;So, returning to the original thesis: The key to saving money in IT is not figuring out what the least common denominator is and then fetching an application or technology to match it. The real key is to figure out what the variety of needs one has in the business and determine which application or technology delivers the best value. This is an arena where Microsoft Office does and can continue to win.&lt;/p&gt; &lt;p&gt;But, what about that part where “there’s no easy way to get a [lite version of Office] from Microsoft”? Well, it’s not so hard actually. We do have ‘lite’ and ‘beefy’ (colloquially speaking) versions of Microsoft Office. In fact, &lt;a href="http://office.microsoft.com/en-us/products/FX101635841033.aspx" target="_blank"&gt;we are more nuanced than that&lt;/a&gt;. Fortunately, they’re available at a lot of stores, and I’ve never heard of huge difficulties finding them.&lt;/p&gt; &lt;p&gt;Finally, it would be a mistake to not include in this value proposition how Microsoft Office works with other software and technologies—both Microsoft and non-Microsoft. Microsoft Office has built-in power to connect to all sorts of systems, data sources, and applications. Coupled with our SharePoint technologies and our Microsoft Exchange and Unified communications platform and you are looking at incredible value. Moreover, beneath all of these applications and technologies &lt;a href="https://www.obacentral.com/en/Pages/default.aspx" target="_blank"&gt;is extensibility and programmability power&lt;/a&gt; that lets you surface disparate systems and data sources through custom applications served up in the familiar Office UI. Yeah, I may sound a little too ‘market-y’ here, but I’ve been saying these same things for years.&lt;/p&gt; &lt;p&gt;My perspective on the things comes from many years as a consultant/architect/author/ and now Microsoft employee. I’ve seen the innards of many companies and their systems. I’ve seen lots of mistakes made in IT (and contributed to enough of them to learn better), and the value-driven approach is one that I have observed stand the test of time.&lt;/p&gt; &lt;p&gt;OK—I need to get home and help my kids with (the granularity of their) homework . . .&lt;/p&gt; &lt;p&gt;&lt;img src="http://ykioog.bay.livefilestore.com/y1p67qhWCdnH9zAPEJBPh5okY4ELWek2eojBvjTkNqEt6Ot0ZLU8rEqh3dz0vEj900X6sw7mkk90NtVTwscMb-cKQ/guitar_small.gif"&gt;&lt;strong&gt;Rock Thought of the Day:&lt;/strong&gt;  &lt;p&gt;I have the new U2 album, “No Line on the Horizon”. As always, there are some new things happening here while remaining a clearly U2 offering. Bono pushes his vocals in some new and interesting ways. The rhythm section has never sounded better, and it is just exciting to hear that side of things. The Edge continues to explore new ways of using delay and evoking landscapes of sound in that medium. On the whole, I would summarize the sounds (doing violence to the detail here) that this is the best learnings of Achtung Baby and everything since then plus some new magic that is the wellspring of U2. Only two songs irked me, but I won’t tell you which ones. All of this said, I would add that I want this band to go further, to take bigger risks. I am one of those who really liked the ‘Pop’ album/phase of U2. They took big risks and let their creativity soar. They took us along for the ride. Of course, I can see why some fans just couldn’t go that far. But, if one wants to claim the title of ‘biggest band in the world’, then you need to push the boundaries out in a way no one else can—just as if there were no line on the horizon.  &lt;p&gt;&lt;strong&gt;Rock On&lt;/strong&gt;  &lt;p&gt;&lt;/p&gt; &lt;p&gt;Follow me: &lt;a href="http://twitter.com/johnrdurant" target="_blank"&gt;Twitter&lt;/a&gt;, &lt;a href="http://painjunkie.spaces.live.com/" target="_blank"&gt;Spaces&lt;/a&gt;&lt;/p&gt; &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:c2706d40-d2a4-4225-8d5e-8c4eacdbd25d" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Office+2007" rel="tag"&gt;Office 2007&lt;/a&gt;,&lt;a href="http://technorati.com/tags/XML" rel="tag"&gt;XML&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Office+Development" rel="tag"&gt;Office Development&lt;/a&gt;,&lt;a href="http://technorati.com/tags/OBA" rel="tag"&gt;OBA&lt;/a&gt;,&lt;a href="http://technorati.com/tags/OOXML" rel="tag"&gt;OOXML&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Content+Controls" rel="tag"&gt;Content Controls&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Microsoft+Office+System" rel="tag"&gt;Microsoft Office System&lt;/a&gt;&lt;/div&gt;&amp;nbsp; &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:edd3da77-b62d-4e5f-9be3-8aa3f27e92ea" class="wlWriterEditableSmartContent"&gt;BuzzNet Tags: &lt;a href="http://www.buzznet.com/tags/U2" rel="tag"&gt;U2&lt;/a&gt;,&lt;a href="http://www.buzznet.com/tags/Bono" rel="tag"&gt;Bono&lt;/a&gt;,&lt;a href="http://www.buzznet.com/tags/Edge" rel="tag"&gt;Edge&lt;/a&gt;,&lt;a href="http://www.buzznet.com/tags/Adam+Clayton" rel="tag"&gt;Adam Clayton&lt;/a&gt;,&lt;a href="http://www.buzznet.com/tags/Larry+Mullen" rel="tag"&gt;Larry Mullen&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9471039" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/johnrdurant/archive/tags/Microsoft+Office+System/default.aspx">Microsoft Office System</category></item><item><title>www.iheartonenote.com</title><link>http://blogs.msdn.com/johnrdurant/archive/2009/03/10/www-iheartonenote-com.aspx</link><pubDate>Tue, 10 Mar 2009 23:20:27 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9469617</guid><dc:creator>johnrdurant</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/johnrdurant/comments/9469617.aspx</comments><wfw:commentRss>http://blogs.msdn.com/johnrdurant/commentrss.aspx?PostID=9469617</wfw:commentRss><description>&lt;p&gt;I truly enjoy being enthusiastic about OneNote. I’m not ashamed of my unguarded devotion to this application (share the love via the new site: &lt;a href="http://www.iheartonenote.com"&gt;www.iheartonenote.com&lt;/a&gt;). Here at Microsoft, new ideas spring up every day, and those ideas/prototypes/proofs-of-concept fight for attention. They scramble, they hustle, prove their value, and if they are lucky—they survive and make it to big show: They become part of the Microsoft Office brand. &lt;em&gt;OneNote is one such idea, and during the past few years it has radically altered my entire Windows experience.&lt;/em&gt;&lt;/p&gt; &lt;p&gt;I record, store, share, search, and surf meaningful information in very different ways since I started using this application. I have heard similar experiences from many other people.&lt;/p&gt; &lt;p&gt;When I was in college I used a manual typewriter (not even electric!). I used that for my bachelors and one of my master’s degrees. Later, for my other two degree programs, I was able to get a small PowerBook with Word 6.0 and Excel. But, all of my notes were on paper. If I had been able to use OneNote I would have been much more productive.&lt;/p&gt; &lt;p&gt;OneNote has a modest little developer story, but, if OneNote can only have one developer angle—it is the right one: It exposes a little import method so that other applications can export their content to OneNote (eg: Internet Explorer, Outlook, Word, a non-MS application, whatever).&lt;/p&gt; &lt;p&gt;Here are two little articles that explain how:&lt;/p&gt; &lt;p&gt;&lt;a title="http://msdn.microsoft.com/en-us/library/ms788684.aspx" href="http://msdn.microsoft.com/en-us/library/ms788684.aspx"&gt;http://msdn.microsoft.com/en-us/library/ms788684.aspx&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a title="http://msdn.microsoft.com/en-us/library/aa286798.aspx" href="http://msdn.microsoft.com/en-us/library/aa286798.aspx"&gt;http://msdn.microsoft.com/en-us/library/aa286798.aspx&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;img src="http://ykioog.bay.livefilestore.com/y1p67qhWCdnH9zAPEJBPh5okY4ELWek2eojBvjTkNqEt6Ot0ZLU8rEqh3dz0vEj900X6sw7mkk90NtVTwscMb-cKQ/guitar_small.gif"&gt;&lt;strong&gt;Rock Thought of the Day:&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Purchased the new DVD of&lt;strong&gt; the Who&lt;/strong&gt;, live at Kilburn 1977. It’s footage that has never been seen before (the film cans were nearly thrown out in the trash). It contains the penultimate performance of Keith Moon, and it shows the band at their zenith of power. Go get it, and prepare to not be able to pull yourself away from the screen until it’s over.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Rock On&lt;/strong&gt;&lt;/p&gt; &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:1d1fe2e8-13d1-4dea-b605-2ee88812d188" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Office+2007" rel="tag"&gt;Office 2007&lt;/a&gt;,&lt;a href="http://technorati.com/tags/XML" rel="tag"&gt;XML&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Office+Development" rel="tag"&gt;Office Development&lt;/a&gt;,&lt;a href="http://technorati.com/tags/OBA" rel="tag"&gt;OBA&lt;/a&gt;,&lt;a href="http://technorati.com/tags/OOXML" rel="tag"&gt;OOXML&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Content+Controls" rel="tag"&gt;Content Controls&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Microsoft+Office+System" rel="tag"&gt;Microsoft Office System&lt;/a&gt;&lt;/div&gt; &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:088d1b3f-fefc-4ced-8122-04d79820d229" class="wlWriterEditableSmartContent"&gt;BuzzNet Tags: &lt;a href="http://www.buzznet.com/tags/The+Who" rel="tag"&gt;The Who&lt;/a&gt;,&lt;a href="http://www.buzznet.com/tags/Keith+Moon" rel="tag"&gt;Keith Moon&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9469617" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/johnrdurant/archive/tags/Microsoft+Office+System/default.aspx">Microsoft Office System</category></item><item><title>Twitter from Excel 2007</title><link>http://blogs.msdn.com/johnrdurant/archive/2009/03/05/twitter-from-excel-2007.aspx</link><pubDate>Thu, 05 Mar 2009 12:30:19 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9459509</guid><dc:creator>johnrdurant</dc:creator><slash:comments>6</slash:comments><comments>http://blogs.msdn.com/johnrdurant/comments/9459509.aspx</comments><wfw:commentRss>http://blogs.msdn.com/johnrdurant/commentrss.aspx?PostID=9459509</wfw:commentRss><description>&lt;p&gt;I&lt;font size="3"&gt; cannot think of any compelling reason for sending a tweet from a form in Excel other than it's kind of cool to know it can be done. Nevertheless, the little add-in for Excel has its charm as an odd little novelty:&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://chandoo.org/wp/2009/02/05/twitter-from-excel/" target="_blank"&gt;&lt;font size="3"&gt;How to write your own Twitter client in Excel&lt;/font&gt;&lt;/a&gt;&lt;font size="3"&gt; (&lt;/font&gt;&lt;a href="http://www.codeforexcelandoutlook.com/blog/2009/02/excel-to-twitter/" target="_blank"&gt;&lt;em&gt;&lt;font size="3"&gt;Userform version is here&lt;/font&gt;&lt;/em&gt;&lt;/a&gt;&lt;font size="3"&gt;)&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="3"&gt;You can see my little tweet sent from Excel here:&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;a title="http://twitter.com/johnrdurant" href="http://twitter.com/johnrdurant"&gt;&lt;font size="3"&gt;http://twitter.com/johnrdurant&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="3"&gt;I tip my cap to Chandoo (and JP for the form version) on this one.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="3"&gt;Stay tuned for my addition to the app tomorrow--- I intend to add a little mix of technology in there that will make the application more relevant.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="3"&gt;&lt;img src="http://ykioog.bay.livefilestore.com/y1p67qhWCdnH9zAPEJBPh5okY4ELWek2eojBvjTkNqEt6Ot0ZLU8rEqh3dz0vEj900X6sw7mkk90NtVTwscMb-cKQ/guitar_small.gif"&gt;&lt;strong&gt;Rock Thought of the Day:&lt;/strong&gt;&amp;nbsp; &lt;/font&gt; &lt;p&gt;&lt;a href="http://www.facebook.com/note.php?note_id=65918447937"&gt;&lt;font size="3"&gt;The Black Crowes 'Warpaint' LP is fantastic&lt;/font&gt;&lt;/a&gt; &lt;p&gt;&lt;a href="http://www.facebook.com/photo.php?pid=30312033&amp;amp;op=1&amp;amp;view=all&amp;amp;subj=65918447937&amp;amp;aid=-1&amp;amp;oid=65918447937&amp;amp;id=1010922370"&gt;&lt;font size="3"&gt;&lt;img alt="" src="http://photos-b.ak.fbcdn.net/photos-ak-snc1/v2463/251/64/1010922370/n1010922370_30312033_56857.jpg"&gt;&lt;/font&gt;&lt;/a&gt; &lt;p&gt;&lt;font size="3"&gt;Warpaint&lt;/font&gt; &lt;p&gt;&lt;font size="3"&gt;Listened to their new CD and it has some of their very best work. Granted, the two previous records were a little bit of a strain in my view. But, this one proves that they have not lost their touch, and they are reaching farther, producing better material than ever. Give it a listen, and make sure you have already set aside the $$ to buy a copy, or it will make waiting much harder.&lt;/font&gt; &lt;p&gt;&lt;strong&gt;&lt;font size="3"&gt;ROCK ON!&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:cc2bb5f9-53cb-468a-81a1-884751c0f90d" class="wlWriterSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Office%202007" rel="tag"&gt;Office 2007&lt;/a&gt;,&lt;a href="http://technorati.com/tags/XML" rel="tag"&gt;XML&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Office%20Development" rel="tag"&gt;Office Development&lt;/a&gt;,&lt;a href="http://technorati.com/tags/OBA" rel="tag"&gt;OBA&lt;/a&gt;,&lt;a href="http://technorati.com/tags/OOXML" rel="tag"&gt;OOXML&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Content%20Controls" rel="tag"&gt;Content Controls&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Microsoft%20Office%20System" rel="tag"&gt;Microsoft Office System&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Microsoft%20Word" rel="tag"&gt;Microsoft Word&lt;/a&gt;,&lt;a href="http://technorati.com/tags/VBA" rel="tag"&gt;VBA&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Excel" rel="tag"&gt;Excel&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Twitter" rel="tag"&gt;Twitter&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Black%20Crowes" rel="tag"&gt;Black Crowes&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Warpaint" rel="tag"&gt;Warpaint&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9459509" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/johnrdurant/archive/tags/Microsoft+Office+System/default.aspx">Microsoft Office System</category></item><item><title>Adding and Binding XML in Office Documents</title><link>http://blogs.msdn.com/johnrdurant/archive/2009/02/18/adding-and-binding-xml-in-office-documents.aspx</link><pubDate>Thu, 19 Feb 2009 04:09:34 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9432933</guid><dc:creator>johnrdurant</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/johnrdurant/comments/9432933.aspx</comments><wfw:commentRss>http://blogs.msdn.com/johnrdurant/commentrss.aspx?PostID=9432933</wfw:commentRss><description>&lt;p&gt;&lt;font size="2"&gt;I am frequently asked about how to do some of the basics with XML parts in Office documents. There are excellent blogs and content out there to guide you in working with Office Open XML such as &lt;a href="http://blogs.msdn.com/brian_jones" target="_blank"&gt;Brian Jones&lt;/a&gt;, &lt;a href="http://blogs.msdn.com/dmahugh" target="_blank"&gt;Doug Mahugh&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/office" target="_blank"&gt;MSDN&lt;/a&gt;, and the &lt;a href="http://http://go.microsoft.com/fwlink/?LinkId=127912" target="_blank"&gt;Office Open XML SDK&lt;/a&gt;. I have also blogged extensively about OOXML and co-authored a &lt;a href="http://www.amazon.com/XML-Programming-Bible-Brian-Benz/dp/0764538292/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1235005370&amp;amp;sr=1-1" target="_blank"&gt;major book on XML&lt;/a&gt;. But, the need to help more and more people get into the game of XML and Office is ever present.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="2"&gt;So, here are a couple of routines you'll find useful. The first routine adds two XML parts to a Microsoft Word document. The second removes the first XML part.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="2"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font size="3" face="Courier"&gt;&lt;font color="#0000ff"&gt;Private Sub&lt;/font&gt; AddToDataStore()&lt;br&gt;&amp;nbsp; Dim pCustomPart As CustomXMLPart&lt;br&gt;&amp;nbsp; Set pCustomPart = ThisDocument. _&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CustomXMLParts.Add&lt;br&gt;&amp;nbsp; pCustomPart.Load "C:\XMLPart1.xml"&lt;br&gt;&amp;nbsp; pCustomPart.Load "C:\XMLSchema1.xsd"&lt;br&gt;&lt;font color="#0000ff"&gt;End Sub&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="3" face="Courier"&gt;&lt;br&gt;&lt;font color="#0000ff"&gt;Private Sub&lt;/font&gt; RemoveFromDataStore()&lt;br&gt;&amp;nbsp; Dim pCustomPart As CustomXMLPart&lt;br&gt;&amp;nbsp; Dim pCustomParts As CustomXMLParts&lt;br&gt;&amp;nbsp; Set pCustomParts = ThisDocument.CustomXMLParts&lt;br&gt;&amp;nbsp; pCustomParts.Item(1).Delete&lt;br&gt;&lt;font color="#0000ff"&gt;End Sub&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;It's essential to create copies of documents before you start messing around with their content and composition via code.  &lt;p&gt;Now, you can add whatever XML you want. In this case, the XML contains data for a memo and it is in the document. The document contains places for the memo data. Up to this point, the memo data are unseen to the user. To surface the data in the document's editable area you place content controls, one for each memo property (To, From, etc.) in the document and bind the content controls to the XML source in the following way:  &lt;p&gt;&lt;font size="3" face="Courier"&gt;&lt;font color="#0000ff"&gt;Private Sub&lt;/font&gt; AddControlMap()&lt;br&gt;&amp;nbsp; Dim cControls As ContentControls &lt;/font&gt; &lt;p&gt;&lt;font size="3" face="Courier"&gt;&amp;nbsp; Set cControls = ThisDocument.ContentControls&lt;br&gt;&amp;nbsp; cControls.Item(1).XMLMapping.SetMapping "/ns:memo/ns:to", _&lt;br&gt;&amp;nbsp; "xmlns:ns='&lt;/font&gt;&lt;a href="http://painjunkie.spaces.live.com'&amp;quot;"&gt;&lt;font size="3" face="Courier"&gt;http://painjunkie.spaces.live.com'"&lt;/font&gt;&lt;/a&gt;&lt;br&gt;&lt;font size="3" face="Courier"&gt;&amp;nbsp; cControls.Item(2).XMLMapping.SetMapping "/ns:memo/ns:from", _&lt;br&gt;&amp;nbsp; "xmlns:ns='&lt;/font&gt;&lt;a href="http://painjunkie.spaces.live.com'&amp;quot;"&gt;&lt;font size="3" face="Courier"&gt;http://painjunkie.spaces.live.com'"&lt;/font&gt;&lt;/a&gt;&lt;br&gt;&lt;font size="3" face="Courier"&gt;&amp;nbsp; cControls.Item(3).XMLMapping.SetMapping "/ns:memo/ns:date", _&lt;br&gt;&amp;nbsp; "xmlns:ns='&lt;/font&gt;&lt;a href="http://painjunkie.spaces.live.com'&amp;quot;"&gt;&lt;font size="3" face="Courier"&gt;http://painjunkie.spaces.live.com'"&lt;/font&gt;&lt;/a&gt;&lt;br&gt;&lt;font size="3" face="Courier"&gt;&amp;nbsp; cControls.Item(4).XMLMapping.SetMapping "/ns:memo/ns:topics", _&lt;br&gt;&amp;nbsp; "xmlns:ns='&lt;/font&gt;&lt;a href="http://painjunkie.spaces.live.com'&amp;quot;"&gt;&lt;font size="3" face="Courier"&gt;http://painjunkie.spaces.live.com'"&lt;/font&gt;&lt;/a&gt;&lt;br&gt;&lt;font size="3" face="Courier"&gt;&amp;nbsp; cControls.Item(5).XMLMapping.SetMapping "/ns:memo/ns:body", _&lt;br&gt;&amp;nbsp; "xmlns:ns='&lt;/font&gt;&lt;a href="http://painjunkie.spaces.live.com'&amp;quot;"&gt;&lt;font size="3" face="Courier"&gt;http://painjunkie.spaces.live.com'"&lt;/font&gt;&lt;/a&gt;&lt;br&gt;&lt;font color="#0000ff" size="3" face="Courier"&gt;End Sub&lt;/font&gt;  &lt;p&gt;&amp;nbsp; &lt;p&gt;What is so slick about all of this is that Office does the work of gluing it all together for you if your XML data conforms to the XML schema you added in the AddToDataStore procedure! By mapping a content control to a specific node in the schema will cause the data (also mapped to the schema) to load into the content control.  &lt;p&gt;Try it out, and tell me how it goes.  &lt;p&gt;&amp;nbsp; &lt;p&gt;&lt;img src="http://ykioog.bay.livefilestore.com/y1p67qhWCdnH9zAPEJBPh5okY4ELWek2eojBvjTkNqEt6Ot0ZLU8rEqh3dz0vEj900X6sw7mkk90NtVTwscMb-cKQ/guitar_small.gif"&gt;&lt;strong&gt;Rock Thought of the Day:&lt;/strong&gt; Lovin' the blues-soaked song &lt;a href="http://social.zune.net/album/Robin+Trower/Bridge+Of+Sighs+Remastered/99e3ad00-0100-11db-89ca-0019b92a3933/details" target="_blank"&gt;"Bridge of Sighs"&lt;/a&gt; from Robin Trower off of his 2007 release by the same name. Check it out!&amp;nbsp; &lt;p&gt;&lt;strong&gt;ROCK ON!&lt;/strong&gt; &lt;/p&gt; &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:17ce1025-71c8-4ecb-848f-779acc57209a" class="wlWriterSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Office%202007" rel="tag"&gt;Office 2007&lt;/a&gt;,&lt;a href="http://technorati.com/tags/XML" rel="tag"&gt;XML&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Office%20Development" rel="tag"&gt;Office Development&lt;/a&gt;,&lt;a href="http://technorati.com/tags/OBA" rel="tag"&gt;OBA&lt;/a&gt;,&lt;a href="http://technorati.com/tags/OOXML" rel="tag"&gt;OOXML&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Content%20Controls" rel="tag"&gt;Content Controls&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Microsoft%20Office%20System" rel="tag"&gt;Microsoft Office System&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Microsoft%20Word" rel="tag"&gt;Microsoft Word&lt;/a&gt;,&lt;a href="http://technorati.com/tags/VBA" rel="tag"&gt;VBA&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9432933" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/johnrdurant/archive/tags/Microsoft+Office+System/default.aspx">Microsoft Office System</category></item><item><title>Office 2007 (and beyond) Developer Resources: Looking ahead</title><link>http://blogs.msdn.com/johnrdurant/archive/2009/02/05/office-2007-and-beyond-developer-resources-looking-ahead.aspx</link><pubDate>Fri, 06 Feb 2009 01:29:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9400012</guid><dc:creator>johnrdurant</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/johnrdurant/comments/9400012.aspx</comments><wfw:commentRss>http://blogs.msdn.com/johnrdurant/commentrss.aspx?PostID=9400012</wfw:commentRss><description>&lt;P&gt;Many of the investments developers make in Office 2007 are version-durable (read: they are likely to endure into the next version of Office). Some of the Office 2007 technologies that are so appealing for business productivity solutions are the new Office document format, Word content controls, and the Office Fluent UI (eg: Ribbon).&lt;/P&gt;
&lt;P&gt;There are some great resources to help you get into these. I recommend:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;JUST ADDED (9 March 2009): &lt;A href="http://www.microsoft.com/events/series/officedeveloperlive.aspx"&gt;http://www.microsoft.com/events/series/officedeveloperlive.aspx&lt;/A&gt; 
&lt;LI&gt;&lt;A title=http://openxmldeveloper.org/ href="http://openxmldeveloper.org/" mce_href="http://openxmldeveloper.org/"&gt;http://openxmldeveloper.org/&lt;/A&gt; --- This is the main site for our XML initiative regarding the file formats in Office 2007. There are samples and explanations here that will serve you quite well as you dive in. 
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/aa338205.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/aa338205.aspx"&gt;Introducing the Office (2007) Open XML File Formats&lt;/A&gt; by Frank Rice --- This is an excellent introductory article by the prolific and precise Mr. Rice! 
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/aa338197.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/aa338197.aspx"&gt;Creating Custom Task Panes in the 2007 Office System&lt;/A&gt; by Mark O'Hara and Frank Rice 
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/aa338202.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/aa338202.aspx"&gt;Customizing the 2007 Office Fluent Ribbon for Developers (3 parts)&lt;/A&gt; by the incomparable Ken Getz 
&lt;LI&gt;&lt;A href="http://search.barnesandnoble.com/Programming-Microsoft-Office-Business-Applications/Steve-Fox/e/9780735625365/?itm=2" target=_blank mce_href="http://search.barnesandnoble.com/Programming-Microsoft-Office-Business-Applications/Steve-Fox/e/9780735625365/?itm=2"&gt;Programming Office Business Applications&lt;/A&gt; by Steve Fox, Paul Stubbs, Rob Barker 
&lt;LI&gt;&lt;A href="http://search.barnesandnoble.com/Mastering-VBA-for-Microsoft-Office-2007/Richard-Mansfield/e/9780470279595" target=_blank mce_href="http://search.barnesandnoble.com/Mastering-VBA-for-Microsoft-Office-2007/Richard-Mansfield/e/9780470279595"&gt;Master VBA for Microsoft Office 2007&lt;/A&gt; by Richard Mansfield 
&lt;LI&gt;&lt;A href="http://search.barnesandnoble.com/Mastering-VBA-for-Microsoft-Office-2007/Richard-Mansfield/e/9780470279595" target=_blank mce_href="http://search.barnesandnoble.com/Mastering-VBA-for-Microsoft-Office-2007/Richard-Mansfield/e/9780470279595"&gt;6 Microsoft Office Business Applications for Office SharePoint Server 2007&lt;/A&gt; by Rob Barker, Adam Buenz, Joanna Bichsel&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;It is too early to comment yet on Office 14 specifically, so I will not disclose product details at this time. Nevertheless, there are some things worth investing in now and in looking ahead. The XML file formats, Office Fluent UI, and Word content controls remain exciting technologies and excellent opportunities to extend Office to meet business needs.&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://ykioog.bay.livefilestore.com/y1p67qhWCdnH9zAPEJBPh5okY4ELWek2eojBvjTkNqEt6Ot0ZLU8rEqh3dz0vEj900X6sw7mkk90NtVTwscMb-cKQ/guitar_small.gif" mce_src="http://ykioog.bay.livefilestore.com/y1p67qhWCdnH9zAPEJBPh5okY4ELWek2eojBvjTkNqEt6Ot0ZLU8rEqh3dz0vEj900X6sw7mkk90NtVTwscMb-cKQ/guitar_small.gif"&gt;&lt;STRONG&gt;Rock Thought of the Day:&lt;/STRONG&gt;&amp;nbsp;&lt;A href="http://painjunkie.spaces.live.com/blog/cns!C8F447DC1927F2BE!827.entry" target=_blank mce_href="http://painjunkie.spaces.live.com/blog/cns!C8F447DC1927F2BE!827.entry"&gt;Here's a raw dump of the awesome Rock and Roll I have listened to in the past 24 hours!&lt;/A&gt;&amp;nbsp; 
&lt;P&gt;&lt;STRONG&gt;ROCK ON!&lt;/STRONG&gt; &lt;/P&gt;
&lt;DIV style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; DISPLAY: inline; PADDING-TOP: 0px" id=scid:0767317B-992E-4b12-91E0-4F059A8CECA8:cb8734df-4b0d-45be-a5c7-b37ea5b37707 class=wlWriterSmartContent&gt;Technorati Tags: &lt;A href="http://technorati.com/tags/Office" rel=tag mce_href="http://technorati.com/tags/Office"&gt;Office&lt;/A&gt;,&lt;A href="http://technorati.com/tags/Office%202007" rel=tag mce_href="http://technorati.com/tags/Office%202007"&gt;Office 2007&lt;/A&gt;,&lt;A href="http://technorati.com/tags/XML" rel=tag mce_href="http://technorati.com/tags/XML"&gt;XML&lt;/A&gt;,&lt;A href="http://technorati.com/tags/OOXML" rel=tag mce_href="http://technorati.com/tags/OOXML"&gt;OOXML&lt;/A&gt;,&lt;A href="http://technorati.com/tags/File%20Format" rel=tag mce_href="http://technorati.com/tags/File%20Format"&gt;File Format&lt;/A&gt;,&lt;A href="http://technorati.com/tags/Development" rel=tag mce_href="http://technorati.com/tags/Development"&gt;Development&lt;/A&gt;,&lt;A href="http://technorati.com/tags/VS" rel=tag mce_href="http://technorati.com/tags/VS"&gt;VS&lt;/A&gt;,&lt;A href="http://technorati.com/tags/VSTO" rel=tag mce_href="http://technorati.com/tags/VSTO"&gt;VSTO&lt;/A&gt;&lt;/DIV&gt;
&lt;P&gt;Posted &lt;A href="http://blogs.msdn.com/johnrdurant/archive/2009/01/12/sharepoint-developer-tools-announcing-public-ctp-release-of-vsewss-1-3.aspx" mce_href="http://blogs.msdn.com/johnrdurant/archive/2009/01/12/sharepoint-developer-tools-announcing-public-ctp-release-of-vsewss-1-3.aspx"&gt;Monday&lt;/A&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9400012" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/johnrdurant/archive/tags/Microsoft+Office+System/default.aspx">Microsoft Office System</category><category domain="http://blogs.msdn.com/johnrdurant/archive/tags/VSTO/default.aspx">VSTO</category></item><item><title>Chad Z. Hower aka "Kudzu"VSTO Excel Solution for the Wii</title><link>http://blogs.msdn.com/johnrdurant/archive/2007/08/21/chad-z-hower-aka-kudzu-vsto-excel-solution-for-the-wii.aspx</link><pubDate>Tue, 21 Aug 2007 18:47:26 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:4495529</guid><dc:creator>johnrdurant</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/johnrdurant/comments/4495529.aspx</comments><wfw:commentRss>http://blogs.msdn.com/johnrdurant/commentrss.aspx?PostID=4495529</wfw:commentRss><description>&lt;p&gt;Chad Z. Hower, aka "Kudzu",  &lt;p&gt;&lt;font size="2"&gt;A Microsoft colleague has created a VSTO application that lets you analyze Wiimote motions for the Nintendo Wii: &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.kudzuworld.com/blogs/tech/20070819.aspx"&gt;&lt;font size="3"&gt;http://www.kudzuworld.com/blogs/tech/20070819.aspx&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Yeah, I know it's not for the XBox, but as Steve Ballmer said yesterday in a meeting with the Oracle CEO, customers want their products and software from different vendors to &lt;em&gt;work together!&lt;/em&gt;&lt;/p&gt; &lt;p&gt;Three cheers for Kudzu and his innovative VSTO solution!&lt;/p&gt; &lt;p&gt;&lt;span&gt;&lt;strong&gt;&lt;span&gt;&lt;img src="http://officezealot.com/john/guitar_small.gif"&gt;&lt;/span&gt;&amp;nbsp;Rock Thought for the Day:&lt;/strong&gt; Get the new &lt;strong&gt;White Stripes&lt;/strong&gt; album, "&lt;strong&gt;Icky Thump&lt;/strong&gt;". Part of what makes Jack &amp;amp; Meg's sound so distinctive is their ability to very deliberately&amp;nbsp;produce music that appears so whimsical. Like&amp;nbsp;all of their albums, I usually cannot listen to an entire LP from start to finish. My head needs a break after about five songs. Rock and roll can be loud, and it can be sometimes noisy. The White Stripes, as truly excellent as their songs are, trend toward noisy. But, what great noise!&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span&gt;&lt;strong&gt;Rock On&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=4495529" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/johnrdurant/archive/tags/Microsoft+Office+System/default.aspx">Microsoft Office System</category><category domain="http://blogs.msdn.com/johnrdurant/archive/tags/VSTO/default.aspx">VSTO</category></item><item><title>NET helpmsg</title><link>http://blogs.msdn.com/johnrdurant/archive/2007/06/14/net-helpmsg.aspx</link><pubDate>Fri, 15 Jun 2007 01:17:32 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:3298566</guid><dc:creator>johnrdurant</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/johnrdurant/comments/3298566.aspx</comments><wfw:commentRss>http://blogs.msdn.com/johnrdurant/commentrss.aspx?PostID=3298566</wfw:commentRss><description>&lt;p&gt;I am running Windows Vista (liking it more every day), and a Windows Update failed. I received this error message, and I did not know what it meant. Here's a little trick to use that will give you the error message description.&lt;/p&gt; &lt;p&gt;Let's say my error was 8007&lt;strong&gt;0652&lt;/strong&gt; (this was the actual error). I type this (I added bold&amp;nbsp;so you can see how it relates to the error):&lt;/p&gt; &lt;p&gt;C:\&amp;gt;set /a c = &lt;strong&gt;0x652&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Windows returns the following:&lt;/p&gt; &lt;p&gt;&lt;strong&gt;1618&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Then, I type this:&lt;/p&gt; &lt;p&gt;C:\&amp;gt;net helpmsg &lt;strong&gt;1618&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Windows returns this:&lt;/p&gt; &lt;p&gt;"Another installation is already in progress. Complete that installation before proceeding with this install."&lt;/p&gt; &lt;p&gt;Cool. The information is there, but not very easily found. What would be better is for Microsoft (us) to surface the information more readily in the UI! I can guarantee my father will never type these commands. Of course, he also would not care about nerding out and discovering the error description either! He's a genius under the hood of a car though. He's saved me tons of money and time over the years because of his immense knowledge of automobiles.&lt;/p&gt; &lt;p&gt;&lt;img height="13" src="http://blogs.msdn.com/blogfiles/johnrdurant/WindowsLiveWriter/NEThelpmsg_D708/y1pVouiIR4O4eUusMDg21ymksdxNmUnrfiyfttYXeTE07o19MItdquij90LO7AfSFgm%5B1%5D_thumb%5B1%5D.gif" width="43"&gt;&amp;nbsp;&lt;/a&gt;&lt;strong&gt;Rock Thought For the Day:&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Of course, I am still giddy about the &lt;strong&gt;Smashing Pumpkins'&lt;/strong&gt; new album, "Zeitgeist", and I'd blog about it every day if I could. But there are other bands with great music. I pulled out some older tunes today:&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Nick Drake&lt;/strong&gt;-- listen to River Man.&lt;/p&gt; &lt;p&gt;Also, anything by &lt;strong&gt;John Prine&lt;/strong&gt;. He's a master story teller.&lt;/p&gt; &lt;p&gt;Finally, I was doing some yoga yesterday to &lt;a href="http://www.fujiya-miyagi.co.uk/" target="_blank"&gt;Fujiya and Miyagi&lt;/a&gt;. Great stuff.&lt;/p&gt; &lt;p&gt;Also, check out &lt;strong&gt;Brand New&lt;/strong&gt; and &lt;strong&gt;aMute&lt;/strong&gt;.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=3298566" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/johnrdurant/archive/tags/Microsoft+Office+System/default.aspx">Microsoft Office System</category><category domain="http://blogs.msdn.com/johnrdurant/archive/tags/VSTO/default.aspx">VSTO</category></item></channel></rss>