<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>SmittyPro</title>
	<atom:link href="http://www.smittypro.com/Blog/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://www.smittypro.com/Blog</link>
	<description>Witticisms, Help, Tutorials and More</description>
	<lastBuildDate>Mon, 07 May 2012 20:10:59 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.2</generator>
		<item>
		<title>Excel VBA Training &amp; Certification</title>
		<link>http://www.smittypro.com/Blog/?p=439</link>
		<comments>http://www.smittypro.com/Blog/?p=439#comments</comments>
		<pubDate>Mon, 07 May 2012 19:50:09 +0000</pubDate>
		<dc:creator>"Smitty"</dc:creator>
				<category><![CDATA[Office Automation]]></category>
		<category><![CDATA[Tutorials]]></category>

		<guid isPermaLink="false">http://www.smittypro.com/Blog/?p=439</guid>
		<description><![CDATA[If you&#8217;ve followed any of our posts, then you&#8217;ll see that we&#8217;re huge proponents of using VBA (Visual Basic for Applications) as a means of automating everyday tasks in the Office environment. One of the most frequent forum comments/requests that we see is for how to learn VBA. Most of the advice that you&#8217;ll get [...]]]></description>
			<content:encoded><![CDATA[<div class="al2fb_like_button"><script src="http://connect.facebook.net/en_US/all.js#xfbml=1"></script><fb:like ref="AL2FB" layout="box_count" show_faces="true" width="450" action="like" colorscheme="light" href="http://www.smittypro.com/Blog/?p=439"></fb:like></div><div class="tweetthis" style="text-align:left;"><p> <a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/home/?status=Excel+VBA+Training+%26+Certification+http%3A%2F%2Fis.gd%2FZ5EGHL" title="Post to Twitter"><img class="nothumb" src="http://www.smittypro.com/Blog/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter-micro3.png" alt="Post to Twitter" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.facebook.com/share.php?u=http://www.smittypro.com/Blog/?p=439&amp;t=Excel+VBA+Training+%26+Certification" title="Post to Facebook"><img class="nothumb" src="http://www.smittypro.com/Blog/wp-content/plugins/tweet-this/icons/en/facebook/tt-facebook-micro3.png" alt="Post to Facebook" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.google.com/buzz/post?url=http://www.smittypro.com/Blog/?p=439&amp;imageurl=" title="Post to Google Buzz"><img class="nothumb" src="http://www.smittypro.com/Blog/wp-content/plugins/tweet-this/icons/en/gbuzz/tt-gbuzz-micro3.png" alt="Post to Google Buzz" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http://www.smittypro.com/Blog/?p=439&amp;title=Excel+VBA+Training+%26+Certification&amp;summary=If+you%27ve+followed+any+of+our+posts%2C+then+you%27ll+see+that+we%27re+huge+proponents+of+using+VBA+%28Visual+Basic+for+Applications%29+as+a+means+of+automati...&amp;source=SmittyPro" title="Post to LinkedIn"><img class="nothumb" src="http://www.smittypro.com/Blog/wp-content/plugins/tweet-this/icons/en/linkedin/tt-linkedin-micro3.png" alt="Post to LinkedIn" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://technorati.com/faves?add=http://www.smittypro.com/Blog/?p=439" title="Post to Technorati"><img class="nothumb" src="http://www.smittypro.com/Blog/wp-content/plugins/tweet-this/icons/en/technorati/tt-technorati-micro3.png" alt="Post to Technorati" /></a></p></div><p>If you&#8217;ve followed any of our posts, then you&#8217;ll see that we&#8217;re huge proponents of using VBA (Visual Basic for Applications) as a means of automating everyday tasks in the Office environment.</p>
<p>One of the most frequent forum comments/requests that we see is for how to learn VBA.  Most of the advice that you&#8217;ll get starts with your most valuable free tool, which is the macro recorder.  Then there are lots of online tutorials you&#8217;ll find via Bing/Google, and finally you can buy some books (John Walkenbach&#8217;s Power Programming with Excel VBA is the best).  But what if you want to step up your game and actually get certified in VBA?  </p>
<p>Well, look no further than <a href="http://www.vbaexpress.com/training/">http://www.vbaexpress.com/training/</a>.  The folks over there have done an amazing job of not only creating fantastic VBA courseware, but they offer the ability to be certified in VBA as well.</p>
<p>If you want to step up to your &#8220;A&#8221; game then you can use the following coupon codes to get a discount:</p>
<p><em><strong>SP10OFFTRAINING</strong></em> and <em><strong>SP5OFFCERTIFICATION</strong></em></p>
<p>A word of caution here though: I&#8217;ve had the pleasure of being a tech editor for some of the content and it&#8217;s not for the faint-of-heart.  This is serious stuff.  But you&#8217;ll without a doubt walk away being the best VBA user around.  And while we&#8217;re not tax professionals, we&#8217;ll bet good odds that it&#8217;s tax deductible.</p>
<div class="tweetthis" style="text-align:left;"><p> <a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/home/?status=Excel+VBA+Training+%26+Certification+http%3A%2F%2Fis.gd%2FZ5EGHL" title="Post to Twitter"><img class="nothumb" src="http://www.smittypro.com/Blog/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter-micro3.png" alt="Post to Twitter" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.facebook.com/share.php?u=http://www.smittypro.com/Blog/?p=439&amp;t=Excel+VBA+Training+%26+Certification" title="Post to Facebook"><img class="nothumb" src="http://www.smittypro.com/Blog/wp-content/plugins/tweet-this/icons/en/facebook/tt-facebook-micro3.png" alt="Post to Facebook" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.google.com/buzz/post?url=http://www.smittypro.com/Blog/?p=439&amp;imageurl=" title="Post to Google Buzz"><img class="nothumb" src="http://www.smittypro.com/Blog/wp-content/plugins/tweet-this/icons/en/gbuzz/tt-gbuzz-micro3.png" alt="Post to Google Buzz" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http://www.smittypro.com/Blog/?p=439&amp;title=Excel+VBA+Training+%26+Certification&amp;summary=If+you%27ve+followed+any+of+our+posts%2C+then+you%27ll+see+that+we%27re+huge+proponents+of+using+VBA+%28Visual+Basic+for+Applications%29+as+a+means+of+automati...&amp;source=SmittyPro" title="Post to LinkedIn"><img class="nothumb" src="http://www.smittypro.com/Blog/wp-content/plugins/tweet-this/icons/en/linkedin/tt-linkedin-micro3.png" alt="Post to LinkedIn" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://technorati.com/faves?add=http://www.smittypro.com/Blog/?p=439" title="Post to Technorati"><img class="nothumb" src="http://www.smittypro.com/Blog/wp-content/plugins/tweet-this/icons/en/technorati/tt-technorati-micro3.png" alt="Post to Technorati" /></a></p></div>]]></content:encoded>
			<wfw:commentRss>http://www.smittypro.com/Blog/?feed=rss2&#038;p=439</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>VB HTML Maker Update</title>
		<link>http://www.smittypro.com/Blog/?p=401</link>
		<comments>http://www.smittypro.com/Blog/?p=401#comments</comments>
		<pubDate>Wed, 25 Apr 2012 02:43:58 +0000</pubDate>
		<dc:creator>Zack</dc:creator>
				<category><![CDATA[Office Automation]]></category>
		<category><![CDATA[Office Online Articles]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://www.smittypro.com/Blog/?p=401</guid>
		<description><![CDATA[When I first starting really getting into VBA, it was pretty invaluable to me to be able to read over my code. And over and over and over my code again. And again. As well as others code. This really helped me learn the syntax and flow. An add-in which was great, which I can&#8217;t [...]]]></description>
			<content:encoded><![CDATA[<div class="al2fb_like_button"><script src="http://connect.facebook.net/en_US/all.js#xfbml=1"></script><fb:like ref="AL2FB" layout="box_count" show_faces="true" width="450" action="like" colorscheme="light" href="http://www.smittypro.com/Blog/?p=401"></fb:like></div><div class="tweetthis" style="text-align:left;"><p> <a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/home/?status=VB+HTML+Maker+Update+http%3A%2F%2Fis.gd%2FZ1wIIK" title="Post to Twitter"><img class="nothumb" src="http://www.smittypro.com/Blog/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter-micro3.png" alt="Post to Twitter" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.facebook.com/share.php?u=http://www.smittypro.com/Blog/?p=401&amp;t=VB+HTML+Maker+Update" title="Post to Facebook"><img class="nothumb" src="http://www.smittypro.com/Blog/wp-content/plugins/tweet-this/icons/en/facebook/tt-facebook-micro3.png" alt="Post to Facebook" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.google.com/buzz/post?url=http://www.smittypro.com/Blog/?p=401&amp;imageurl=" title="Post to Google Buzz"><img class="nothumb" src="http://www.smittypro.com/Blog/wp-content/plugins/tweet-this/icons/en/gbuzz/tt-gbuzz-micro3.png" alt="Post to Google Buzz" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http://www.smittypro.com/Blog/?p=401&amp;title=VB+HTML+Maker+Update&amp;summary=When+I+first+starting+really+getting+into+VBA%2C+it+was+pretty+invaluable+to+me+to+be+able+to+read+over+my+code.++And+over+and+over+and+over+my+code+...&amp;source=SmittyPro" title="Post to LinkedIn"><img class="nothumb" src="http://www.smittypro.com/Blog/wp-content/plugins/tweet-this/icons/en/linkedin/tt-linkedin-micro3.png" alt="Post to LinkedIn" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://technorati.com/faves?add=http://www.smittypro.com/Blog/?p=401" title="Post to Technorati"><img class="nothumb" src="http://www.smittypro.com/Blog/wp-content/plugins/tweet-this/icons/en/technorati/tt-technorati-micro3.png" alt="Post to Technorati" /></a></p></div><p>When I first starting really getting into VBA, it was pretty invaluable to me to be able to read over my code.  And over and over and over my code again.  And again.  As well as others code.  This really helped me learn the syntax and flow.  An add-in which was great, which I can&#8217;t remember the name of, allowed me to print out my VBA code as an HTML file, so I could view the code as it looked in the VBIDE.  This was great!  I could now review my code <em>and </em>keep it as a hard copy for backup!</p>
<p>In the meantime, I have done a lot of posting to forums of sorts.  One of the forums in particular is <a href="http://www.mrexcel.com/forum/index.php">Mr Excel.com</a>.  This board utilizes vBulletin software and is laid out very nicely.  There are a few add-ins to help you post things to make it present nicely when viewed.  Some of these add-ins were (a list of which can be found <a href="http://www.mrexcel.com/forum/showthread.php?t=126629">here</a>) Colo&#8217;s HTMLMaker, <a href="http://www.excel-jeanie-html.de/index.php?f=1">Excel Jeanie 4</a>, <a href="http://www.asap-utilities.com/">ASAP Utilities</a>, etc.  Among these was the VBHTMLMaker add-in, which let you post your VBA code to the forum and have it present as it did in the IDE.  Awesome!</p>
<p>So now to my point.  A few years ago I asked Juan Pablo González, original developer of the VBHTMLMaker add-in (amongst other collaborators) if I could amend his add-in.  What I wanted to do was add an option to save the HTML generated code into an HTML file.  Easy, portable, documented, and printable!  He graciously agreed and that&#8217;s where I sat until yesterday.  I made excuses that I didn&#8217;t have time, but more or less I didn&#8217;t make it a priority.  I finally had enough with my procrastination and I added the code yesterday, tested today, and am now uploading to share with the world.</p>
<p>There is also some minor modifications to keep it as the font you have set in your VBE options.  To get this value we need to read the registry, which retains the font name (among properties).  A portion of the code was graciously utilized from Dev Ashish and Terry Kreft.  This is used by the following code:</p>
<p><font face="Verdana"><SPAN style="color:#007F00">&#8216;&#160;&#160;&#160;&#160;Txt = IIf(HTML, &#8220;<font face="Courier">&#8220;, &#8220;[face=Courier New]&#8220;)</SPAN><br />&#160;&#160;&#160;&#160;Txt = IIf(HTML, &#8220;<font face=" &amp; sFontName &amp; ">&#8220;, &#8220;[face=Courier New]&#8220;)</FONT></p>
<p>If you do not want to use such code and want it in Courier New every time, uncomment the commented line and take out the other.  Unfortunately this only works for HTML and not BB code.  The new file is named VBHTMLMaker2007, but does not utilize the Ribbon in any way.  So if you have a need or desire to save your VBA as an HTML file for whatever reason, this file has the amended code as such.  Enjoy!</p>
<p><a href='http://www.smittypro.com/Blog/wp-content/uploads/2012/01/VBHTMLMaker2007.zip'>VBHTMLMaker2007</a></p>
<p>Regards,</p>
<p>Zack Barresse</p>
<div class="tweetthis" style="text-align:left;"><p> <a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/home/?status=VB+HTML+Maker+Update+http%3A%2F%2Fis.gd%2FZ1wIIK" title="Post to Twitter"><img class="nothumb" src="http://www.smittypro.com/Blog/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter-micro3.png" alt="Post to Twitter" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.facebook.com/share.php?u=http://www.smittypro.com/Blog/?p=401&amp;t=VB+HTML+Maker+Update" title="Post to Facebook"><img class="nothumb" src="http://www.smittypro.com/Blog/wp-content/plugins/tweet-this/icons/en/facebook/tt-facebook-micro3.png" alt="Post to Facebook" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.google.com/buzz/post?url=http://www.smittypro.com/Blog/?p=401&amp;imageurl=" title="Post to Google Buzz"><img class="nothumb" src="http://www.smittypro.com/Blog/wp-content/plugins/tweet-this/icons/en/gbuzz/tt-gbuzz-micro3.png" alt="Post to Google Buzz" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http://www.smittypro.com/Blog/?p=401&amp;title=VB+HTML+Maker+Update&amp;summary=When+I+first+starting+really+getting+into+VBA%2C+it+was+pretty+invaluable+to+me+to+be+able+to+read+over+my+code.++And+over+and+over+and+over+my+code+...&amp;source=SmittyPro" title="Post to LinkedIn"><img class="nothumb" src="http://www.smittypro.com/Blog/wp-content/plugins/tweet-this/icons/en/linkedin/tt-linkedin-micro3.png" alt="Post to LinkedIn" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://technorati.com/faves?add=http://www.smittypro.com/Blog/?p=401" title="Post to Technorati"><img class="nothumb" src="http://www.smittypro.com/Blog/wp-content/plugins/tweet-this/icons/en/technorati/tt-technorati-micro3.png" alt="Post to Technorati" /></a></p></div>]]></content:encoded>
			<wfw:commentRss>http://www.smittypro.com/Blog/?feed=rss2&#038;p=401</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Create a Table of Contents in Excel</title>
		<link>http://www.smittypro.com/Blog/?p=409</link>
		<comments>http://www.smittypro.com/Blog/?p=409#comments</comments>
		<pubDate>Mon, 30 Jan 2012 02:28:47 +0000</pubDate>
		<dc:creator>Zack</dc:creator>
				<category><![CDATA[Office Automation]]></category>
		<category><![CDATA[Office Online Articles]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Excel]]></category>
		<category><![CDATA[Table of Contents]]></category>
		<category><![CDATA[VBA]]></category>

		<guid isPermaLink="false">http://www.smittypro.com/Blog/?p=409</guid>
		<description><![CDATA[There has always been a need for a good Table of Contents in Excel. While Word features this natively with its built-in Styles, unfortunately, Excel lacks this functionality due to a host of reasons, which are quite valid. However, we can create a workaround by incorporating some VBA. The following code is an updated version [...]]]></description>
			<content:encoded><![CDATA[<div class="al2fb_like_button"><script src="http://connect.facebook.net/en_US/all.js#xfbml=1"></script><fb:like ref="AL2FB" layout="box_count" show_faces="true" width="450" action="like" colorscheme="light" href="http://www.smittypro.com/Blog/?p=409"></fb:like></div><div class="tweetthis" style="text-align:left;"><p> <a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/home/?status=Create+a+Table+of+Contents+in+Excel+http%3A%2F%2Fis.gd%2FgKI7A4" title="Post to Twitter"><img class="nothumb" src="http://www.smittypro.com/Blog/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter-micro3.png" alt="Post to Twitter" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.facebook.com/share.php?u=http://www.smittypro.com/Blog/?p=409&amp;t=Create+a+Table+of+Contents+in+Excel" title="Post to Facebook"><img class="nothumb" src="http://www.smittypro.com/Blog/wp-content/plugins/tweet-this/icons/en/facebook/tt-facebook-micro3.png" alt="Post to Facebook" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.google.com/buzz/post?url=http://www.smittypro.com/Blog/?p=409&amp;imageurl=" title="Post to Google Buzz"><img class="nothumb" src="http://www.smittypro.com/Blog/wp-content/plugins/tweet-this/icons/en/gbuzz/tt-gbuzz-micro3.png" alt="Post to Google Buzz" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http://www.smittypro.com/Blog/?p=409&amp;title=Create+a+Table+of+Contents+in+Excel&amp;summary=There+has+always+been+a+need+for+a+good+Table+of+Contents+in+Excel.++While+Word+features+this+natively+with+its+built-in+Styles%2C+unfortunately%2C+Exc...&amp;source=SmittyPro" title="Post to LinkedIn"><img class="nothumb" src="http://www.smittypro.com/Blog/wp-content/plugins/tweet-this/icons/en/linkedin/tt-linkedin-micro3.png" alt="Post to LinkedIn" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://technorati.com/faves?add=http://www.smittypro.com/Blog/?p=409" title="Post to Technorati"><img class="nothumb" src="http://www.smittypro.com/Blog/wp-content/plugins/tweet-this/icons/en/technorati/tt-technorati-micro3.png" alt="Post to Technorati" /></a></p></div><p>There has always been a need for a good Table of Contents in Excel.  While Word features this natively with its built-in Styles, unfortunately, Excel lacks this functionality due to a host of reasons, which are quite valid.  However, we can create a workaround by incorporating some VBA.</p>
<p>The following code is an updated version I created a few years ago.  It was simple and served my needs.  Over the years it&#8217;s needed work, but like a mechanic with his own vehicle, I never really put the time forth to do it, always pushing it to the back burner.  Not so anymore!  Today I updated the code and made it much more versatile and dynamic!  Plus I added comments, which are always helpful when looking back on it.</p>
<p>The code will now take any type of worksheet and create a hyperlink to it.  Previously, the problem was if the user had a Dialog, Macro or Chart sheet in a workbook, standard hyperlinks do not work, as you can only use a standard hyperlink to a worksheet (all of the above objects are in the Sheets collection, but not a Worksheet type).  In order to bypass this we can create a button on top of each unsupported object it which is linked to a procedure in a we have stored in a module.  You can change the variables at the top of the module to whatever you&#8217;d like, but it will work as-is if you copy/paste to a new module.  The code It will automatically change the name of the module to whatever you specify for the <em>sModuleName </em>variable.</p>
<p>Here is the code.  If you have any comments, please feel free to let me know!</p>
<p><code>'---------------------------------------------------------------------------------------<br />
' Module    : Mod_TOC_RPA<br />
' Author    : Zack Barresse<br />
' Updated   : 1/27/2012<br />
' Purpose   : This code module serves as a stand-alone module to create a Table of<br />
'             Contents of the active workbook.  The other sub routines are supportive<br />
'             of this functionality.  This will handle the following sheet types:<br />
'               Worksheets<br />
'               Chart sheets<br />
'               Dialog sheets<br />
'               Macro sheets<br />
'             For those sheets which are not Worksheet types, a shape is utilized.  This<br />
'             is done because you cannot hyperlink to these sheet types with the normal<br />
'             functionality.  So instead we add the sheet name to it with an old<br />
'             Excel4Macro and add an OnAction property for it to use a sub routine.  All<br />
'             other 'normal' worksheets will receive a hyperlink to that sheet, with a<br />
'             destination of cell A1.<br />
' References: Microsoft Visual Basic for Applications Extensibility 5.3<br />
'             You must set this reference for the code to compile without error.  To<br />
'             add this reference library, click Tools | References, find the correct<br />
'             reference, check the box next to it, then click Ok.  If you don't see it<br />
'             in the list, look for it in its normal location:<br />
'             C:\Program Files (x86)\Common Files\microsoft shared\VBA\VBA6\VBE6EXT.OLB<br />
'              or<br />
'             C:\Program Files\Common Files\microsoft shared\VBA\VBA6\VBE6EXT.OLB<br />
'             Change the 'sModuleName' to whatever you want the module to be named.<br />
'             With the above reference, you can change it to whatever you want.  If you<br />
'             name it to another module name that exists in the same project, the<br />
'             current module name will be retained.<br />
' Examples  : Some other examples of creating Table of Contents can be found here:<br />
'               http://dmcritchie.mvps.org/excel/buildtoc.htm<br />
'               http://www.vbaexpress.com/kb/getarticle.php?kb_id=120<br />
'               http://www.mrexcel.com/articles/table-of-contents-macro.php<br />
'               http://alturl.com/nrk83 **<br />
'               http://extremecpa.blogspot.com/2005/08/table-of-contents-in-excel-with-vba.html<br />
'               ** Like this code, will take any type of sheet (the others will fail),<br />
'                  but uses VBA to write to the Table of Contents sheet code module<br />
'                  for the functionality of hyperlinking.<br />
'---------------------------------------------------------------------------------------</p>
<p>Option Explicit</p>
<p>Private Const sModuleName       As String = "Module1"<br />
Private Const sDefaultProcName  As String = "CreateTOC"<br />
Private Const sSheetName        As String = "Table of Contents"<br />
Private Const DNL               As String = vbNewLine &amp; vbNewLine<br />
Private sModuleRename           As String<br />
Private sProcName               As String<br />
Private bModuleName             As Boolean</p>
<p>'/// ***************************************************************************************<br />
'/// MAIN ROUTINE<br />
'/// ***************************************************************************************</p>
<p>Sub CreateTOC()<br />
    '---------------------------------------------------------------------------------------<br />
    ' Procedure : CreateTOC<br />
    ' Author    : Zack Barresse<br />
    ' Updated   : 1/27/2012<br />
    ' Purpose   : Explicitly setting object references, cleaned up variables, added some<br />
    '             additional error handling, added the handling of Macro and Dialog sheets<br />
    '             as well, and generally cleaned up code.<br />
    'Thanks to  : Ken Puls<br />
    '             Simon Lloyd<br />
    '             Anne Troy<br />
    '---------------------------------------------------------------------------------------<br />
    Dim VBComp                  As VBIDE.VBComponent<br />
    Dim CodeMod                 As VBIDE.CodeModule<br />
    Dim LineNum                 As Long<br />
    Dim ProcKind                As VBIDE.vbext_ProcKind<br />
    Dim WB                      As Workbook<br />
    Dim WS                      As Worksheet<br />
    Dim cb                      As Shape<br />
    Dim iWriteToRow             As Long<br />
    Dim iLoop                   As Long<br />
    Dim iWsTotalCnt             As Long<br />
    Dim iWsCnt                  As Long<br />
    Dim iChartCnt               As Long<br />
    Dim iOtherCnt               As Long<br />
    Dim iLeft                   As Long<br />
    Dim iTop                    As Long<br />
    Dim iHeight                 As Long<br />
    Dim iWidth                  As Long<br />
    Dim iShade                  As Long<br />
    Dim sMsg                    As String<br />
    Dim sAddy                   As String<br />
    Dim shtName                 As String<br />
    Dim bTrigger                As Boolean</p>
<p>    '/// Used to get procedure name<br />
    bTrigger = True</p>
<p>    '/// Check if there is an activeworkbook or not (i.e. this code was dropped into a<br />
    '/// workbook which wasn't visible, or an add-in)<br />
    If ActiveWorkbook Is Nothing Then<br />
        MsgBox "You must have a workbook open first!", vbInformation, "No Open Book"<br />
        Exit Sub<br />
    End If</p>
<p>    '/// Set variables<br />
    iShade = 37<br />
    iWriteToRow = 3<br />
    iWsCnt = 0<br />
    Set WB = ActiveWorkbook</p>
<p>    '/// Turn off some application settings to make code more efficient and run faster<br />
    Call TOGGLEEVENTS(False)</p>
<p>    '/// Check if the TOC worksheet already exists in the workbook, and if so question user<br />
    If WSEXISTS(sSheetName, WB) = True Then<br />
        sMsg = "You already have a Table of Contents page. Would you like to overwrite it?"<br />
        If MsgBox(sMsg, vbYesNo + vbQuestion, "Replace TOC page?") = vbYes Then GoTo ExitEarly<br />
        WB.Worksheets(sSheetName).Delete<br />
    End If</p>
<p>    '/// Add a blank worksheet to the far left, rename it<br />
    Set WS = WB.Worksheets.Add(before:=WB.Sheets(1))<br />
    WS.Name = sSheetName</p>
<p>    '/// Ensure the code module is the proper name, as needed for the shape OnAction property<br />
    Call ChangeModuleName</p>
<p>    '/// Change format of TOC sheet<br />
    WS.Cells.Interior.ColorIndex = iShade<br />
    WS.Rows("4:" &amp; WS.Rows.Count).RowHeight = 16<br />
    WS.Range("A1").Font.Bold = False<br />
    WS.Range("A1").Font.Italic = True<br />
    WS.Range("A1").Font.Name = "Arial"<br />
    WS.Range("A1").Font.Size = "8"<br />
    WS.Range("A2").Value = "Table of Contents"<br />
    WS.Range("A2").Font.Bold = True<br />
    WS.Range("A2").Font.Name = "Arial"<br />
    WS.Range("A2").Font.Size = "24"<br />
    WS.Range("A4").Select</p>
<p>    '/// Add a shape which will act as an update for the TOC sheet<br />
    With WS.Range("C1")<br />
        Set cb = WS.Shapes.AddShape(msoShapeRoundedRectangle, .Left, .Top, .Width, .Height)<br />
    End With<br />
    sAddy = "R1C3"<br />
    cb.Select<br />
    Selection.ShapeRange.Fill.ForeColor.SchemeColor = 0<br />
    Selection.ShapeRange.TextFrame.VerticalAlignment = xlCenter<br />
    Selection.Font.Underline = xlUnderlineStyleSingle<br />
    Selection.Font.ColorIndex = 5<br />
    Selection.ShapeRange.Fill.Visible = msoFalse<br />
    Selection.ShapeRange.Line.Visible = msoFalse</p>
<p>    '/// Get the current routine name<br />
    '/// Kindly adapted from Chip Pearson, found at:<br />
    '/// http://www.cpearson.com/Excel/vbe.aspx<br />
    On Error GoTo ErrHandle<br />
    Set VBComp = ThisWorkbook.VBProject.VBComponents(sModuleName)<br />
    Set CodeMod = VBComp.CodeModule<br />
    LineNum = CodeMod.CountOfDeclarationLines + 1<br />
    sProcName = CodeMod.ProcOfLine(LineNum, ProcKind)<br />
    GoTo NoCodeModErr</p>
<p>ErrHandle:<br />
    '/// Code module was not found, use default<br />
    sProcName = sDefaultProcName</p>
<p>NoCodeModErr:<br />
    If sProcName = vbNullString Then sProcName = sDefaultProcName<br />
    Selection.OnAction = IIf(Len(sModuleRename) &gt; 0, sModuleRename, sModuleName) &amp; "." &amp; sProcName</p>
<p>    '/// Set heading text for TOC<br />
    WS.Range("C1").Value = "Update TOC"<br />
    WS.Range("C1").Interior.ColorIndex = iShade<br />
    WS.Range("C1").Font.Bold = True<br />
    WS.Range("C1").Font.Italic = True<br />
    WS.Range("C1").Font.Name = "Arial"<br />
    WS.Range("C1").Font.Size = "10"<br />
    WS.Range("C1").Font.Underline = xlUnderlineStyleSingle</p>
<p>    '/// Get a total of the sheets<br />
    '/// NB: We do not use "WB.Worksheets.Count" as that will only count 'worksheets', which<br />
    '/// does not include chart sheets<br />
    iWsTotalCnt = WB.Sheets.Count</p>
<p>    '/// Loop through all sheets, excluding the first (TOC) worksheet<br />
    For iLoop = 2 To iWsTotalCnt</p>
<p>        '/// Set the write row, increment by 1 every iteration<br />
        iWriteToRow = iWriteToRow + 1</p>
<p>        '/// Check if the sheet iteration is a chart sheet or not<br />
        If IsChart(WB.Sheets(iLoop).Name) Then</p>
<p>            '///////////////////////////<br />
            '/// Sheet is a chart sheet<br />
            '///////////////////////////</p>
<p>            '/// Get a total count of chart sheets, set variables<br />
            iChartCnt = iChartCnt + 1<br />
            shtName = WB.Charts(iChartCnt).Name<br />
            WS.Range("C" &amp; iWriteToRow).Value = shtName<br />
            WS.Range("C" &amp; iWriteToRow).Font.ColorIndex = iShade</p>
<p>            '/// Get dimensions of write cell to apply button to it<br />
            iLeft = WS.Range("C" &amp; iWriteToRow).Left<br />
            iTop = WS.Range("C" &amp; iWriteToRow).Top<br />
            iWidth = WS.Range("C" &amp; iWriteToRow).Width<br />
            iHeight = WS.Range("C" &amp; iWriteToRow).RowHeight<br />
            sAddy = "R" &amp; iWriteToRow &amp; "C3"</p>
<p>            '/// Add the shape to the correct cell, add text to it and assign macro "GotoChart"<br />
            Set cb = WS.Shapes.AddShape(msoShapeRoundedRectangle, iLeft, iTop, iWidth, iHeight)<br />
            cb.Select<br />
            ExecuteExcel4Macro "FORMULA(""=" &amp; sAddy &amp; """)"<br />
            Selection.ShapeRange.TextFrame.VerticalAlignment = xlCenter<br />
            Selection.ShapeRange.TextFrame.HorizontalAlignment = xlLeft<br />
            Selection.ShapeRange.Fill.ForeColor.SchemeColor = 0<br />
            Selection.Font.Underline = xlUnderlineStyleSingle<br />
            Selection.Font.ColorIndex = 5<br />
            Selection.ShapeRange.Fill.Visible = msoFalse<br />
            Selection.ShapeRange.Line.Visible = msoFalse<br />
            Selection.OnAction = IIf(Len(sModuleRename) &gt; 0, sModuleRename, sModuleName) &amp; ".GotoOther"</p>
<p>            '/// Write number to TOC index<br />
            WS.Range("B" &amp; iWriteToRow).Value = iLoop</p>
<p>        ElseIf IsWorksheet(WB.Sheets(iLoop).Name, WB) = True Then</p>
<p>            '/////////////////////////<br />
            '/// Sheet is a Worksheet<br />
            '/////////////////////////</p>
<p>            '/// Grab count<br />
            iWsCnt = iWsCnt + 1</p>
<p>            '/// Sheet is a regular worksheet<br />
            shtName = WB.Sheets(iLoop).Name<br />
            WS.Range("C" &amp; iWriteToRow).Hyperlinks.Add Anchor:=WS.Range("C" &amp; iWriteToRow), _<br />
                                                       Address:="#'" &amp; shtName &amp; "'!A1", _<br />
                                                       SubAddress:="#'" &amp; shtName &amp; "'!A1", _<br />
                                                       TextToDisplay:=shtName<br />
            WS.Range("C" &amp; iWriteToRow).HorizontalAlignment = xlLeft</p>
<p>            '/// Write number to TOC index<br />
            WS.Range("B" &amp; iWriteToRow).Value = iLoop</p>
<p>        Else</p>
<p>            '////////////////////////////////////<br />
            '/// Sheet is a dialog or macro sheet<br />
            '////////////////////////////////////</p>
<p>            '/// Grab count<br />
            '            iWsCnt = iWsCnt + 1</p>
<p>            '/// Get a total count of chart sheets, set variables<br />
            iOtherCnt = iOtherCnt + 1<br />
            shtName = WB.Sheets(iLoop).Name<br />
            WS.Range("C" &amp; iWriteToRow).Value = shtName<br />
            WS.Range("C" &amp; iWriteToRow).Font.ColorIndex = iShade</p>
<p>            '/// Get dimensions of write cell to apply button to it<br />
            iLeft = WS.Range("C" &amp; iWriteToRow).Left<br />
            iTop = WS.Range("C" &amp; iWriteToRow).Top<br />
            iWidth = WS.Range("C" &amp; iWriteToRow).Width<br />
            iHeight = WS.Range("C" &amp; iWriteToRow).RowHeight<br />
            sAddy = "R" &amp; iWriteToRow &amp; "C3"</p>
<p>            '/// Add the shape to the correct cell, add text to it and assign macro "GotoChart"<br />
            Set cb = WS.Shapes.AddShape(msoShapeRoundedRectangle, iLeft, iTop, iWidth, iHeight)<br />
            cb.Select<br />
            ExecuteExcel4Macro "FORMULA(""=" &amp; sAddy &amp; """)"<br />
            Selection.ShapeRange.TextFrame.VerticalAlignment = xlCenter<br />
            Selection.ShapeRange.TextFrame.HorizontalAlignment = xlLeft<br />
            Selection.ShapeRange.Fill.ForeColor.SchemeColor = 0<br />
            Selection.Font.Underline = xlUnderlineStyleSingle<br />
            Selection.Font.ColorIndex = 5<br />
            Selection.ShapeRange.Fill.Visible = msoFalse<br />
            Selection.ShapeRange.Line.Visible = msoFalse<br />
            Selection.OnAction = IIf(Len(sModuleRename) &gt; 0, sModuleRename, sModuleName) &amp; ".GotoOther"</p>
<p>            '/// Write number to TOC index<br />
            WS.Range("B" &amp; iWriteToRow).Value = iLoop</p>
<p>        End If</p>
<p>continueLoop:<br />
    Next iLoop</p>
<p>    '/// Set viewing options<br />
    Sheets(sSheetName).Range("C:C").EntireColumn.ColumnWidth = 30<br />
    Sheets(sSheetName).Range("A4").Activate</p>
<p>    '/// Add string to message prompt if there were any chart sheets added<br />
    If iChartCnt &gt; 0 Then<br />
        sMsg = DNL &amp; Space(13) &amp; iChartCnt &amp; " Chart sheets have been added"<br />
    End If</p>
<p>    '/// Add string to message prompt if there were any dialog or macro sheets added<br />
    If iOtherCnt &gt; 0 Then<br />
        sMsg = sMsg &amp; DNL &amp; Space(13) &amp; iOtherCnt<br />
        sMsg = sMsg &amp; " Other sheet" &amp; IIf(iOtherCnt &gt; 1, "s have", " has") &amp; " been added (i.e. Dialog &amp; Macro sheets)"<br />
    End If</p>
<p>    '/// Append string to message prompt for how many worksheets were added<br />
    sMsg = sMsg &amp; DNL &amp; Space(13) &amp; iWsCnt &amp; " Worksheets have been added"</p>
<p>    '/// If module name was changed, add that in the message prompt text<br />
    If bModuleName = True Then<br />
        MsgBox "Complete!" &amp; vbNewLine &amp; "The code module name was changed." &amp; sMsg, vbInformation, "Complete!"<br />
    Else<br />
        MsgBox "Complete!" &amp; sMsg, vbInformation, "Complete!"<br />
    End If</p>
<p>ExitEarly:<br />
    '/// Reset application settings back to default<br />
    Call TOGGLEEVENTS(True)</p>
<p>End Sub</p>
<p>'/// ***************************************************************************************<br />
'/// SUPPORTIVE FUNCTIONS<br />
'/// ***************************************************************************************</p>
<p>Public Sub TOGGLEEVENTS(blnState As Boolean)<br />
    '---------------------------------------------------------------------------------------<br />
    ' Procedure : TOGGLEEVENTS<br />
    ' Author    : Zack Barresse<br />
    ' Date      : 1/27/2012<br />
    ' Purpose   : Quickly toggle application Properties instead of calling them in each procedure<br />
    ' Variables : blnState - pass a true/false value indicated the property state desired<br />
    '---------------------------------------------------------------------------------------<br />
    If Not blnState Then Application.Calculation = xlCalculationManual<br />
    Application.DisplayAlerts = blnState<br />
    Application.EnableEvents = blnState<br />
    Application.ScreenUpdating = blnState<br />
    If blnState Then Application.CutCopyMode = False<br />
    If blnState Then Application.StatusBar = False<br />
    If blnState Then Application.Calculation = xlCalculationAutomatic<br />
End Sub</p>
<p>Public Function WSEXISTS(wksName As String, Optional WKB As Workbook) As Boolean<br />
    '---------------------------------------------------------------------------------------<br />
    ' Procedure : WSEXISTS<br />
    ' Author    : Zack Barresse<br />
    ' Date      : 1/27/2012<br />
    ' Purpose   : To test whether a worksheet exists in a workbook or not<br />
    ' Variables : wksName - pass a string name for a sheet to test for<br />
    '             WKB - optionally pass a workbook to test the sheet in, if not specified<br />
    '             the active workbook will be used<br />
    '---------------------------------------------------------------------------------------<br />
    If WKB Is Nothing Then<br />
        If ActiveWorkbook Is Nothing Then Exit Function<br />
        Set WKB = ActiveWorkbook<br />
    End If<br />
    On Error Resume Next<br />
    WSEXISTS = CBool(WKB.Sheets(wksName).Name &lt;&gt; "")<br />
    On Error GoTo 0<br />
End Function</p>
<p>Public Function IsWorksheet(shNameTemp As String, Optional WKB As Workbook) As Boolean<br />
    '---------------------------------------------------------------------------------------<br />
    ' Procedure : IsWorksheet<br />
    ' Author    : Zack Barresse<br />
    ' Date      : 1/27/2012<br />
    ' Purpose   : To discern whether or not a sheet in a given workbook is an actual<br />
    '             worksheet, as opposed to a macro, dialog or chart sheet.<br />
    ' Variables : shNameTemp - pass a string name for a sheet to test for<br />
    '             WKB - optionally pass a workbook to test the sheet in, if not specified<br />
    '             the active workbook will be used<br />
    '---------------------------------------------------------------------------------------<br />
    Dim wksTemp                 As Worksheet<br />
    If WKB Is Nothing Then<br />
        If ActiveWorkbook Is Nothing Then Exit Function<br />
        Set WKB = ActiveWorkbook<br />
    End If<br />
    On Error GoTo ErrFound<br />
    '/// Macro and Dialog sheets will throw an error in one of the next two lines<br />
    Set wksTemp = WKB.Sheets(shNameTemp)<br />
    If wksTemp.Name = wksTemp.CodeName Then<br />
        IsWorksheet = TypeName(WKB.Sheets(shNameTemp)) = "Worksheet"<br />
    End If<br />
ErrFound:<br />
    On Error GoTo 0<br />
End Function</p>
<p>Public Function IsChart(chtName As String) As Boolean<br />
    '---------------------------------------------------------------------------------------<br />
    ' Procedure : IsChart<br />
    ' Author    : Zack Barresse<br />
    ' Updated   : 1/27/2012<br />
    ' Purpose   : Check if the name passed is a Chart sheet or not<br />
    '---------------------------------------------------------------------------------------<br />
    On Error Resume Next<br />
    IsChart = CBool(ActiveWorkbook.Charts(chtName).Name &lt;&gt; "")<br />
    On Error GoTo 0<br />
End Function</p>
<p>Private Sub GotoOther()<br />
    '---------------------------------------------------------------------------------------<br />
    ' Procedure : GotoOther<br />
    ' Author    : Zack Barresse<br />
    ' Date      : 1/27/2012<br />
    ' Purpose   : Attached to a shape to allow for hyperlinking to other sheets<br />
    '---------------------------------------------------------------------------------------<br />
    Dim obj                     As Shape<br />
    Dim objName                 As String<br />
    On Error Resume Next<br />
    Set obj = ActiveSheet.Shapes(Application.Caller)<br />
    objName = obj.TopLeftCell.Value<br />
    ActiveWorkbook.Sheets(objName).Activate<br />
    On Error GoTo 0<br />
End Sub</p>
<p>Sub ChangeModuleName()<br />
    '---------------------------------------------------------------------------------------<br />
    ' Procedure : ChangeModuleName<br />
    ' Author    : Simon Lloyd<br />
    ' Date      : 4/20/2011<br />
    ' Purpose   : Check if a code module name already exists, if not, create it<br />
    '---------------------------------------------------------------------------------------<br />
    Dim vbModule                As VBIDE.VBComponent<br />
    bModuleName = False<br />
    If VBComponentExists(sModuleName, ThisWorkbook.VBProject) = False Then<br />
        Call fxModuleNameChange(sModuleName, ThisWorkbook)<br />
        bModuleName = True<br />
    End If<br />
End Sub</p>
<p>Public Sub fxModuleNameChange(newMacro As String, Optional WB As Workbook)<br />
    '---------------------------------------------------------------------------------------<br />
    ' Procedure : fxModuleNameChange<br />
    ' Author    : Simon Lloyd<br />
    ' Date      : 4/20/2011<br />
    ' Purpose   : Change a module name<br />
    ' Variables : newMacro - pass a string name for a module name to change to<br />
    '           : WB - optionally pass a workbook to look in<br />
    '---------------------------------------------------------------------------------------<br />
    Dim VBC As VBIDE.VBComponent, modCode As String<br />
    If WB Is Nothing Then Set WB = ThisWorkbook<br />
    For Each VBC In WB.VBProject.VBComponents<br />
        If VBC.CodeModule.CountOfLines &gt; 0 Then<br />
            modCode = VBC.CodeModule.Lines(1, VBC.CodeModule.CountOfLines)<br />
            If InStr(1, modCode, newMacro, vbTextCompare) &gt; 0 Then<br />
                VBC.Name = sModuleName<br />
                Exit For<br />
            End If<br />
        End If<br />
    Next VBC<br />
End Sub</p>
<p>Public Function VBComponentExists(VBCompName As String, Optional VBProj As VBIDE.VBProject = Nothing) As Boolean<br />
    '---------------------------------------------------------------------------------------<br />
    ' Procedure : VBComponentExists<br />
    ' Author    : Simon Lloyd<br />
    ' Date      : 4/20/2011<br />
    ' Purpose   : Check to see if a code module already exists.  If it does, and if the name<br />
    '             is not equal to the current module name (which will result in shape<br />
    '             hyperlinks being broken) then set the sModuleRename variable to the<br />
    '             current module name<br />
    ' Variables : VBCompName - pass a string name to check if it exists<br />
    '           : VBProj - otionally pass a specific project (workbook) to look in<br />
    '---------------------------------------------------------------------------------------<br />
    Dim VBP                     As VBIDE.VBProject<br />
    If VBProj Is Nothing Then<br />
        Set VBP = ActiveWorkbook.VBProject<br />
    Else<br />
        Set VBP = VBProj<br />
    End If<br />
    On Error Resume Next<br />
    sModuleRename = vbNullString<br />
    VBComponentExists = CBool(Len(VBP.VBComponents(VBCompName).Name))<br />
    If VBComponentExists And VBCompName &lt;&gt; VBP.VBE.ActiveCodePane.CodeModule Then<br />
        sModuleRename = VBP.VBE.ActiveCodePane.CodeModule<br />
    End If<br />
End Function</code></p>
<p>Copy, paste, run <em>CreateTOC</em>.  Done.  <img src='http://www.smittypro.com/Blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>NB: There is a link in the comments section of the code created from ShortURL.com, to which the full link is:<br />
<a href="http://www.experts-exchange.com/Software/Office_Productivity/Office_Suites/MS_Office/Excel/A_3515-Excel-VBA-to-create-a-Table-of-Contents-TOC-summary-sheet.html">http://www.experts-exchange.com/Software/Office_Productivity/Office_Suites/MS_Office/Excel/A_3515-Excel-VBA-to-create-a-Table-of-Contents-TOC-summary-sheet.html</a></p>
<p>This was code written by Dave Brett (brettdj) which is just as functional as this (unlike most other code out there to create a Table of Contents), but his differs from this functionally in that he used VBA to write code to the worksheet itself as an event, which is quite ingenious.</p>
<p>Many thanks to Simon Lloyd, Ken Puls, Anne Troy, Chip Pearson, for helping with pieces of code, testing, and inspiration.  <img src='http://www.smittypro.com/Blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<div class="tweetthis" style="text-align:left;"><p> <a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/home/?status=Create+a+Table+of+Contents+in+Excel+http%3A%2F%2Fis.gd%2FgKI7A4" title="Post to Twitter"><img class="nothumb" src="http://www.smittypro.com/Blog/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter-micro3.png" alt="Post to Twitter" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.facebook.com/share.php?u=http://www.smittypro.com/Blog/?p=409&amp;t=Create+a+Table+of+Contents+in+Excel" title="Post to Facebook"><img class="nothumb" src="http://www.smittypro.com/Blog/wp-content/plugins/tweet-this/icons/en/facebook/tt-facebook-micro3.png" alt="Post to Facebook" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.google.com/buzz/post?url=http://www.smittypro.com/Blog/?p=409&amp;imageurl=" title="Post to Google Buzz"><img class="nothumb" src="http://www.smittypro.com/Blog/wp-content/plugins/tweet-this/icons/en/gbuzz/tt-gbuzz-micro3.png" alt="Post to Google Buzz" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http://www.smittypro.com/Blog/?p=409&amp;title=Create+a+Table+of+Contents+in+Excel&amp;summary=There+has+always+been+a+need+for+a+good+Table+of+Contents+in+Excel.++While+Word+features+this+natively+with+its+built-in+Styles%2C+unfortunately%2C+Exc...&amp;source=SmittyPro" title="Post to LinkedIn"><img class="nothumb" src="http://www.smittypro.com/Blog/wp-content/plugins/tweet-this/icons/en/linkedin/tt-linkedin-micro3.png" alt="Post to LinkedIn" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://technorati.com/faves?add=http://www.smittypro.com/Blog/?p=409" title="Post to Technorati"><img class="nothumb" src="http://www.smittypro.com/Blog/wp-content/plugins/tweet-this/icons/en/technorati/tt-technorati-micro3.png" alt="Post to Technorati" /></a></p></div>]]></content:encoded>
			<wfw:commentRss>http://www.smittypro.com/Blog/?feed=rss2&#038;p=409</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Create Outlook email and appointments from Excel with VBA</title>
		<link>http://www.smittypro.com/Blog/?p=392</link>
		<comments>http://www.smittypro.com/Blog/?p=392#comments</comments>
		<pubDate>Sat, 07 Jan 2012 20:17:41 +0000</pubDate>
		<dc:creator>Zack</dc:creator>
				<category><![CDATA[Office Automation]]></category>
		<category><![CDATA[Office Online Articles]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Appointment]]></category>
		<category><![CDATA[Email]]></category>
		<category><![CDATA[Excel]]></category>
		<category><![CDATA[Outlook]]></category>
		<category><![CDATA[Table]]></category>
		<category><![CDATA[VBA]]></category>

		<guid isPermaLink="false">http://www.smittypro.com/Blog/?p=392</guid>
		<description><![CDATA[The power of Microsoft Office is quite undeniable. The premier application of the suite is Excel. The love/hate relationship we have all had with it endures. Often times you may find the need to utilize multiple Office applications from within one another. An extremely common request is to create emails and appointments in Outlook, all [...]]]></description>
			<content:encoded><![CDATA[<div class="al2fb_like_button"><script src="http://connect.facebook.net/en_US/all.js#xfbml=1"></script><fb:like ref="AL2FB" layout="box_count" show_faces="true" width="450" action="like" colorscheme="light" href="http://www.smittypro.com/Blog/?p=392"></fb:like></div><div class="tweetthis" style="text-align:left;"><p> <a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/home/?status=Create+Outlook+email+and+appointments+from+Excel+with+VBA+http%3A%2F%2Fis.gd%2Fgfb9An" title="Post to Twitter"><img class="nothumb" src="http://www.smittypro.com/Blog/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter-micro3.png" alt="Post to Twitter" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.facebook.com/share.php?u=http://www.smittypro.com/Blog/?p=392&amp;t=Create+Outlook+email+and+appointments+from+Excel+with+VBA" title="Post to Facebook"><img class="nothumb" src="http://www.smittypro.com/Blog/wp-content/plugins/tweet-this/icons/en/facebook/tt-facebook-micro3.png" alt="Post to Facebook" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.google.com/buzz/post?url=http://www.smittypro.com/Blog/?p=392&amp;imageurl=" title="Post to Google Buzz"><img class="nothumb" src="http://www.smittypro.com/Blog/wp-content/plugins/tweet-this/icons/en/gbuzz/tt-gbuzz-micro3.png" alt="Post to Google Buzz" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http://www.smittypro.com/Blog/?p=392&amp;title=Create+Outlook+email+and+appointments+from+Excel+with+VBA&amp;summary=The+power+of+Microsoft+Office+is+quite+undeniable.++The+premier+application+of+the+suite+is+Excel.++The+love%2Fhate+relationship+we+have+all+had+with...&amp;source=SmittyPro" title="Post to LinkedIn"><img class="nothumb" src="http://www.smittypro.com/Blog/wp-content/plugins/tweet-this/icons/en/linkedin/tt-linkedin-micro3.png" alt="Post to LinkedIn" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://technorati.com/faves?add=http://www.smittypro.com/Blog/?p=392" title="Post to Technorati"><img class="nothumb" src="http://www.smittypro.com/Blog/wp-content/plugins/tweet-this/icons/en/technorati/tt-technorati-micro3.png" alt="Post to Technorati" /></a></p></div><p>The power of Microsoft Office is quite undeniable.  The premier application of the suite is Excel.  The love/hate relationship we have all had with it endures.  Often times you may find the need to utilize multiple Office applications from within one another.  An extremely common request is to create emails and appointments in Outlook, all from within the confines of Excel.  Thanks to VBA this is all possible, and can be done quite easily.</p>
<p>In this code sample I have created an Excel workbook.  I created a Table (i.e. Insert tab, clicked Table) which housed three columns.  Column A housed names, deftly titled &#8220;Name&#8221;, column B housed email addresses, again so cryptically titled &#8220;Email Addresses&#8221;, and column C housed a date column titled &#8220;Email Sent&#8221;.  I prefer the Short Date format, but any will suffice.  Here is a screenshot of the created Table.</p>
<div id="attachment_395" class="wp-caption aligncenter" style="width: 514px"><a href="http://www.smittypro.com/Blog/wp-content/uploads/2012/01/tblEmails.jpg"><img src="http://www.smittypro.com/Blog/wp-content/uploads/2012/01/tblEmails.jpg" alt="Image of example Table" width="504" height="95" class="size-full wp-image-395" /></a><p class="wp-caption-text">Example Table used</p></div>
<p>Basically I wanted to keep this table as a reminder of who I emailed on a certain subject and when that email was dispatched.  I also had a need to add this to my Outlook calendar for when I emailed this person, for record keeping purposes.  Rather than take the time to open Outlook, create a new email item, input all of my data, go to my calendar, create new appointment item, input all of my data, send and save respectively, I decided to take a somewhat faster approach and speed it up with VBA.  I like making my life easier, and if I can take 30-60 minutes to code this solution which will probably save me an accumulative 7-8 hours over the next month or so (10 minutes per day x 5 days a week x 52 weeks = 7.22 hrs per month), and I could do so at the click of a button, I&#8217;m all for it.</p>
<p>The below code is commented, so I won&#8217;t waste time making double comments here.  This will basically loop through the entire Table&#8217;s column C, check for any value in the cell (besides a blank null, i.e. =&#8221;" ), none being found it will create an email to that person with the address listed as well as put it to my default Outlook calendar.  There are some settings you can utilize to customize it in multiple fashions.  When it&#8217;s done with the current iteration it will put the current system date into column C.  I do this for two reasons: 1) so I know the date I created the email, and 2) next time I run this I don&#8217;t inundate that person with <em>another </em>email.</p>
<p>There are some other web references in the code to both help explain and show other options.  If you want to truly utilize the code to best fit your needs, take the time to <strong>read through the comments and check out some of the links provided</strong>.  They are links to some of the most frequently asked questions regarding the use of Outlook via Excel VBA.</p>
<p>I hope you enjoy the code!</p>
<p>In a module titled &#8220;modTest&#8221; (can be any name):</p>
<p><code>Option Explicit</p>
<p>Sub SentEmailToRecipients()<br />
'Table structure:<br />
'Table name: tblEmails<br />
'Column A - Name, expressed as full name<br />
'Column B - Email Address, expressed as a valid email address<br />
'Column C - Email Sent, expressed as a date</p>
<p>'Declare variables<br />
    Dim WS                          As Worksheet<br />
    Dim tblEmails                   As ListObject<br />
    Dim c                           As Range</p>
<p>    'Set variables<br />
    Set WS = ThisWorkbook.Sheets("Sheet1")<br />
    Set tblEmails = WS.ListObjects("tblEmails")</p>
<p>    '/// The following loop goes through the table column C<br />
    '/// Excellent information on coding to Tables can be found here:<br />
    '/// http://www.jkp-ads.com/Articles/Excel2007TablesVBA.asp?AllComments=True</p>
<p>    'Turn off some application properties to speed up code<br />
    Call TOGGLEEVENTS(False)</p>
<p>    'Loop through table column C, if no email sent, send one now, set reminder<br />
    For Each c In WS.Range("tblEmails[Email Sent]")</p>
<p>    'Check if an email was sent to this person<br />
        If Len(c.Value) = 0 Then</p>
<p>    'Create email<br />
    '/// We minus one from the current loop row in lieu of the Table header row<br />
            Call CreateEmail(tblEmails.DataBodyRange(c.Row - 1, 2), "SUBJECT", "BODY")<br />
            Call CreateAppointment(VBA.Date(), VBA.Date(), True, "Emailed " &amp; tblEmails.DataBodyRange(c.Row - 1, 1), _<br />
                                   "Created email for this person.", False)</p>
<p>    'Add the date to the Table<br />
            c.Value = VBA.Date()</p>
<p>        End If</p>
<p>    Next c</p>
<p>    'Turn application properties back to default state<br />
    Call TOGGLEEVENTS(True)</p>
<p>End Sub</code></p>
<p>In a module titled &#8220;modMisc&#8221;:</p>
<p><code>Option Explicit</p>
<p>Public Sub TOGGLEEVENTS(blnState As Boolean)<br />
'Originally written by Zack Barresse<br />
'/// Used to easily toggle on/off application properties to speed up coding<br />
    With Application<br />
        If Not blnState And Not ActiveWorkbook Is Nothing Then .Calculation = xlCalculationManual<br />
        .DisplayAlerts = blnState<br />
        .EnableEvents = blnState<br />
        .ScreenUpdating = blnState<br />
        If blnState Then .CutCopyMode = False<br />
        If blnState Then .StatusBar = False<br />
        If blnState And Not ActiveWorkbook Is Nothing Then .Calculation = xlCalculationAutomatic<br />
    End With<br />
End Sub</p>
<p>Public Function GetOL(Optional Plaebo As Variant) As Object<br />
'/// Used to set an Outlook object by late binding<br />
    On Error Resume Next<br />
    Set GetOL = GetObject(, "Outlook.Application")<br />
    If GetOL Is Nothing Then<br />
        Set GetOL = CreateObject("Outlook.Application")<br />
    End If<br />
    On Error GoTo 0<br />
End Function</p>
<p>Public Function GetNS(ByRef olApp As Object) As Object<br />
'/// Used to set an Outlook Namespace by late binding<br />
    Set GetNS = olApp.GetNamespace("MAPI")<br />
End Function</code></p>
<p>In a module titled &#8220;modEmail&#8221;:</p>
<p><code>Option Explicit</p>
<p>Public OL                           As Object<br />
Public NS                           As Object</p>
<p>Private olMail                      As Object<br />
Private olFolder                    As Object<br />
Private olAppt                      As Object<br />
Private olItem                      As Object</p>
<p>Sub CreateAppointment(ByVal dtStart As Date, _<br />
                      ByVal dtEnd As Date, _<br />
                      ByVal bAllDay As Boolean, _<br />
                      ByVal sSubject As String, _<br />
                      ByVal sBody As String, _<br />
                      Optional ByVal bReminder As Boolean, _<br />
                      Optional ByVal iReminderInMinutes As Long)</p>
<p>'Set Outlook variables<br />
    Set OL = GetOL()<br />
    Set NS = GetNS(OL)</p>
<p>    'Check if variables were able to be set<br />
    If NS Is Nothing Then<br />
    'no Outlook found<br />
        Exit Sub<br />
    End If</p>
<p>    'Set folder as default calendar constant<br />
    Set olFolder = NS.GetDefaultFolder(9)    'olFolderCalendar - default calendar</p>
<p>    'Create a new appointment item<br />
    Set olAppt = olFolder.Items.Add("IPM.Appointment")</p>
<p>    'Set start date (&amp; time)<br />
    olAppt.Start = dtStart</p>
<p>    'Set whether all day event or not<br />
    olAppt.AllDayEvent = bAllDay</p>
<p>    'If start date is same as end date, no time is given, AND an all day event, make the same<br />
    If bAllDay = True And Int(dtStart)  Int(dtEnd) Then<br />
        olAppt.End = dtEnd<br />
    End If</p>
<p>    'Set subject<br />
    olAppt.Subject = sSubject</p>
<p>    'Set body of item<br />
    olAppt.Body = sBody</p>
<p>    'Check if reminder added, if so set it<br />
    If bReminder = True Then</p>
<p>    'Set minutes of reminder<br />
        olAppt.ReminderMinutesBeforeStart = iReminderInMinutes</p>
<p>    End If</p>
<p>    'Set reminder status<br />
    olAppt.ReminderSet = bReminder</p>
<p>    'Save the item<br />
    olAppt.Save</p>
<p>    'Close the item and save (zero constant is for saving)<br />
    olAppt.Close 0        'olSave</p>
<p>    '/// Please note we are NOT closing Outlook when we're done</p>
<p>End Sub</p>
<p>Sub CreateEmail(ByVal sTo As String, _<br />
                ByVal sSubject As String, _<br />
                ByVal sBody As String, _<br />
                Optional ByVal sCC As String, _<br />
                Optional ByVal sBCC As String)</p>
<p>'Set Outlook variables<br />
    Set OL = GetOL()<br />
    Set NS = GetNS(OL)</p>
<p>    'Check if variables were able to be set<br />
    If NS Is Nothing Then<br />
    'no Outlook found<br />
        Exit Sub<br />
    End If</p>
<p>    'Create email item<br />
    Set olMail = OL.CreateItem(0)</p>
<p>    'Set email To field<br />
    olMail.To = sTo</p>
<p>    'If a CC was set, enter it<br />
    If Len(sCC) &gt; 0 Then olMail.Cc = sCC</p>
<p>    'If a BCC was set, enter it<br />
    If Len(sBCC) &gt; 0 Then olMail.Bcc = sBCC</p>
<p>    'Set subject<br />
    olMail.Subject = sSubject</p>
<p>    'Set body<br />
    olMail.Body = sBody</p>
<p>    'Display email<br />
    olMail.Display<br />
    '/// NOTE:<br />
    '/// It is quite possible to send an email (via command "olMail.Send") although by default this<br />
    '/// action is not performed immediately, rather there is a security message one will encounter<br />
    '/// due to this being a possible security breach, as VBA code should never be truly be<br />
    '/// considered 'secure'.  As such, there are multiple workarounds for this.<br />
    '///<br />
    '/// For more information check out these websites:<br />
    '/// http://www.rondebruin.nl/sendmail.htm<br />
    '/// http://forums.techguy.org/business-applications/925513-excel-send-emails-automatically-without.html<br />
    '/// http://www.excelguru.ca/content.php?174</p>
<p>    '/// Please note we are NOT closing Outlook when we're done</p>
<p>End Sub</code></p>
<p>The only routine which needs to be run is <strong>SentEmailToRecipients</strong>.  In it you will see the two <em>Call </em>lines where the information needs to be set.  This was created in Excel 2010, but can be run in 2007 as well.  It is set in this example, customize to your hearts content.</p>
<p>Regards,<br />
Zack Barresse</p>
<div class="tweetthis" style="text-align:left;"><p> <a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/home/?status=Create+Outlook+email+and+appointments+from+Excel+with+VBA+http%3A%2F%2Fis.gd%2Fgfb9An" title="Post to Twitter"><img class="nothumb" src="http://www.smittypro.com/Blog/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter-micro3.png" alt="Post to Twitter" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.facebook.com/share.php?u=http://www.smittypro.com/Blog/?p=392&amp;t=Create+Outlook+email+and+appointments+from+Excel+with+VBA" title="Post to Facebook"><img class="nothumb" src="http://www.smittypro.com/Blog/wp-content/plugins/tweet-this/icons/en/facebook/tt-facebook-micro3.png" alt="Post to Facebook" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.google.com/buzz/post?url=http://www.smittypro.com/Blog/?p=392&amp;imageurl=" title="Post to Google Buzz"><img class="nothumb" src="http://www.smittypro.com/Blog/wp-content/plugins/tweet-this/icons/en/gbuzz/tt-gbuzz-micro3.png" alt="Post to Google Buzz" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http://www.smittypro.com/Blog/?p=392&amp;title=Create+Outlook+email+and+appointments+from+Excel+with+VBA&amp;summary=The+power+of+Microsoft+Office+is+quite+undeniable.++The+premier+application+of+the+suite+is+Excel.++The+love%2Fhate+relationship+we+have+all+had+with...&amp;source=SmittyPro" title="Post to LinkedIn"><img class="nothumb" src="http://www.smittypro.com/Blog/wp-content/plugins/tweet-this/icons/en/linkedin/tt-linkedin-micro3.png" alt="Post to LinkedIn" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://technorati.com/faves?add=http://www.smittypro.com/Blog/?p=392" title="Post to Technorati"><img class="nothumb" src="http://www.smittypro.com/Blog/wp-content/plugins/tweet-this/icons/en/technorati/tt-technorati-micro3.png" alt="Post to Technorati" /></a></p></div>]]></content:encoded>
			<wfw:commentRss>http://www.smittypro.com/Blog/?feed=rss2&#038;p=392</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>ARCHOS 7 Home Tablet (is a piece of sh*t)</title>
		<link>http://www.smittypro.com/Blog/?p=383</link>
		<comments>http://www.smittypro.com/Blog/?p=383#comments</comments>
		<pubDate>Sun, 28 Aug 2011 02:35:20 +0000</pubDate>
		<dc:creator>"Smitty"</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.smittypro.com/Blog/?p=383</guid>
		<description><![CDATA[I might be something of a old-school guy, but I would much rather read a real book than something electronic. I finally wore out and decided to get a tablet to be able to read books on the plane and in the hotel while I travel, which I now do quite a bit. I was [...]]]></description>
			<content:encoded><![CDATA[<div class="al2fb_like_button"><script src="http://connect.facebook.net/en_US/all.js#xfbml=1"></script><fb:like ref="AL2FB" layout="box_count" show_faces="true" width="450" action="like" colorscheme="light" href="http://www.smittypro.com/Blog/?p=383"></fb:like></div><div class="tweetthis" style="text-align:left;"><p> <a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/home/?status=ARCHOS+7+Home+Tablet+%28is+a+piece+of+sh%2At%29+http%3A%2F%2Fis.gd%2FMPTODR" title="Post to Twitter"><img class="nothumb" src="http://www.smittypro.com/Blog/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter-micro3.png" alt="Post to Twitter" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.facebook.com/share.php?u=http://www.smittypro.com/Blog/?p=383&amp;t=ARCHOS+7+Home+Tablet+%28is+a+piece+of+sh%2At%29" title="Post to Facebook"><img class="nothumb" src="http://www.smittypro.com/Blog/wp-content/plugins/tweet-this/icons/en/facebook/tt-facebook-micro3.png" alt="Post to Facebook" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.google.com/buzz/post?url=http://www.smittypro.com/Blog/?p=383&amp;imageurl=" title="Post to Google Buzz"><img class="nothumb" src="http://www.smittypro.com/Blog/wp-content/plugins/tweet-this/icons/en/gbuzz/tt-gbuzz-micro3.png" alt="Post to Google Buzz" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http://www.smittypro.com/Blog/?p=383&amp;title=ARCHOS+7+Home+Tablet+%28is+a+piece+of+sh%2At%29&amp;summary=I+might+be+something+of+a+old-school+guy%2C+but+I+would+much+rather+read+a+real+book+than+something+electronic.++I+finally+wore+out+and+decided+to+ge...&amp;source=SmittyPro" title="Post to LinkedIn"><img class="nothumb" src="http://www.smittypro.com/Blog/wp-content/plugins/tweet-this/icons/en/linkedin/tt-linkedin-micro3.png" alt="Post to LinkedIn" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://technorati.com/faves?add=http://www.smittypro.com/Blog/?p=383" title="Post to Technorati"><img class="nothumb" src="http://www.smittypro.com/Blog/wp-content/plugins/tweet-this/icons/en/technorati/tt-technorati-micro3.png" alt="Post to Technorati" /></a></p></div><p>I might be something of a old-school guy, but I would much rather read a real book than something electronic.  I finally wore out and decided to get a tablet to be able to read books on the plane and in the hotel while I travel, which I now do quite a bit.  I was getting tired of lugging around 700+ page books, so I bought the ARCHOS 7 Home tablet (I won&#8217;t tell you where I got it, because I actually like them).</p>
<p>My immediate thoughts &#038; recommendations: the ARCHOS 7 Home Tablet is an absolute piece of SHIT (my site, so I can say it).  </p>
<p>The firmware needs upgrading as soon as you get it, but you won&#8217;t find that out until you actually hound their &#8220;support&#8221; department via e-mail (I must note that Tony, my support rep, was fantastic at helping with a PIECE OF SHIT that was built in China and came with instructions that might as well been in Cantonese for all the use they did &#8211; DO I really need to know not to plug the my finger into a 220V Outlet?).  Tony was incredibly helpful, but even with his help the ARCHOS 7 won&#8217;t do a damn thing after that; seriously, if you&#8217;re going to have something built in another country (China), and sell it in a country that at least expects a functioning product (other than county of origin) then at least shouldn&#8217;t you have the damn decency do make the thing work?  How&#8217;s the product testing working over there?  My 7 year old daughter figured out that this thing was a POS almost as soon as I got it out of the box.</p>
<p>After upgrading the &#8220;firmware&#8221;, which frankly a good dose of Viagra wouldn&#8217;t fix, it still doesn&#8217;t work.  But you need to upgrade the limpware to get the pre-installed Android &#8220;AppLib&#8221; to work (don&#8217;t forget that you need to uninstall it, somehow <strong>find it</strong>, and then reinstall it, and even then if you do find anything it won&#8217;t work, so it&#8217;s, shall I say, useless?).  I can understand not being able to find my favorite non-physical game (cribbage), but the complete lack of searchability is frustrating.  If the word &#8220;searchability&#8221; bothers anyone, then try it on the ARCHOS 7 and you&#8217;ll see what I mean.</p>
<p>Oh, and the ARCHOS &#8220;Android Marketplace&#8221;? The offerings through Archos are useless as well, and if you try to get creative and find something you like you&#8217;ll find that unless you&#8217;re lucky it won&#8217;t load at all.  I suppose the Czechoklooifadkian newsreader might be interesting to me if I start taking some classes, but really?</p>
<p>As for the Alkido Reader, that was wonderful, as it actually came with two very good books.  I love Sun Tzu&#8217;s &#8220;Art of War&#8221; and that is probably the only redeeming factor behind this ARCHAWFUL thing.  Except that it can&#8217;t find anything else.  If I hook the thing up to my PC I can drop my e-books on it (but only on the SD card I had to buy), see them on my PC, but the ARCHOS doesn&#8217;t seem to see them.  When I told my wife that my tablet said it&#8217;s memory was &#8220;unmounted&#8221; she wanted to know what I&#8217;d been up to&#8230;Really.  All I wanted to do was read a book on a plane, not have my daughter download Super Mario for $0.99 (which I am happy to tell you doesn&#8217;t work&#8230;)  And so the ARCHOS 7 POS is now hers and I will not be taking it on my next trip.</p>
<p>If this thing was defective I might not have a problem with it, but IT&#8217;S NOT. It&#8217;s just a POS. Pay the extra bucks for something that actually works. I&#8217;ve wasted more time on trying to get this thing to work than it&#8217;s been worth. The only good thing on it is the Skeet game, becase that&#8217;s what&#8217;s going to happen to it next, and that will be the most enjoyment I&#8217;ve gotten out of it so far. For the frustration involved in this thing I&#8217;ve had been better off getting an iPad. Pricey or not, at least they work. All for a business trip so I didn&#8217;t have to lug around a few 700 page books, and I still end up lugging the books. So much for that, I&#8217;ll pay the $25 bucks to check my bags again&#8230;At least I get reimbursed for that expense. Do you think the IRS will care that I shot my &#8220;office supplies&#8221;?</p>
<p>For what it&#8217;s worth, Tony @ ARCHOS (albeit via e-mail and on only on Albanian time) was fantastic, and a great representative for his company.  The ARCHOS 7 Home Tablet, on the other hand is about as useful as the UN.</p>
<div class="tweetthis" style="text-align:left;"><p> <a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/home/?status=ARCHOS+7+Home+Tablet+%28is+a+piece+of+sh%2At%29+http%3A%2F%2Fis.gd%2FMPTODR" title="Post to Twitter"><img class="nothumb" src="http://www.smittypro.com/Blog/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter-micro3.png" alt="Post to Twitter" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.facebook.com/share.php?u=http://www.smittypro.com/Blog/?p=383&amp;t=ARCHOS+7+Home+Tablet+%28is+a+piece+of+sh%2At%29" title="Post to Facebook"><img class="nothumb" src="http://www.smittypro.com/Blog/wp-content/plugins/tweet-this/icons/en/facebook/tt-facebook-micro3.png" alt="Post to Facebook" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.google.com/buzz/post?url=http://www.smittypro.com/Blog/?p=383&amp;imageurl=" title="Post to Google Buzz"><img class="nothumb" src="http://www.smittypro.com/Blog/wp-content/plugins/tweet-this/icons/en/gbuzz/tt-gbuzz-micro3.png" alt="Post to Google Buzz" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http://www.smittypro.com/Blog/?p=383&amp;title=ARCHOS+7+Home+Tablet+%28is+a+piece+of+sh%2At%29&amp;summary=I+might+be+something+of+a+old-school+guy%2C+but+I+would+much+rather+read+a+real+book+than+something+electronic.++I+finally+wore+out+and+decided+to+ge...&amp;source=SmittyPro" title="Post to LinkedIn"><img class="nothumb" src="http://www.smittypro.com/Blog/wp-content/plugins/tweet-this/icons/en/linkedin/tt-linkedin-micro3.png" alt="Post to LinkedIn" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://technorati.com/faves?add=http://www.smittypro.com/Blog/?p=383" title="Post to Technorati"><img class="nothumb" src="http://www.smittypro.com/Blog/wp-content/plugins/tweet-this/icons/en/technorati/tt-technorati-micro3.png" alt="Post to Technorati" /></a></p></div>]]></content:encoded>
			<wfw:commentRss>http://www.smittypro.com/Blog/?feed=rss2&#038;p=383</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Smitticisms</title>
		<link>http://www.smittypro.com/Blog/?p=381</link>
		<comments>http://www.smittypro.com/Blog/?p=381#comments</comments>
		<pubDate>Thu, 07 Jul 2011 01:21:33 +0000</pubDate>
		<dc:creator>"Smitty"</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.smittypro.com/Blog/?p=381</guid>
		<description><![CDATA[My wife was talking to her sister in Crested Butte, Colorado tonight and were discussing how to prepare roe from fresh caught Rainbow Trout. I made a choice comment and was rewarded with: &#8220;Smitty knows as much about Rainbow Trout as he does about&#8230;&#8221; as she pondered, I volunteered &#8220;Women&#8230;&#8221; And walked off. Score one [...]]]></description>
			<content:encoded><![CDATA[<div class="al2fb_like_button"><script src="http://connect.facebook.net/en_US/all.js#xfbml=1"></script><fb:like ref="AL2FB" layout="box_count" show_faces="true" width="450" action="like" colorscheme="light" href="http://www.smittypro.com/Blog/?p=381"></fb:like></div><div class="tweetthis" style="text-align:left;"><p> <a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/home/?status=Smitticisms+http%3A%2F%2Fis.gd%2FCzBJgP" title="Post to Twitter"><img class="nothumb" src="http://www.smittypro.com/Blog/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter-micro3.png" alt="Post to Twitter" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.facebook.com/share.php?u=http://www.smittypro.com/Blog/?p=381&amp;t=Smitticisms" title="Post to Facebook"><img class="nothumb" src="http://www.smittypro.com/Blog/wp-content/plugins/tweet-this/icons/en/facebook/tt-facebook-micro3.png" alt="Post to Facebook" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.google.com/buzz/post?url=http://www.smittypro.com/Blog/?p=381&amp;imageurl=" title="Post to Google Buzz"><img class="nothumb" src="http://www.smittypro.com/Blog/wp-content/plugins/tweet-this/icons/en/gbuzz/tt-gbuzz-micro3.png" alt="Post to Google Buzz" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http://www.smittypro.com/Blog/?p=381&amp;title=Smitticisms&amp;summary=My+wife+was+talking+to+her+sister+in+Crested+Butte%2C+Colorado+tonight+and+were+discussing+how+to+prepare+roe+from+fresh+caught+Rainbow+Trout.++I+mad...&amp;source=SmittyPro" title="Post to LinkedIn"><img class="nothumb" src="http://www.smittypro.com/Blog/wp-content/plugins/tweet-this/icons/en/linkedin/tt-linkedin-micro3.png" alt="Post to LinkedIn" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://technorati.com/faves?add=http://www.smittypro.com/Blog/?p=381" title="Post to Technorati"><img class="nothumb" src="http://www.smittypro.com/Blog/wp-content/plugins/tweet-this/icons/en/technorati/tt-technorati-micro3.png" alt="Post to Technorati" /></a></p></div><p>My wife was talking to her sister in Crested Butte, Colorado tonight and were discussing how to prepare roe from fresh caught Rainbow Trout.  I made a choice comment and was rewarded with:</p>
<p>&#8220;Smitty knows as much about Rainbow Trout as he does about&#8230;&#8221; as she pondered, I volunteered &#8220;Women&#8230;&#8221;</p>
<p>And walked off.  Score one for the good guys.</p>
<p>Smitty</p>
<div class="tweetthis" style="text-align:left;"><p> <a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/home/?status=Smitticisms+http%3A%2F%2Fis.gd%2FCzBJgP" title="Post to Twitter"><img class="nothumb" src="http://www.smittypro.com/Blog/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter-micro3.png" alt="Post to Twitter" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.facebook.com/share.php?u=http://www.smittypro.com/Blog/?p=381&amp;t=Smitticisms" title="Post to Facebook"><img class="nothumb" src="http://www.smittypro.com/Blog/wp-content/plugins/tweet-this/icons/en/facebook/tt-facebook-micro3.png" alt="Post to Facebook" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.google.com/buzz/post?url=http://www.smittypro.com/Blog/?p=381&amp;imageurl=" title="Post to Google Buzz"><img class="nothumb" src="http://www.smittypro.com/Blog/wp-content/plugins/tweet-this/icons/en/gbuzz/tt-gbuzz-micro3.png" alt="Post to Google Buzz" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http://www.smittypro.com/Blog/?p=381&amp;title=Smitticisms&amp;summary=My+wife+was+talking+to+her+sister+in+Crested+Butte%2C+Colorado+tonight+and+were+discussing+how+to+prepare+roe+from+fresh+caught+Rainbow+Trout.++I+mad...&amp;source=SmittyPro" title="Post to LinkedIn"><img class="nothumb" src="http://www.smittypro.com/Blog/wp-content/plugins/tweet-this/icons/en/linkedin/tt-linkedin-micro3.png" alt="Post to LinkedIn" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://technorati.com/faves?add=http://www.smittypro.com/Blog/?p=381" title="Post to Technorati"><img class="nothumb" src="http://www.smittypro.com/Blog/wp-content/plugins/tweet-this/icons/en/technorati/tt-technorati-micro3.png" alt="Post to Technorati" /></a></p></div>]]></content:encoded>
			<wfw:commentRss>http://www.smittypro.com/Blog/?feed=rss2&#038;p=381</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

