Define Class bIRexGenerador As Session OlePublic DataSession = 2 && Private Session PROCEDURE Generar PARAMETERS formatfile, outputfile,lclosefile,lsaveConfig,lAllowUserInteraction SET DELETED ON *!* CLEAR ALL *!* RELEASE ALL SET safety off *SET EXCLUSIVE ON SET EXCLUSIVE OFF CLOSE ALL lcOldError = ON("ERROR") runId=SYS(2015) logId=0 ON ERROR this.catchError() #include EXCEL.H [code] ENDPROC FUNCTION logs LPARAMETERS x IF ! ISNULL(oErr) AND TYPE("oErr") = "O" IF !hayError ErrorEncontrado = "Error"+STR(oErr.ErrorNo)+[ LineNo: ] + STR(oErr.LineNo) +[ Message: ] + oErr.Message +[ Procedure: ] + oErr.Procedure +[ Details: ] + oErr.Details +[ StackLevel: ] + STR(oErr.StackLevel) +[ LineContents: ] + oErr.LineContents +[ UserValue: ] + oErr.UserValue ENDIF ELSE IF !hayError ErrorEncontrado ="" ENDIF ENDIF **INSERT INTO log VALUES (x, DATETIME(), linea,user, formatfile, outputfile, ErrorEncontrado) INSERT INTO log VALUES (x, DATETIME(), fcRow,"Demo", formatfile, outputfile, ErrorEncontrado,RunId,LogId) logId=LogId+1 hayError=.F. **? x RETURN .t. ENDfunc FUNCTION GetSheet LPARAMETERS wbName,oXcel Encontrado=.f. FOR i=1 TO oXCEL.worksheets.Count IF UPPER(oXcel.worksheets(i).Name) = UPPER(wbName) Encontrado=.T. RETURN oXcel.worksheets(i) ENDIF ENDFOR oXcel.worksheets.ADD xlSheet = oXcel.activesheet xlSheet.NAME = wbName RETURN xlSheet ENDfunc FUNCTION valor LPARAMETERS x retval="" IF !ISNULL(x) DO case CASE TYPE("x")="C" retval=x CASE TYPE("x")="N" retval=STR(x) ENDCASE ENDIF RETURN retval ENDfunc PROCEDURE CatchError hayError=.t. ErrorEncontrado = 'error #' + transform( error() ) + ': "' + message() + '"' + 'program: ' + Program( Program(-1)-1) + 'line #' + transform( lineno() ) + ": " + message(1) =this.logs(errorencontrado) RETURN ENDPROC ENDDEFINEIt compiles and instantiates without error