Como siempre, esperando se encuentren todos bien de salud.
Tengo este error que me sale a veces cuando mis clientes quieren sacar un reporte en excel, no logo identificar bajo que circunstancias específicas se genera, pero lo encuentro cuando reviso la carpeta de trabajo y lo encuentro en el errorlog.
Y esta es mi rutina, es un código sencillo que uso para pasar una .DBF a .EXCEL pero no logro entender cual es la razón por la que en ocasiones me genera el error mencionado:Date:29/09/20 Time: 12:22:47
Error BASE/1005 No existe la variable de instancia: NAME
Called from _NAME(0)
Called from DBF_A_XLS(53)
Called from REPODINAMIKACEPTAR(249)
Called from (b)REPOVENTADINAMICA(76)
Called from _DOCONTROLEVENTPROCEDURE(6056)
Called from EVENTS(1801)
Called from DOMESSAGELOOP(0)
Called from _ACTIVATEWINDOW(5717)
Called from REPOVENTADINAMICA(86)
Called from REPOALLEJECUTAR(174)
Called from (b)REPORTES(75)
Called from EVENTS(3244)
Called from DOMESSAGELOOP(0)
Called from _ACTIVATEWINDOW(5717)
Called from REPORTES(80)
Called from ABREMODULO(460)
Called from EJECUTAOPCION(342)
Called from (b)MAIN(162)
Called from _DOCONTROLEVENTPROCEDURE(6056)
Called from EVENTS(1816)
Called from DOMESSAGELOOP(0)
Called from _ACTIVATEWINDOW(5717)
Called from MAIN(212)
Code: Select all
FUNC Dbf_A_Xls( cLaDbf , cTitulo , aTitulos , aCamposBase , aFormatos , aAlineacion , aColores , aTotaliza , nQueHoja )
LOCAL aTotal
IF ! SYS_OFFICE
MsgInfo('Usted no tiene instalado Microsoft Excel en esta computadora.')
RETURN
ENDIF
***Solo en MS office XP
IF nQueHoja = NIL
oExcel := CreateObject( "Excel.Application" ) // HMG 3
if Ole2TxtError() != "S_OK"
MsgStop("Excel no esta disponible en esta computadora - Error "+Ole2TxtError(), "ATENCION")
return nil
endif
oExcel:DisplayAlerts := 0
oWorkBook := oExcel:WorkBooks:Add()
oHoja := oExcel:ActiveSheet
ELSE
IF nQueHoja = 1
oExcel := CreateObject( "Excel.Application" ) // HMG 3
if Ole2TxtError() != "S_OK"
MsgStop("Excel no esta disponible en esta computadora - Error "+Ole2TxtError(), "ATENCION")
return nil
endif
oExcel:DisplayAlerts := 0
oWorkBook := oExcel:WorkBooks:Add()
oHoja := oExcel:ActiveSheet
ELSE
oExcel:Sheets(nQueHoja):Select()
oHoja := oExcel:ActiveSheet
ENDIF
ENDIF
// Prepara el array para las columnas totalizadas.
aTotal := ARRAY( LEN(aCamposBase) )
AFILL( aTotal , 0 )
// Se setea el tipo y el tamaño de letra de las hojas
oHoja:Cells:Font:Name := "Arial" //<- EL ERROR SE GENERA AQUI ESTA ES LA LINEA 53
oHoja:Cells:Font:Size := 9
// Formatear las columnas
IF ! aFormatos = NIL
FOR nCol = 1 TO LEN( aFormatos )
oHoja:Columns( nCol ):NumberFormat := aFormatos[nCol]
NEXT
ENDIF
// Colorear las columnas
IF ! aColores = NIL
FOR nCol = 1 TO LEN( aColores )
IF VALTYPE(aColores[nCol]) = 'A'
oHoja:Columns( nCol ):Font:Color := RGB(aColores[nCol,1],aColores[nCol,2],aColores[nCol,3])
ENDIF
NEXT
ENDIF
// Alinear las columnas
IF ! aAlineacion = NIL
FOR nCol = 1 TO LEN( aAlineacion )
DO CASE
CASE aAlineacion[nCol] = 'I'
oHoja:Columns( nCol ):HorizontalAlignment := -4131
CASE aAlineacion[nCol] = 'C'
oHoja:Columns( nCol ):HorizontalAlignment := -4108
CASE aAlineacion[nCol] = 'D'
oHoja:Columns( nCol ):HorizontalAlignment := -4152
ENDCASE
NEXT
ENDIF
// ........................................................
// Carga de los titulos de los campos
nLin := 2
FOR nCol := 1 to Len( aTitulos )
oHoja:Cells( nLin, nCol ):VALUE := aTitulos[ nCol ]
NEXT
// ........................................................
// Carga Valores de la Base en la Planilla
SELE &cLaDbf
GOTO TOP
nRow := 3
DO WHILE ! EOF()
FOR nCol = 1 to Len( aCamposBase )
cCampo := aCamposBase[ nCol ]
vCampo := &cCampo
IF VALTYPE( vCampo ) = 'C'
vCampo := RTRIM(vCampo)
ENDIF
oHoja:Cells( nRow, nCol ):Value := vCampo
IF ! aTotaliza = NIL
IF aTotaliza[nCol] = .T.
aTotal[nCol] := aTotal[nCol] + vCampo
ENDIF
ENDIF
NEXT
nRow++
SKIP
ENDDO
cRango := "A3:"+XlsColName( LEN(aTitulos) , nRow )
oHoja:Range( cRango ):Borders:LineStyle := 1
// Totaliza las columnas
IF ! aTotaliza = NIL
FOR nCol = 1 to LEN( aCamposBase )
IF aTotaliza[nCol] = .T.
oHoja:Cells( nRow, nCol ):Value := aTotal[nCol]
oHoja:Cells( nRow, nCol ):Font:Bold := .T.
oHoja:Cells( nRow, nCol ):Interior:Color := RGB( 255 , 215 , 0 )
oHoja:Cells( nRow, nCol ):Borders(7):LineStyle := 1 // Left
oHoja:Cells( nRow, nCol ):Borders(8):LineStyle := 1 // Top
oHoja:Cells( nRow, nCol ):Borders(9):LineStyle := 1 // Bottom
oHoja:Cells( nRow, nCol ):Borders(10):LineStyle := 1 // Right
ENDIF
NEXT
ENDIF
// ........................................................
// Ajusta Anchos de Columnas
FOR nCol:=1 TO Len( aCamposBase )
oHoja:Columns( nCol ):AutoFit()
NEXT
// ........................................................
// Formatea las titulos de los campos - se pone al final pq estan afectados
// por la alineacion de columnas hecha arriba y los titulos siempre serán centrados.
cRango := CHR(64+1)+LTRIM(STR(nLIN))+":"+XlsColName(LEN(aTitulos),nLIN)
oHoja:Range( cRango ):Font:Bold := .T.
oHoja:Range( cRango ):Interior:ColorIndex := 36 //sombrear celdas
oHoja:Range( cRango ):Borders:LineStyle := 1 // grillado
oHoja:Range( cRango ):HorizontalAlignment := -4108 // centrado
// ........................................................
// Escribe el encabezado del reporte en la primera fila
// Se coloca aca al final para que el AUTOFIT no se ajuste al ancho del titulo del reporte.
oHoja:Cells( 1 , 2 ):VALUE := cTitulo
oHoja:Cells( 1 , 2 ):HorizontalAlignment := -4131 // izquierda
// Congela las 2 primeras filas
oHoja:Cells( 3 , 1 ):Select()
oExcel:Application:ActiveWindow:FreezePanes := .T.
IF nQueHoja = NIL
oExcel:Visible := .T.
ENDIF
RETURN NIL
Reciban un cordial saludo.