Well after all your great advice and suggestions, I finally came back to this task and went an entirely differnt way. It probably isn't pretty but it seems to work well for my purposes. I though I'd post it here, not sure why, just because I guess:
PROCEDURE SaveDBF
*Saves an excel sheet as a dbf file
CLOSE ALL
CLEAR ALL
clear
LOCAL lcProgPath,lcinExcel,lcoutDBF,lcOutfile,oleExcelName,i,lcSheetName,lcFinalOut,lnSize,lnNumFiles
*Determine our files and paths
lcProgPath = JUSTPATH(SYS(16,0))
lcProgPath = ALLTRIM(SUBSTR(lcProgPath,ATC(':\',lcProgPath)-1,250))+'\'
lcinExcel = GETFILE('XLS*','Select File','Select',0,'Select File XLS to Save as a DBF')
IF EMPTY(lcinExcel)
RETURN
ENDIF
lcOutfile = STRTRAN(UPPER(JUSTFNAME((lcInExcel))),'.XLS','')
lcoutDBF = PUTFILE('Save DBF:',(lcOutfile),'DBF')
IF EMPTY(lcoutDBF )
RETURN
ENDIF
lcpath = JUSTPATH((lcoutDBF))
*Open the file and read sheet names out
oleExcelName = CREATEOBJECT("Excel.Application")
WITH oleExcelName
.visible = .f.
.displayalerts = .f.
.Workbooks.Open((lcinExcel))
*read sheets into cursor to select which ones to save out
CREATE CURSOR sheets (select L,sheet C(100))
SELECT sheets
For i = 1 To oleExcelName.Sheets.Count
lcSheetName = oleExcelName.Sheets(i).Name
APPEND BLANK
REPLACE sheet WITH lcSheetName
endfor
GOTO top
*Opens a simple form with grid first column checkbox second sheet name that allows me to select which sheet(s) to save out
DO FORM (lcProgPath)+"sheetnames.scx" WITH (lcinExcel)
READ events
SELECT sheets
COUNT FOR sheets.select = .T. TO lnNumFiles
GOTO top
SCAN
IF sheets.select = .T.
lcSheetName = ALLTRIM(Sheets.sheet)
*Like to know where we are
WAIT WINDOW 'Working on Sheet: '+(lcSheetName) NOWAIT noclear
lcFinalOut = STRTRAN(lcoutDBF,'.DBF','')+' '+ALLTRIM(lcSheetName)+'.dbf' &&Tack the sheet name on to the dbf name
lcTempTxt = STRTRAN(lcFinalOut,'.dbf','.csv')
.Sheets((lcSheetName)).Select
nLastColumn = oleExcelName.ActiveSheet.UsedRange.Column - 1 + oleExcelName.ActiveSheet.UsedRange.Columns.Count
*Make sure we have close to the correct cell width no rotated cells or merged cells
.Cells.Select
IF oleExcelName.Selection.WrapText = .T.
.Selection.WrapText = .F.
ENDIF
.Selection.Orientation = 0
IF oleExcelName.selection.mergeCells = .T.
.Selection.MergeCells = .F.
endif
.Cells.EntireColumn.AutoFit
*Create the table to bring in this text file
lcTable = "CREATE TABLE '"+(lcFinalOut)+"' ("
FOR i = 1 to nLastColumn
*get column size
.Range(oleExcelName.Cells(1,(i)), oleExcelName.Cells(1,(i))).Select
lnSize = oleExcelName.Selection.ColumnWidth+10&& added in just to make sure we get everything since excel's column widths are unreliable
lcTable = lcTable+" dc"+ALLTRIM(STR(i,10,0))+" C("+alltrim(STR(lnSize,10,0))+"),"
ENDFOR
lcTable = SUBSTR(lcTable,1,LEN(lcTable)-1)+")"
&lcTable
USE DBF() ALIAS DataInput
.ActiveWorkbook.SaveAs((lcTempTxt),6) &&csv
.ActiveWorkbook.Close
SELECT DataInput
APPEND FROM (lcTempTxt) TYPE csv
DELETE FILE (lcTempTxt) &&Don't leave txt files hanging around
USE IN DataInput
lnNumFiles = lnNumFiles - 1
IF lnNumFiles > 0
.Workbooks.Open((lcinExcel))
endif
ENDIF
ENDSCAN
ENDWITH
oleExcelName = .NULL.
RELEASE oleExcelName
WAIT WINDOW 'Finished' NOWAIT