CLOSE all #define CRLF chr(13) + chr(10) USE koko local lnMax lnMax = 18 local array laXLSFiles[lnMax] FOR i=1 TO lnMax COPY FOR numbers=i TO ("sheet" + TRANSFORM(i)) TYPE XL5 laXLSFiles[m.i] = sys(5) + curdir() + 'sheet' + transform(m.i) + 'xls' ENDFOR =CombineExcelFiles(laXLSFiles, 'c:\dept\amman.xls')&& not work function CombineExcelFiles (taXLSFiles, tcDestination, tlDeleteOriginal) external array taXLSFiles local loExcel as Excel.application, ; loWorkBook as Excel.Worksbook, ; loWorkSheet , ; lnCounter, lcWorkSheetCaption, lcError, ; lcValidChars lcError = "" try lcValidChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 " loExcel = newobject("Excel.Application") with loExcel .ScreenUpdating = .f. .DisplayAlerts = .f. .WorkBooks.add() lnCounter = 0 ** Delete all existing worksheets except 1 for each loWorkSheet in .WorkBooks(1).WorkSheets lnCounter = m.lnCounter + 1 if m.lnCounter > 1 loWorkSheet.delete endif endfor for lnCounter = 1 to alen(taXLSFiles,1) if file(taXLSFiles[m.lnCounter]) lcWorkSheetCaption = juststem(taXLSFiles[m.lnCounter]) loWorkBook = .WorkBooks.open(taXLSFiles[m.lnCounter]) loWorkBook.WorkSheets(1).copy(null, ; .WorkBooks(1).WorkSheets(.WorkBooks(1).WorkSheets.count)) .WorkBooks(1).ActiveSheet.name = ; right(alltrim(chrtran(m.lcWorkSheetCaption, ; chrtran(m.lcWorkSheetCaption,m.lcValidChars,"")," ")), 31) &&loWorkBook.Name loWorkBook.close(.f.) && Don't save changes if m.tlDeleteOriginal erase (taXLSFiles[m.lnCounter]) endif endif endfor ** Remove the first original sheet from (Sheet1) .WorkBooks(1).WorkSheets(1).delete .WorkBooks(1).saveas(m.tcDestination) .ScreenUpdating = .t. .DisplayAlerts = .t. endwith catch to loError lcError = Log_Error(m.loError) finally if vartype(m.loExcel) = 'O' with loExcel .ScreenUpdating = .t. .DisplayAlerts = .t. .quit() endwith endif endtry return m.lcError endfunc ********************* function Log_Error lparameters toError local lcError, lcVars lcError = [Error: ] + transform(m.toError.errorno) + CRLF + ; [LineNo: ] + transform(m.toError.lineno) + CRLF + ; [Message: ] + m.toError.message + CRLF + ; [Procedure: ] + m.toError.procedure + CRLF + ; [Details: ] + m.toError.details + CRLF + ; [StackLevel: ] + transform(m.toError.stacklevel) + ; iif(_vfp.startmode = 0, CRLF + [LineContents: ] + m.toError.linecontents, '') return m.lcError *The three chief virtues of a programmer>Add at the very top of your program
>#define CRLF chr(13) + chr(10) >>