<?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>Hacking at 0300 &#187; Microsoft Office</title>
	<atom:link href="http://bililite.nfshost.com/blog/category/microsoft-office/feed/" rel="self" type="application/rss+xml" />
	<link>http://bililite.nfshost.com/blog</link>
	<description>Thoughts on web design and programming from a very occasional volunteer webmaster</description>
	<lastBuildDate>Mon, 07 May 2012 14:38:35 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Better Asthma Care through Technology</title>
		<link>http://bililite.nfshost.com/blog/2011/01/02/better-asthma-care-through-technology/</link>
		<comments>http://bililite.nfshost.com/blog/2011/01/02/better-asthma-care-through-technology/#comments</comments>
		<pubDate>Mon, 03 Jan 2011 03:26:04 +0000</pubDate>
		<dc:creator>Danny</dc:creator>
				<category><![CDATA[Medical Informatics]]></category>
		<category><![CDATA[Microsoft Office]]></category>

		<guid isPermaLink="false">http://bililite.nfshost.com/blog/?p=1304</guid>
		<description><![CDATA[Part of the drudgery of medicine is all the certification and paperwork, and the petty bureaucrats who need to constantly justify their existence by creating new rules. All the rules are well-intentioned, but taken together pave the road to hell&#8212;keeping us away from our patients and actually helping people. One such well-paved path is the [...]]]></description>
			<content:encoded><![CDATA[<p>Part of the drudgery of medicine is all the certification and paperwork, and the petty bureaucrats who need to constantly justify their existence by creating new rules. All the rules are well-intentioned, but taken together pave the road to hell&mdash;keeping us away from our patients and actually helping people. One such well-paved path is the <a href="http://www.abp.org">American Board of Pediatrics</a> which, over the past 20 years, turned board certification from "Take a test" to "Take a test at home every 7 years" to "Take a closed-book test in a secure environment because we can't trust you, every 7 years" to "Take a secured test every 7 years, keep your medical license (even losing it for not paying taxes means you lose your certification), do Board-approved CME, get patient-satisfaction surveys, and do Board-approved quality improvement projects, every 5 years." There's no reason to believe any of this makes me a better doctor but without it, what's the Board for? But enough griping, I may write about this more later.</p>
<p>One of the first things I tried to do when I started at the <a href="http://www.stlukes-stl.com/services/pediatric_care/">St. Lukes Pediatric Care Center</a> this fall was improve our asthma management and follow up, so my Quality Improvement project will be the Board's <a href="http://pim.abp.org/asthma/global/demo.php">Asthma Practice Improvement Module</a>. It's no different from what I'm doing anyway, with the added fun of filling out data forms online for the Board to adjudicate.</p>
<h3>Asthma Management</h3>
<p>Asthma is a <a href="http://www.cdc.gov/nchs/data/hestat/asthma/asthma.htm">growing problem in the US</a>, and the NIH has produced a huge (4 MB) <a href="http://www.nhlbi.nih.gov/guidelines/asthma/asthgdln.htm">report</a> on managing it, with lots of its own jargon. Basically it's a chronic disease that comes in attacks, which can either be <em>in control</em>&mdash;only occasional symptoms&mdash;or <em>not in control</em>&mdash;frequent symptoms. Either way, attacks are treated with <em>rescue medicines</em>, usually an inhaler that relaxes the muscles in the lungs. If your asthma is in control without any other medicines, then you have <em>intermittent</em> asthma. If not, you have <em>persistent</em> asthma and need <em>control medicines</em> to take every day to prevent attacks. The report further divides persistent asthma into grades of severity, but <a href="http://www.ncbi.nlm.nih.gov/pubmed/14665495">judging severity</a> <a href="http://www.ncbi.nlm.nih.gov/pubmed/17994399">is inconsistent</a> and largely irrelevant: if your control medicines keep you in control, good; if not, do something more.</p>
<span id="more-1304"></span>
<p>Classifying control is a long-term measure, 3 to 6 months. Every patient needs to know what to do for an attack, which means having an <a href="http://www.cdc.gov/asthma/actionplan.html">Asthma Action Plan</a>. Your condition is classified as <em>green zone</em>&mdash;no symptoms&mdash;<em>yellow zone</em>&mdash;some symptoms but you can manage them at home&mdash;or <em>red zone</em>&mdash;see a doctor or get to the emergency room. You can often judge how bad your asthma is doing by how you feel; chest tightness, wheezing and coughing are all symptoms of asthma, but the best measure is how obstructed your breathing is. Measuring that uses a <a href="http://www.aaaai.org/patients/publicedmat/tips/whatispeakflowmeter.stm">peak flow meter</a>, a device that measures how fast you can exhale and <a href="http://www.amazon.com/gp/redirect.html?ie=UTF8&#038;location=http%3A%2F%2Fwww.amazon.com%2Fs%3Fie%3DUTF8%26x%3D0%26ref_%3Dnb_sb_noss%26tag%3Dbililite20-com%26y%3D0%26field-keywords%3Dpeak%2520flow%2520meter%26url%3Dsearch-alias%253Dhpc&#038;tag=bililitecom-20&#038;linkCode=ur2&#038;camp=1789&#038;creative=390957">costs $10-$20</a><img src="https://www.assoc-amazon.com/e/ir?t=bililitecom-20&#038;l=ur2&#038;o=1" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />. Ideal peak flow <a href="http://www.ncbi.nlm.nih.gov/pubmed/479997">is dependent on lung size and height</a>.</p>
<h3>The Plan</h3>
<p>If I'm going to implement any quality improvement program, I need to document what I'm planning on doing, and have some way to measure results, so this blog post is going to be a long one. If you are reading this for the medical management side, <a href="#management">feel free to skip the programming mumbo-jumbo</a>.</p>
<h3>Enter the Programmer</h3>
<p>All this cries out for some automation, so I created an <a href="/blog/blogfiles/Asthma%20Action%20Plan-SLPCC.dot">Asthma Action Plan</a> and a set of Visual Basic routines to keep track of all this:</p>
<p><a href="/blog/blogfiles/Asthma%20Action%20Plan-SLPCC.dot"><img src="/blog/blogfiles/AAP.PNG" alt="Asthma Action Plan" /></a></p>
<p>The file is a template (.dot) file, so each time it opens a new document is created. This makes VBA a bit more complicated, since variables are associated with the template (<code>ThisDocument</code>) and the actual text is in <code>ActiveDocument</code>.</p>
<p>The office still runs on Microsoft Office 2000, so I'm not sure how it will work with a modern version. It creates a custom toolbar to fill in the data:</p>
<p><img src="/blog/blogfiles/aapbar.PNG" alt="Asthma Action Plan Toolbar" /></p>
<h3>Macros and Custom Document Properties</h3>
<p>The key to the interaction between VBA macros and the document is custom document properties in both the <a href="http://office.microsoft.com/en-us/word-help/field-codes-docproperty-field-HP005186145.aspx">document</a> and the <a href="http://msdn.microsoft.com/en-us/library/dhxe2d75%28v=VS.100%29.aspx">script</a>. For instance, one cute aspect of the document is that you can change the gender of the instructions, "his" or "hers" rather than "your child's" or "his/hers" or some such. The sex is set with code like:</p>
<pre><code class="language-vb">
Public bar As CommandBar
Public boxSex As CommandBarComboBox

Sub initialize()
    addProperty "Sex", msoPropertyTypeString, "Male"
    CustomizationContext = ActiveDocument
    Set bar = CommandBars.Add("CustomBar", msoBarTop, False, True)
    Set ThisDocument.boxSex = bar.Controls.Add(msoControlDropdown)
    With ThisDocument.boxSex
        .Width = 90 ' found by trial and error. VB needs a function that calculates this!
        .Caption = "Sex: "
        .Style = msoComboLabel
        .BeginGroup = True
        .AddItem "Male"
        .AddItem "Female"
        .ListIndex = 1
        .TooltipText = "Choose the patient's sex"
        .OnAction = "setSex"
    End With
    bar.Visible = True
End Sub

Function addProperty(theName As String, theType As MsoDocProperties, theValue As Variant) As DocumentProperty
    ' DocumentProperties has no Exists method, so we have to do it by hand
    For Each addProperty In ActiveDocument.CustomDocumentProperties
        If addProperty.Name = theName Then
            addProperty.Value = theValue
            Exit Function
        End If
    Next addProperty
    Set addProperty = ActiveDocument.CustomDocumentProperties.Add(theName, False, theType, theValue)
End Function

Sub setSex()
    ActiveDocument.CustomDocumentProperties("Sex").Value = ThisDocument.boxSex.Text
    updateFields ' reflect changes into the text
End Sub

Sub updateFields()
    Dim r As Range
    For Each r In ActiveDocument.StoryRanges
        r.Fields.Update
        Do Until r.NextStoryRange Is Nothing
            Set r = r.NextStoryRange
            r.Fields.Update
        Loop
    Next r
End Sub
</code></pre>
<p>And in the document itself: (note that the <strong>{}</strong> brackets are <em>not</em> typed brackets; they are inserted with control-F9):</p>
<pre><code>Your child should check <strong>{</strong>If <strong>{</strong>DocProperty sex<strong>}</strong> = Female her his<strong>}</strong> peak flow twice a day
</code></pre>
<p>Fill-in-the blanks that are selected with a single click so they can be over-written are created with a clever hack from Microsoft's own fax templates. The <a href="http://office.microsoft.com/en-us/word-help/field-codes-macrobutton-field-HP005186171.aspx"><code>MacroButton</code> field</a> displays its second parameter as un-editable text, and using a non-existent macro name means nothing happens when its clicked except selecting it:</p>
<pre><code>Use rescue medicine: <strong>{</strong>MacroButton NoMacro ______________________<strong>}</strong></code></pre>
<h3>Calculating Ideal Peak Flow</h3>
<p>The <a href="/webservices/pf">peak flow zones</a> are green: &gt;80% maximum; yellow: 50-80% maximum; red: &lt;50% maximum, where the maximum peak flow is ideally the patient's own peak flow when completely healthy, but <a href="http://www.ncbi.nlm.nih.gov/pubmed/479997">it can be estimated from patient height</a>:</p>
<pre><code class="language-vb">Function sngLookupPredictedPeakFlow(sngHeight As Single) As Single
' based on the regression formulas for African-American children and adolescents (based on the St. Luke's predominant ethnic mix)
' from Hsu et al. (1979)J Peds 95:14
    Select Case ActiveDocument.CustomDocumentProperties("Sex").Value
        Case "Male", "male", "M", "m"
            sngLookupPredictedPeakFlow = 0.000174 * sngHeight ^ 2.92
        Case "Female", "female", "F", "f"
            sngLookupPredictedPeakFlow = 0.000551 * sngHeight ^ 2.68
    End Select
End Function
</code></pre>
<p>Parameters for other ethnicities are available from the <a href="/webservices/pf.csv">bililite webservices</a>.</p>
<h3>Scheduling followup: Adding Appointments to Outlook</h3>
<p>The key to managing a chronic illness is followup: seeing what happens with each intervention and deciding if it was enough, too little or too much. If I've made any changes, I like to see the patient back in one month, and if everything is stable, every six months. I add a reminder to my Outlook calendar to send a letter:</p>
<pre><code class="language-vb">Public boxPt As CommandBarComboBox
Public btnAppt As CommandBarButton
Public boxMonths As CommandBarComboBox
Sub initialize()
 ...Rest of routine
    Set ThisDocument.btnAppt = bar.Controls.Add(msoControlButton)
    With ThisDocument.btnAppt
        .Caption = "Follow up appointment"
        .FaceId = 1106 ' Calendar
        .BeginGroup = True
        .OnAction = "doFollowup"
    End With
    bar.Visible = True
    
    Set ThisDocument.boxMonths = bar.Controls.Add(msoControlDropdown)
    With ThisDocument.boxMonths
        .Width = 80 ' found by trial and error. VB needs a function that calculates this!
        .Caption = "Months: "
        .Style = msoComboLabel
    End With
    Dim i As Integer
    For i = 1 To 12
        ThisDocument.boxMonths.AddItem i
    Next i
    ThisDocument.boxMonths.ListIndex = 1
...Rest of routine
End Sub

Sub doFollowup()
    Dim outlook
    Set outlook = CreateObject("Outlook.Application")
    Dim appt
    Set appt = outlook.CreateItem(1) ' new appointment
    ' My scheduling program tends to create all-capitalized names, LAST,FIRST, with no space after the comma
    ' the Replace and StrConv makes it better. Ideally I'd correct it to FIRST LAST, but this works
    appt.Subject = StrConv(Replace(ThisDocument.boxPt.Text, ",", ", "), vbProperCase) 
    appt.Start = FormatDateTime(Date + ThisDocument.boxMonths.ListIndex * 30, vbShortDate) &#038; " 9:00 AM" ' so many months from now
    appt.Duration = 1
    appt.Body = "Asthma management follow up"
    appt.AllDayEvent = True
    appt.ReminderSet = True
    appt.ReminderMinutesBeforeStart = 7 * 24 * 60 ' one week in minutes
    appt.Save
End Sub
</code></pre>
<h3 id="management">Data Collection</h3>
<p>(If you're just reading for the programming side, stop now. The rest is all medical)</p>
<p>The plan is to collect data on management (medications and guidance) on every patient with a diagnosis of asthma, and to diagnose asthma in anyone over the age of 4 with a history of 4 or more episodes of respiratory symptoms responsive to bronchodilators since the age of 1 (without any other diagnosis). The data collection form is a hybrid of the data that the Board wants and the things I think are important. It is designed to be a part of the patient's chart, and <a href="https://www.abp.org/abpwebsite/moc/performanceinpractice/approvedq1projects/asthmafaq.pdf">according to the Board</a> does not need informed consent or Institutional Review Board approval since it is part of routine patient care and none of the data is identified when entered.</p>
<p><a href="/blog/blogfiles/Asthma%20Management.pdf"><img src="/blog/blogfiles/asthma%20management.PNG" alt="Asthma Management Form" /></a></p>
<p>The data form is mostly information requested by the Board program; from my point of view I want to know what medicines (rescue and control) the patient is on, and how good their asthma control is. Most of my patients have never heard these terms before and can't remember their meds, so a lot of education happens here. If the patient is out of control, then we move up a step in control meds. If the patient has been in control for at least six months and the parent is comfortable with stepping back, we go down a step. If we've made any changes in medications, I want to see the patient back in 1 month. Otherwise, I'll see them back in six months.</p>
<p>Everyone gets their asthma action plan reviewed, and a demonstration of using inhalers and spacers correctly. Patients with persistent asthma who have had an asthma action plan for at least a year are introduced to the peak flow meter (I think there's too much other information to assimilate on the first visits).</p>
<p>The steps for control medicines are (see <a href="http://www.nhlbi.nih.gov/guidelines/asthma/asthgdln.htm">the report</a> for details on medications and doses):</p>
<ol>
<li>No control medications</li>
<li>Low-dose inhaled corticosteroid</li>
<li>Medium-dose inhaled corticosteroid (may have to change this based on <a href="http://pediatrics.aappublications.org/cgi/content/abstract/127/1/129">Zhang et al (2011) Pediatrics 127:129-138</a>)</li>
<li>Medium-dose inhaled corticosteroid plus oral leukotriene inhibitor</li>
<li>Medium-dose inhaled corticosteroid with long-acting bronchodilator plus oral leukotriene inhibitor</li>
<li>High-dose inhaled corticosteroid with long-acting bronchodilator plus oral leukotriene inhibitor and refer to pulmonologist</li>
</ol>
<p>For the purpose of the quality improvement program, I'll collect the data in 3 successive 6-month series, with the hypothesis that average control will improve as these changes are implemented.</p>
<p>I think this represents a do-able program that should not take much more time than I would otherwise be using for asthma education, and certainly billing and getting paid will be easier with adequate documentation.<p>
<h3>Future directions</h3>
<p>Things I'd still like to be able to do:</p>
<ul>
<li>Track flu vaccine status and issue reminders. Perhaps our upcoming EMR will help.</li>
<li>Do better with peak flow monitoring and even real spirometery (we have a spirometer in the closet that no one is using right now).</li>
<li>Get the whole practice on board so the patients have good follow up even if they're seeing different doctors.</li>
</ul>
<p>But for now, this seems like enough.</li>]]></content:encoded>
			<wfw:commentRss>http://bililite.nfshost.com/blog/2011/01/02/better-asthma-care-through-technology/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Daylight Savings Time and the AT&amp;T 8525</title>
		<link>http://bililite.nfshost.com/blog/2009/02/10/daylight-savings-time-and-the-att-8525/</link>
		<comments>http://bililite.nfshost.com/blog/2009/02/10/daylight-savings-time-and-the-att-8525/#comments</comments>
		<pubDate>Tue, 10 Feb 2009 16:34:37 +0000</pubDate>
		<dc:creator>Danny</dc:creator>
				<category><![CDATA[Microsoft Office]]></category>

		<guid isPermaLink="false">http://bililite.nfshost.com/blog/?p=373</guid>
		<description><![CDATA[I use an AT&#038;T 8525 smartphone (it's the HTC Hermes TyTN) that a friend recommended (some friend!). I've been pulling my hair out with its daylight savings bug&#8212;events have the correct time in Outlook on the computer, but are an hour off or worse on the phone. Outlook stores events in UTC and displays them [...]]]></description>
			<content:encoded><![CDATA[<p>I use an <a href="http://www.wireless.att.com/businesscenter/8525/">AT&#038;T 8525</a> smartphone (it's the <a href="http://en.wikipedia.org/wiki/HTC_TyTN">HTC Hermes TyTN</a>) that a friend recommended (some friend!). I've been pulling my hair out with its <a href="http://forums.wireless.att.com/cng/board/message?board.id=cingular&#038;thread.id=34397&#038;view=by_date_ascending&#038;page=1">daylight savings bug</a>&mdash;events have the correct time in Outlook on the computer, but are an hour off or worse on the phone. Outlook stores events in <a href="http://en.wikipedia.org/wiki/Coordinated_Universal_Time">UTC</a> and displays them in the local time zone. Events that take place during daylight savings time occur one hour earlier UTC, but Outlook knows that. Windows Mobile 6 doesn't. Why would a Microsoft programmer creating a calendar program care about daylight savings time? It only affects half the year! So all appointments during DST are listed on the phone as one hour earlier. Worse, all-day events are stored as midnight-midnight, with an extra flag marking them as all day long. The bug shifts the event to 11pm the day before, still marked as an all day event, so Easter Sunday falls on Saturday on my phone!</p>
<p>Solution: Follow the instructions at Microsoft's website: <a href="http://www.microsoft.com/windowsmobile/en-us/downloads/microsoft/daylight-savings-update.mspx">www.microsoft.com/windowsmobile/en-us/downloads/microsoft/daylight-savings-update.mspx</a>. The phone resets itself without warning; that's OK. The times are still messed up. Open Outlook and make sure your contacts and calendar are correct. Now open Active Sync and select Delete Mobile Device from the File menu. This means that everything on the phone that syncs (Calendar, Contacts, etc.) will be erased and recopied from the computer (Microsoft neglected to provide a way to just sync with "computer overwrites handheld" for just the calendar, the way Palm does). Connect the phone. A "Connected" message appears in Active Sync, then the whole program disappears. Disconnect the phone and reconnect. A "Connected" message appears in Active Sync, then the setup wizard starts, and you can sync as usual. Pray that all your critical appointments will be copied correctly (this took 2 hours with my data). The phone calendar now has the correct days for all-day events, but the times are still off. Changing the date to a day in DST (under Settings/System tab/Clock and Alarms), however, corrects the times, both during DST and regular time. Changing the date to the correct date does not lose the correction. Restarting the phone makes it forget the correction, so you have to do the change date hack again.</p>
<p>Liberally mutter or curse while performing this arcane art.</p>
<p>Bottom Line solution:</p>
<ol>
<li>Don't buy Microsoft products</li>
<li>If you must buy Microsoft products, don't depend on them</li>
<li>If you must depend on them, keep multiple backups and count the days until you can justify buying an iPhone</li>
</ol>]]></content:encoded>
			<wfw:commentRss>http://bililite.nfshost.com/blog/2009/02/10/daylight-savings-time-and-the-att-8525/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Turning a table into a list in Excel</title>
		<link>http://bililite.nfshost.com/blog/2008/10/23/turning-a-table-into-a-list-in-excel/</link>
		<comments>http://bililite.nfshost.com/blog/2008/10/23/turning-a-table-into-a-list-in-excel/#comments</comments>
		<pubDate>Fri, 24 Oct 2008 05:29:45 +0000</pubDate>
		<dc:creator>Danny</dc:creator>
				<category><![CDATA[Microsoft Office]]></category>

		<guid isPermaLink="false">http://bililite.nfshost.com/blog/?p=158</guid>
		<description><![CDATA[The yomim tovim are over, so I will hopefully have a chance to play with jQuery again. But on the programming side, one thing I had to do was turn a table of honors, something like this: Rosh Hashana 1Rosh Hashana 2Yom Kippur MaarivPerson 1Person 2Person 3 ShacharitPerson 4Person 5Person 6 MusafPerson 7Person 8Person 9 [...]]]></description>
			<content:encoded><![CDATA[The yomim tovim are over, so I will hopefully have a chance to play with jQuery again. But on the programming side, one thing I had to do was turn a table of honors, something like this:
<table border="1">
<tbody>
<tr><td></td><td>Rosh Hashana 1</td><td>Rosh Hashana 2</td><td>Yom Kippur</td></tr>
<tr><td>Maariv</td><td>Person 1</td><td>Person 2</td><td>Person 3</td></tr>
<tr><td>Shacharit</td><td>Person 4</td><td>Person 5</td><td>Person 6</td></tr>
<tr><td>Musaf</td><td>Person 7</td><td>Person 8</td><td>Person 9</td></tr>
</tbody>
</table>
And turn it into this:
<table border="1">
<tr><td>When</td><td>What</td><td>Who</td></tr>
<tr><td>Rosh Hashana 1</td><td>Maariv</td><td>Person 1</td></tr>
<tr><td>Rosh Hashana 1</td><td>Shacharit</td><td>Person 4</td></tr>
<tr><td>Rosh Hashana 1</td><td>Musaf</td><td>Person 7</td></tr>
<tr><td>Rosh Hashana 2</td><td>Maariv</td><td>Person 2</td></tr>
<tr><td>Rosh Hashana 2</td><td>Shacharit</td><td>Person 5</td></tr>
<tr><td>Rosh Hashana 2</td><td>Musaf</td><td>Person 8</td></tr>
<tr><td>Yom Kippur</td><td>Maariv</td><td>Person 3</td></tr>
<tr><td>Yom Kippur</td><td>Shacharit</td><td>Person 6</td></tr>
<tr><td>Yom Kippur</td><td>Musaf</td><td>Person 9</td></tr>
<tbody>
</tbody>
</table>
<span id="more-158"></span>
I used code like this:
<pre><code class="language-vb">
Sub createlist()
    Dim source As Range
    Set source = Range("B2:D4")
    Dim dest As Range
    Set dest = Range("F1")
    dest.Range("A1:C1").Value = Array("When", "What", "Who")
    Dim target As Range
    Dim c As Range
    For Each c In source.Cells
        If Not IsEmpty(c.Value) Then
            If IsEmpty(dest.Range("A2").Value) Then
                Set target = dest.Range("A2")
            Else
                Set target = dest.End(xlDown).Range("A2")
            End If
            target.Range("C1").Formula = "=" &#038; c.Address
            target.Range("B1").Formula = "=" &#038; c.EntireRow.Range("A1").Address ' row header
            target.Range("A1").Formula = "=" &#038; c.EntireColumn.Range("A1").Address ' column header
        End If
    Next c
End Sub
</code></pre>

<p>The key tricks was getting column/row headers with <code class="language-vb">.EntireColumn/Row.Range("A1")</code>, and appending to the end of a list with
<code class="language-vb">.End(xlDown).Range("A2")</code>. Unfortunately, <code>End(xlDown)</code> is too clever; if the region contains only one item (like the column header only), it goes all the way to the end of the spreadsheet and the <code>.Range("A2")</code>, which should get the <em>next</em> line, throws an error. Hence the <code class="language-vb">If IsEmpty(dest.Range("A2").Value) Then</code>.</p>
<p>The <code class="language-vb">If Not IsEmpty(c.Value) Then</code> line allows for blank spots in the original table to be ignored. VBA doesn't have a <code>Continue</code> statement, just an equivalent for <code>break</code>, called <code class="language-vb">Exit For</code>.]]></content:encoded>
			<wfw:commentRss>http://bililite.nfshost.com/blog/2008/10/23/turning-a-table-into-a-list-in-excel/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Exporting the calendar to Outlook</title>
		<link>http://bililite.nfshost.com/blog/2008/07/03/exporting-the-calendar-to-outlook/</link>
		<comments>http://bililite.nfshost.com/blog/2008/07/03/exporting-the-calendar-to-outlook/#comments</comments>
		<pubDate>Fri, 04 Jul 2008 05:29:24 +0000</pubDate>
		<dc:creator>Danny</dc:creator>
				<category><![CDATA[Microsoft Office]]></category>

		<guid isPermaLink="false">http://bililite.nfshost.com/blog/index.php/2008/07/03/exporting-the-calendar-to-outlook/</guid>
		<description><![CDATA[I just got a Windows Mobile smartphone to replace my Palm TX (screen digitizer died). It's an ugly, kludgy and slow operating system (even after upgrading to WM 6). There's nothing as elegant as Luach that integrates Jewish calendar data in the datebook. There's a Jewish Calendar that's nice, but I ended up writing my [...]]]></description>
			<content:encoded><![CDATA[I just got a Windows Mobile smartphone to replace my Palm TX (screen digitizer died). It's an ugly, kludgy and slow operating system (even after upgrading to WM 6). There's nothing as elegant as <a href="http://www.penticon.com/luach.html">Luach</a> that integrates Jewish calendar data in the datebook. There's a <a href="http://www.tichnut.de/jewish/windowscecal.htm">Jewish Calendar</a> that's nice, but I ended up writing my own program that generates a CSV file with Hebrew dates etc. It allows you to import candlelighting times, calendar info, and even all the Young Israel events into Outlook. It's at
<a href="http://youngisrael-stl.org/articles/exportCalendarFull.php">http://youngisrael-stl.org/articles/exportCalendarFull.php</a>

Next up for that program: Cardinals, Rams and Blues schedules!
]]></content:encoded>
			<wfw:commentRss>http://bililite.nfshost.com/blog/2008/07/03/exporting-the-calendar-to-outlook/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

