<?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>SkillZ Design &#187; vba</title>
	<atom:link href="http://skillzdesign.com/blog/tag/vba/feed/" rel="self" type="application/rss+xml" />
	<link>http://skillzdesign.com/blog</link>
	<description>Audio Visual Communication</description>
	<lastBuildDate>Fri, 02 Jul 2010 19:17:01 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Outlook: Save Selected Items to Folder with Datestamp</title>
		<link>http://skillzdesign.com/blog/2010/06/11/outlook-save-selected-items-to-folder-with-datestamp/</link>
		<comments>http://skillzdesign.com/blog/2010/06/11/outlook-save-selected-items-to-folder-with-datestamp/#comments</comments>
		<pubDate>Fri, 11 Jun 2010 17:58:16 +0000</pubDate>
		<dc:creator>Keith</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Scripting is Cool]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[vba]]></category>

		<guid isPermaLink="false">http://skillzdesign.com/blog/?p=409</guid>
		<description><![CDATA[I tend to organize projects in file folders, where I store all project-related information including e-mails. Assign this macro to a toolbar button in Outlook. Select one or more Inbox messages, run the macro, and select the destination folder. Messages will be named according to subject, with a date/timestamp appended. All non-alphanumeric characters are replaced ]]></description>
			<content:encoded><![CDATA[<p>I tend to organize projects in file folders, where I store all project-related information including e-mails. Assign this macro to a toolbar button in Outlook. Select one or more Inbox messages, run the macro, and select the destination folder. Messages will be named according to subject, with a date/timestamp appended. All non-alphanumeric characters are replaced with underscores. (Note: this is a necessary workaround for file naming restrictions within the Windows filesystem.)</p>
<p>Please note: This code utilizes the <strong>Microsoft VBScript Regular Expressions 5.5</strong> library (enable it using the Tools- References dialog in the VBA IDE).</p>
<p>Create a VBA module and name it <strong>winapi_folderbrowser</strong>. Paste the following code into the new module:</p>
<pre>""" BEGIN CODE
Private Const BIF_RETURNONLYFSDIRS As Long = &amp;H1
Private Const BIF_DONTGOBELOWDOMAIN As Long = &amp;H2
Private Const BIF_RETURNFSANCESTORS As Long = &amp;H8
Private Const BIF_BROWSEFORCOMPUTER As Long = &amp;H1000
Private Const BIF_BROWSEFORPRINTER As Long = &amp;H2000
Private Const BIF_BROWSEINCLUDEFILES As Long = &amp;H4000
Private Const MAX_PATH As Long = 260
Type BrowseInfo
hOwner As Long
pidlRoot As Long
pszDisplayName As String
lpszINSTRUCTIONS As String
ulFlags As Long
lpfn As Long
lParam As Long
iImage As Long
End Type
Type SHFILEOPSTRUCT
hwnd As Long
wFunc As Long
pFrom As String
pTo As String
fFlags As Integer
fAnyOperationsAborted As Boolean
hNameMappings As Long
lpszProgressTitle As String
End Type
Declare Function SHGetPathFromIDListA Lib "shell32.dll" ( _
ByVal pidl As Long, _
ByVal pszBuffer As String) As Long
Declare Function SHBrowseForFolderA Lib "shell32.dll" ( _
lpBrowseInfo As BrowseInfo) As Long
Function BrowseFolder(Optional Caption As String = "") As String
Dim BrowseInfo As BrowseInfo
Dim FolderName As String
Dim ID As Long
Dim Res As Long
With BrowseInfo
.hOwner = 0
.pidlRoot = 0
.pszDisplayName = String$(MAX_PATH, vbNullChar)
.lpszINSTRUCTIONS = Caption
.ulFlags = BIF_RETURNONLYFSDIRS
.lpfn = 0
End With
FolderName = String$(MAX_PATH, vbNullChar)

ID = SHBrowseForFolderA(BrowseInfo)

If ID Then
Res = SHGetPathFromIDListA(ID, FolderName)
If Res Then
BrowseFolder = Left$(FolderName, InStr(FolderName, vbNullChar) - 1)
End If
End If
End Function
''' END CODE</pre>
<p>Create a new VBA module and name it <strong>mymacros</strong>. Paste the following code into the new module:</p>
<pre>''' BEGIN CODE
Sub SaveMsgToFolderWithSubjectAndTimestamp()
Dim Item As MailItem
Dim strTargetFilename As String
Dim strTargetPath As String
Dim objRegExp As New RegExp
With objRegExp
.Global = True
.IgnoreCase = True
.Pattern = "[^\w+]"
End With
strTargetPath = BrowseFolder
Dim SelectedItems As Selection
Set SelectedItems = Outlook.ActiveExplorer.Selection
For Each Item In SelectedItems
strTargetFilename = objRegExp.Replace(Item.Subject, "_") + "_" + Format(Item.ReceivedTime, "yyyy_mm_dd_hhnnss")
Item.SaveAs strTargetPath + "\" + strTargetFilename + ".msg", olMSG
Next Item
End Sub
''' END CODE
</pre>
<p>Assign the macro SaveMsgToFolderWithSubjectAndTimestamp to a custom toolbar button and you&#8217;re all set.</p>
<h3>One step further: Save attachments!</h3>
<p>The code has been extended as follows: If message has attachments, a new folder is created, named according to the message subject, with &#8220;_ATTACHMENTS&#8221; appended, and all attachments are saved in the new folder.</p>
<pre>Sub SaveMsgToFolderWithSubjectTimestampAttachments()
 Dim Item As MailItem
 Dim strTargetFilename As String
 Dim strTargetPath As String
 Dim Atmt As Attachment
 Dim strTargetAttachmentsFolderPath As String

 Dim objRegExp As New RegExp
 With objRegExp
 .Global = True
 .IgnoreCase = True
 .Pattern = "[^\w+]"
 End With

 strTargetPath = BrowseFolder

 Dim SelectedItems As Selection
 Set SelectedItems = Outlook.ActiveExplorer.Selection
 For Each Item In SelectedItems
 strTargetFilename = objRegExp.Replace(Item.Subject, "_") + "_" + Format(Now(), "yyyy_mm_dd_hhnnss")
 Item.SaveAs strTargetPath + "\" + strTargetFilename + ".msg", olMSG
 If Item.Attachments.Count &gt; 0 Then
 ' Create new folder
 strTargetAttachmentsFolderPath = strTargetPath + "\" + strTargetFilename + "_ATTACHMENTS"
 MkDir strTargetAttachmentsFolderPath
 ' Save Attachments
 For Each Atmt In Item.Attachments
 Atmt.SaveAsFile strTargetAttachmentsFolderPath + "\" + Atmt.DisplayName
 Next Atmt
 End If
 Next Item
End Sub</pre>
]]></content:encoded>
			<wfw:commentRss>http://skillzdesign.com/blog/2010/06/11/outlook-save-selected-items-to-folder-with-datestamp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>View or Change Path to Linked Media on a PowerPoint Slide with VBA</title>
		<link>http://skillzdesign.com/blog/2008/05/20/view-or-change-path-to-linked-media-on-a-powerpoint-slide-with-vba/</link>
		<comments>http://skillzdesign.com/blog/2008/05/20/view-or-change-path-to-linked-media-on-a-powerpoint-slide-with-vba/#comments</comments>
		<pubDate>Tue, 20 May 2008 16:35:43 +0000</pubDate>
		<dc:creator>Keith</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Scripting is Cool]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[vba]]></category>

		<guid isPermaLink="false">http://skillzdesign.com/blog/?p=185</guid>
		<description><![CDATA[Open VBA editor (Alt-F11). In the immediate window, type the following code, replacing &#8216;x&#8217; with the appropriate Slide and Shape indices: ? Application _ .ActivePresentation _ .Slides(x) _ .Shapes(x) _ .LinkFormat _ .SourceFullName This will output the full path information to the linked media file. To change the path, such as in the case of ]]></description>
			<content:encoded><![CDATA[<p><!--adsense#verticalbannerright-->Open VBA editor (Alt-F11). In the immediate window, type the following code, replacing &#8216;x&#8217; with the appropriate Slide and Shape indices:</p>
<p><code>? Application _<br />
.ActivePresentation _<br />
.Slides(x) _<br />
.Shapes(x) _<br />
</code><code>.LinkFormat _<br />
.SourceFullName</code></code></p>
<p>This will output the full path information to the linked media file. To change the path, such as in the case of removing full path information and leaving just the filename, use the following syntax:</p>
<p><code>Application _<br />
.ActivePresentation _<br />
.Slides(x) _<br />
.Shapes(x) _<br />
.LinkFormat _<br />
.SourceFullName = "mediafile.mpg"</code></p>
]]></content:encoded>
			<wfw:commentRss>http://skillzdesign.com/blog/2008/05/20/view-or-change-path-to-linked-media-on-a-powerpoint-slide-with-vba/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Flag Selected Microsoft Outlook Inbox Items for Follow Up</title>
		<link>http://skillzdesign.com/blog/2008/01/02/flag-microsoft-outlook-inbox-items-for-follow-up-script/</link>
		<comments>http://skillzdesign.com/blog/2008/01/02/flag-microsoft-outlook-inbox-items-for-follow-up-script/#comments</comments>
		<pubDate>Wed, 02 Jan 2008 20:35:21 +0000</pubDate>
		<dc:creator>Keith</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Scripting is Cool]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[vba]]></category>

		<guid isPermaLink="false">http://skillzdesign.com/blog/2008/01/02/flag-microsoft-outlook-inbox-items-for-follow-up-script/</guid>
		<description><![CDATA[To avoid losing action items as my e-mail flows in, I make extensive use of the &#8220;Flag for Follow Up&#8221; feature in Outlook. Having grown tired from clicking around the dialog box with the calendar that pops up next to the &#8220;Due By&#8221; field, I created the following VBA macro: Sub FlagForXMinutes(intMinutes As Integer, strFlagRequest ]]></description>
			<content:encoded><![CDATA[<p>To avoid losing action items as my e-mail flows in, I make extensive use of the &#8220;Flag for Follow Up&#8221; feature in Outlook. Having grown tired from clicking around the dialog box with the calendar that pops up next to the &#8220;Due By&#8221; field, I created the following VBA macro:<br />
<!--adsense#verticalbannerright--></p>
<p><code>Sub FlagForXMinutes(intMinutes As Integer, strFlagRequest As String)<br />
Dim Item As Object<br />
Dim SelectedItems As Selection<br />
Set SelectedItems = Outlook.ActiveExplorer.Selection<br />
For Each Item In SelectedItems<br />
With Item<br />
.FlagStatus = 2<br />
.FlagDueBy = CStr(CDate(Format(CDbl(Now) + intMinutes / 1440)))<br />
.FlagRequest = strFlagRequest<br />
.Save<br />
End With<br />
Next Item<br />
End Sub</code></p>
<p>I&#8217;ve assigned a couple of buttons on my Outlook toolbar with the following macros attached:</p>
<p><code>Sub FlagForFollowUp15Minutes()<br />
FlagForXMinutes 15, "Follow Up"<br />
End Sub<br />
</code><br />
<code>Sub FlagForFollowUp30Minutes()<br />
FlagForXMinutes 30, "Follow Up"<br />
End Sub</code></p>
<p>I have not played around with too many variations, but this works with items contained within Public Folders as well as Meeting Requests and Responses, thanks to the &#8220;Dim Item As Object&#8221; declaration which provides some added flexibility.</p>
]]></content:encoded>
			<wfw:commentRss>http://skillzdesign.com/blog/2008/01/02/flag-microsoft-outlook-inbox-items-for-follow-up-script/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Scripting is Cool: Microsoft Access VBA Tips</title>
		<link>http://skillzdesign.com/blog/2007/12/31/scripting-is-cool-microsoft-access-vba-tips/</link>
		<comments>http://skillzdesign.com/blog/2007/12/31/scripting-is-cool-microsoft-access-vba-tips/#comments</comments>
		<pubDate>Mon, 31 Dec 2007 17:31:57 +0000</pubDate>
		<dc:creator>Keith</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Scripting is Cool]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[vba]]></category>

		<guid isPermaLink="false">http://skillzdesign.com/blog/2007/12/31/scripting-is-cool-microsoft-access-vba-tips/</guid>
		<description><![CDATA[Here are a couple of not-so-very-well documented tips for MS Access 2000. I haven&#8217;t tested them on any other versions of Access, though I suspect most of them should work on later versions. These tips require the use of the Microsoft Visual Basic Integrated Development Environment (IDE), which can be accessed by Alt-F11. Use the ]]></description>
			<content:encoded><![CDATA[<p>Here are a couple of not-so-very-well documented tips for MS Access 2000. I haven&#8217;t tested them on any other versions of Access, though I suspect most of them should work on later versions.</p>
<p>These tips require the use of the Microsoft Visual Basic Integrated Development Environment (IDE), which can be accessed by Alt-F11.</p>
<p><!--adsense#verticalbannerright--></p>
<h3>Use the Immediate Window</h3>
<p>The Immediate Window can be accessed via Ctrl-G (or View &#8211; Immediate Window). It is an invaluable asset when debugging or testing. I&#8217;m not a programmer. I like to say I know just enough programming and scripting to be extremely dangerous. Despite this, I&#8217;ve saved myself days, possibly weeks, of time and frustration using this tool.</p>
<h3>Use the Question Mark (?)</h3>
<p>I discovered this by accident, but I remembered back in the old days programming Basic on my <a href="http://en.wikipedia.org/wiki/Atari_8-bit_family" title="Atari 400" target="_blank">Atari 400</a> that the question mark character was shorthand for &#8220;Print.&#8221; As it turns out, VBA is a distant cousin to the old Basic. You can still use the &#8220;print&#8221; keyword, but the question mark is your friend. (Note that the question mark will be converted to the &#8220;print&#8221; keyword automatically in the Code Editor.)</p>
<h3>Get Full Path and Connection Information to Linked Table</h3>
<p>This can be a huge time saver, especially when working with databases that have a lot of linked tables and those with long path names. Sometimes the Linked Table Manager utility just doesn&#8217;t cut it.</p>
<p><code>? currentdb.TableDefs("tablename").Connect</code><br />
<em>or</em><br />
<code>print currentdb.TableDefs("tablename").Connect</code></p>
<p>Try it. You just might like the results.</p>
<h3>Incorporate Custom Functions in Queries</h3>
<p>This one might scare some people, as it requires some hand coding of SQL. That means leaving the comfort zone of the visual Query Designer and entering the land of <a href="http://en.wikipedia.org/wiki/SQL" title="SQL" target="_blank">Structured Query Language</a>. It also requires some hand coding of VBA. This can be terrifying. Once you&#8217;re over the initial fear, however, you&#8217;ll be pleased to know that it&#8217;s pretty easy to get started.</p>
<p>Let&#8217;s take a sample table. We&#8217;ll call it tblPeople. <em>Please note: The prefix &#8220;tbl&#8221; is a standard naming convention, but I won&#8217;t get into that here. I&#8217;d highly recommend the <a href="http://www.developershandbook.com/" title="VBA Developer's Handbook Website" target="_blank">VBA Developer&#8217;s Handbook</a> &#8211; <a href="http://www.amazon.com/VBA-Developers-Handbook-Ken-Getz/dp/0782119514" title="Purchase the VBA Developer's Handbook from Amazon.com" target="_blank">(buy it here)</a> for anyone interested in getting their hands dirty with that sort of thing.</em>  We have three fields we&#8217;re concerned with: <code>fname</code>, <code>mname</code>, and <code>lname</code>. We have three records:</p>
<p><img src="http://skillzdesign.com/blog/wp-content/uploads/2007/12/samplepeopletable.jpg" alt="Sample People Table in Access" style="float: none" /></p>
<p>Suppose we wanted these names to print out in a mail merge-friendly format. One method would be to hard code the logic in SQL. My personal preference is to write custom functions for tasks like this, as you end up with more readable and maintainable SQL. For instance, here&#8217;s the function:</p>
<p><code>Function fnNameForMerge(strFName As Variant, strMName As Variant, strLName As Variant) As String<br />
fnNameForMerge = strFName &amp; IIf(strMName = "" Or IsNull(strMName), " ", " " &amp; strMName &amp; " ") &amp; strLName<br />
End Function</code></p>
<p>We can now test the function using the Immediate Window:</p>
<p><img src="http://skillzdesign.com/blog/wp-content/uploads/2007/12/immediatewindowtesting.jpg" alt="Immediate Window Test" style="float: none" /></p>
<p>Once satisfied, we can now use the function in the following SQL statement:</p>
<p><code>SELECT tblPeople.fname, tblPeople.mname, tblPeople.lname, fnNameForMerge(fname,mname,lname) AS NameForMerge<br />
FROM tblPeople</code></p>
<p><img src="http://skillzdesign.com/blog/wp-content/uploads/2007/12/customfunctioninsqleditor.jpg" alt="Custom Function in SQL Editor" style="float: none" /></p>
<p>This can also be done in the Query Designer:</p>
<p><img src="http://skillzdesign.com/blog/wp-content/uploads/2007/12/customfunctioninquerydesigner.jpg" alt="Custom Function in Query Designer" style="float: none" /></p>
<p>The results look like this:</p>
<p><img src="http://skillzdesign.com/blog/wp-content/uploads/2007/12/customfunctionresults.jpg" alt="Custom Function Query Results" style="float: none" /></p>
<p>The more I use Access, the more I tend to dig into the SQL code. I&#8217;ve found myself leaning towards custom functions whenever my SQL starts getting messy, particularly when logic starts creeping in, such as in the example. Even if you&#8217;re a SQL-phobe, consider that it&#8217;s still pretty easy to use custom functions in the Query Designer. You will, however, need to acquaint yourself with Modules.</p>
<p><img src="http://skillzdesign.com/blog/wp-content/uploads/2007/12/moduleobjectscreenshot.jpg" alt="Module Object Screenshot" style="float: none" /></p>
<p>Don&#8217;t let VBA scare you. You don&#8217;t have to be a &#8220;programmer&#8221; to mess around with some code. It just might save you some time or even add quality years to your life. I know it has for me.</p>
<h3>My Rant Against Anti-Automation</h3>
<p>Unfortunately, there seems to be a tendency within organizations to disable macros due to the proliferation of malicious code. This inevitably means more people doing more manual labor, typing things they&#8217;ve typed hundreds of times before, moving the mouse and clicking on things over and over, inching ever closer to Repetitive Stress Injuries. It&#8217;s a shame. The last I checked, computers were supposed to automate things. Personally, I&#8217;d rather take the risk and encourage people to experiment, to unleash their Inner Automator. Repetition is evil &#8211; unless you&#8217;re actually LEARNING from the exercise.</p>
<p>If you&#8217;ve found any of this useful, please feel free to drop me a line or comment.</p>
]]></content:encoded>
			<wfw:commentRss>http://skillzdesign.com/blog/2007/12/31/scripting-is-cool-microsoft-access-vba-tips/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>GeoAccess Excel Add-In</title>
		<link>http://skillzdesign.com/blog/2007/01/26/geoaccess-helper-add-in-for-excel-2000/</link>
		<comments>http://skillzdesign.com/blog/2007/01/26/geoaccess-helper-add-in-for-excel-2000/#comments</comments>
		<pubDate>Fri, 26 Jan 2007 22:29:12 +0000</pubDate>
		<dc:creator>Keith</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Scripting is Cool]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[vba]]></category>

		<guid isPermaLink="false">http://skillzdesign.com/blog/2007/01/26/geoaccess-helper-add-in-for-excel-2000/</guid>
		<description><![CDATA[Access Links, the Add-In included (but not enabled by default) with Excel, can save time when exporting data to MS Access. However, for frequent GeoAccess reporting, I was craving some more flexibility, so I started scripting some alternative solutions (please note: I have only tested this with Excel 2000). Three of them are packaged in ]]></description>
			<content:encoded><![CDATA[<p>Access Links, the Add-In included (but not enabled by default) with Excel, can save time when exporting data to MS Access. However, for frequent GeoAccess reporting, I was craving some more flexibility, so I started scripting some alternative solutions (please note: I have only tested this with Excel 2000). Three of them are packaged in this add-in, <a href="http://skillzdesign.com/blog/wp-content/uploads/2007/01/GeoAccessAssistant.xla">GeoAccessAssistant.xla (click here to download)</a>. Once installed, it adds a <strong>GeoAccess</strong> menu bar with the following three buttons:</p>
<p><!--adsense--></p>
<p><strong>Export Zip Selection to MS Access</strong></p>
<blockquote><p>Select a range of zip codes. <em>(Please note: Zips must be in a single column. At a later date, I might enhance this to accommodate other types of ranges, i.e., horizontal, non-contiguous, etc., but for now, this should still be useful in the majority of scenarios.)</em> Click <strong>Export Zip Selection to MS Access</strong>. This script will trim the contents of each cell to remove surrounding white space, add leading zeroes wherever necessary, shift the selection down one row, add <strong>zip</strong> as the value in the empty cell at the top of the selection, expand the selection one row at the bottom to catch the stray extra cell, create a new, blank Access database with the same name as the active workbook, then transfer the selected range to the new database into a new table named <strong>census</strong>. The script goes one more step by running this JetSQL Data Definition Query:</p>
<p><strong><code>alter table census alter column zip text(5)</code></strong></p>
<p>It seems that GeoNetworks can return inaccurate results if the zip field is not a text field five characters in length. I found this out the hard way. Three hours and two tech support calls later, I decided to avoid that particular trap going forward.</p></blockquote>
<p><strong>Export Zip Region to MS Access</strong></p>
<blockquote><p>This goes through essentially the same steps as the above, except you only need to have the cursor in a single column of zips. When you press <strong>Export Zip Region to MS Access</strong>, it first selects the current region, meaning it will expand to select contiguous, neighboring cells with contents. Try to make sure those cells happen to be in a single column.</p></blockquote>
<p><strong>Export Zips and Counts (Populate)</strong></p>
<blockquote><p>This one does not require anything to be selected initially. Clicking <strong>Export Zips and Counts (Populate)</strong> pulls up a single-button UserForm prompting the user to <strong>Select Zip Range, then Click Here</strong>. Next, it prompts to <strong>Select Counts, then Click Here</strong>. Both selections <strong>must</strong> contain the same number of cells, i.e., one zip code per count, otherwise a message box will pop up warning <strong>Cell counts not matching. Try again?</strong> The user can either try again or cancel the operation. <em>(I have not torture-tested this, but it should work with all types of selections including non-contiguous areas, as long as both zips and counts have the same number of cells. However, I can&#8217;t imagine encountering a scenario such as that. Then again, one never knows&#8230;)</em> If the cell counts match, it will prompt <strong>Click to Export Data to Access</strong>. It will then create a new, blank Access database with the same name as the active workbook, create a new table named <strong>census</strong> with a five-character text field named <strong>zip</strong>, then iterate through each zip in the originally selected range, duplicating records according to each corresponding count, essentially replicating the GeoNetworks Data-Populate feature.</p></blockquote>
<p>I haven&#8217;t provided further instructions, as this assumes some Intermediate knowledge of Excel which should include managing Add-Ins. Details are freely available in Excel&#8217;s online help.</p>
<p>If anyone either finds this useful or feels that I must be stopped, please feel free to share opinions, experiences, rants, and raves. Any suggestions are always more than welcome, though I cannot guarantee that I will act on them other than to respond to your comments. I assure you, I&#8217;m driven by an uncontrollable desire to automate away repetitive tasks wherever possible, not including, of course, those repetitive tasks which might actually prove beneficial, such as breathing.</p>
]]></content:encoded>
			<wfw:commentRss>http://skillzdesign.com/blog/2007/01/26/geoaccess-helper-add-in-for-excel-2000/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Access Database Compactor Utility</title>
		<link>http://skillzdesign.com/blog/2005/08/29/access-database-compactor-utility/</link>
		<comments>http://skillzdesign.com/blog/2005/08/29/access-database-compactor-utility/#comments</comments>
		<pubDate>Mon, 29 Aug 2005 22:07:24 +0000</pubDate>
		<dc:creator>Keith</dc:creator>
				<category><![CDATA[Scripting is Cool]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[vba]]></category>

		<guid isPermaLink="false">http://skillzdesign.com/blog/archives/26</guid>
		<description><![CDATA[I&#8217;ve been dealing with large quantities of Access databases. They tend to get bloated with unused space. So, I built this utility which searches folders and subfolders for databases, populates a listbox (with extended multiselect) with the filenames, then uses the Jet database engine to compact the selected files. It shows before and after filesizes. ]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been dealing with large quantities of Access databases. They tend to get bloated with unused space. So, I built this utility which searches folders and subfolders for databases, populates a listbox (with extended multiselect) with the filenames, then uses the Jet database engine to compact the selected files. It shows before and after filesizes. Oh&#8230; and it WORKS. (If it doesn&#8217;t, please drop me a line with the details.)</p>
<p><a href="http://skillzdesign.com/blog/wp-content/mdbcompactor.zip">Download the zipped file here.</a></p>
<p>Feel free to let me know if you find this useful, suggest enhancements, tell me to shut up already, etc.</p>
]]></content:encoded>
			<wfw:commentRss>http://skillzdesign.com/blog/2005/08/29/access-database-compactor-utility/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
