Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

AYUDA EN Error Codigo Visual Basic

Estas en el tema de AYUDA EN Error Codigo Visual Basic en el foro de Visual Basic clásico en Foros del Web. Hola muy buenas a tod@s ¡¡ Tengo un misterio con un código de Visual Basic que funcionaba perfectamente sobre Excel 2000 y ahora no funciona ...
  #1 (permalink)  
Antiguo 23/02/2009, 02:44
 
Fecha de Ingreso: agosto-2007
Mensajes: 248
Antigüedad: 16 años, 8 meses
Puntos: 1
AYUDA EN Error Codigo Visual Basic

Hola muy buenas a tod@s ¡¡

Tengo un misterio con un código de Visual Basic que funcionaba perfectamente sobre Excel 2000 y ahora no funciona en Excel 2007. El caso es que tengo un bucle que hace 41 iteraciones cosa que hago con un bucle "for" recorriendo una tabla.
En dicho bucle llamo a un método en el que comprueblo una condición con una sentencia IF, en el caso de que no se cumpla dicha condicion no se hace nada, en caso contrario copio un rango de una hoja en otra hoja. El caso es que cuando realizo tal copia tengo logicamente que abrir el fichero y volverlo a cerrar, el caso es que no me lo cierra y me deja Excel pillado teniendo que pulsar Control+Alt+Suprimir y vuelta la burra al trigo. Llevo 3 semanas con esta "full" y estoy un poco como os diria harto jajaj, os pongo el codigo fuente a ver si alguien ilumina este dia tan triste.... Un fuerte abrazo a todo@s ¡¡


Código:
Código:
 Hoja3.Range("CONT").Value = 1 'Inicializacion de Variable
'Bucle que os comentaba
For CONT = 1 To Hoja3.Range("TOTREV").Value
cargar_FITI_R (CONT)
Next

'Metodo cargar_fiti_R
Function cargar_FITI_R(CONT As Integer)
Dim forigen As String

On Error Resume Next
Hoja3.Range("TEMP").Value = Application.WorksheetFunction.Index _
(Workbooks("menunew.xls").Sheets("datos").Range("TABLA_REVISTAS"), CONT, 3)
If Hoja3.Range("TEMP").Value = Hoja3.Range("EMPRESA") Then
Hoja3.Range("REVISTA") = Application.WorksheetFunction.Index _
(Workbooks("menunew.xls").Sheets("datos").Range("TABLA_REVISTAS"), CONT, 2)
forigen = Hoja3.Range("fichero_fiti_R").Value

'Workbooks.Open Filename:=forigen, Updatelinks:=0, ReadOnly:=True
Workbooks.Open Filename:=forigen

Range("A1:N130").Select
Selection.Copy
Workbooks("ficacu.xls").Activate
Application.Goto reference:=ActiveWorkbook.Sheets("fichareal").Range("zonaux_R")
Selection.PasteSpecial Paste:=xlValues, Operation:=xlAdd, SkipBlanks:= _
False, Transpose:=False
Hoja2.Range("a1").Activate
Hoja2.Range("a1").Select
Selection.Copy
forigen = Right(forigen, 12)
'Workbooks(forigen).Close False
Workbooks(forigen).Close True

End If
Muchas Gracias de antemano y que tengais un buen día.
  #2 (permalink)  
Antiguo 24/02/2009, 18:57
 
Fecha de Ingreso: febrero-2009
Ubicación: Villa Ocampo - Santa Fe
Mensajes: 100
Antigüedad: 15 años, 2 meses
Puntos: 0
Respuesta: AYUDA EN Error Codigo Visual Basic

no se si es la solución pero fijate la extención del Excel 2003 y la 2007 no son Iguales
intenta reemplazar la extención en el código.....ejemplo Libro.Xls es la de excel 2003 la del 2007 no recuerdo cual es pero jitate en la propiedades del libro creado espero te sea útil saludos....cuentame como te fue
  #3 (permalink)  
Antiguo 24/02/2009, 21:25
Avatar de gepd  
Fecha de Ingreso: diciembre-2007
Mensajes: 142
Antigüedad: 16 años, 4 meses
Puntos: 6
Respuesta: AYUDA EN Error Codigo Visual Basic

la extensión para 2007 es .xlsx

esperamos respuesta...
  #4 (permalink)  
Antiguo 25/02/2009, 04:05
 
Fecha de Ingreso: agosto-2007
Mensajes: 248
Antigüedad: 16 años, 8 meses
Puntos: 1
De acuerdo Respuesta: AYUDA EN Error Codigo Visual Basic

Ya se a lo que os referis, pero estoy trabajando con un proyecto que funcionaba en Excel 2000 y estamos migrando en MODO COMPATIBILIDAD con Excel 2007, por eso es que no es necesario cambiar las extensiones. El problema es que se queda excel como colgado pero no porque se quede en un bucle infinito, el código se ejecuta enteramente pero es como si por detrás la consolo de Visual Basic se montara encima de Excel. Es algo cuanto menos curioso.

Espero que me sigais aportando ideas.

Muchas Gracias.
  #5 (permalink)  
Antiguo 25/02/2009, 08:39
Avatar de gepd  
Fecha de Ingreso: diciembre-2007
Mensajes: 142
Antigüedad: 16 años, 4 meses
Puntos: 6
Respuesta: AYUDA EN Error Codigo Visual Basic

Lo que se me ocurre es que compruebes si el archivo realmetne se cierra
con algo como Workbooks(forigen).state no se realmente cual es la pripiedad para saber el estado del archivo

con msgbox antes y después de hacer Workbooks(forigen).close
  #6 (permalink)  
Antiguo 25/02/2009, 09:06
Colaborador
 
Fecha de Ingreso: enero-2008
Ubicación: Unas veces aquí, otras veces allí
Mensajes: 1.482
Antigüedad: 16 años, 3 meses
Puntos: 37
Respuesta: AYUDA EN Error Codigo Visual Basic

Y ya probaste cerrando el objeto y liberarlo de memoria?

ObjetoExcel.Quit
Set ObjetoExcel = Nothing



  #7 (permalink)  
Antiguo 27/02/2009, 04:15
 
Fecha de Ingreso: agosto-2007
Mensajes: 248
Antigüedad: 16 años, 8 meses
Puntos: 1
De acuerdo Respuesta: AYUDA EN Error Codigo Visual Basic

Lo que comentas tiene buena pinta:

ObjetoExcel.Quit
Set ObjetoExcel = Nothing

pero no se como seria la sentencia que tendria que aplicar exactamente y a que objeto, supongo que el objeto sería el fichero el cual no se consigue cerrar.


BUCLE DONDE LLAMO AL METODO PROBLEMATICO

For CONT = 1 To Hoja3.Range("TOTREV").Value
cargar_FITI_R (CONT)
process = process + 1
PCDONE = process / barra
Call UpdateProgress(PCDONE)
Next

================================================== =====
================================================== =====
================================================== =====


Function cargar_FITI(CONT As Integer)
Dim forigen As String
On Error Resume Next

Hoja3.Range("TEMP").Value = Application.WorksheetFunction.Index _
(Workbooks("menunew.xls").Sheets("datos").Range("T ABLA_REVISTAS"), CONT, 3)

If Hoja3.Range("TEMP").Value = Hoja3.Range("EMPRESA") Then

Hoja3.Range("REVISTA") = Application.WorksheetFunction.Index _
(Workbooks("menunew.xls").Sheets("datos").Range("T ABLA_REVISTAS"), CONT, 2)

forigen = Hoja3.Range("fichero_fiti").Value
Workbooks.Open Filename:=forigen
Range("A1:N130").Select
Selection.Copy
Workbooks("ficacu.xls").Activate
Application.Goto reference:=ActiveWorkbook.Sheets("ficha").Range("z onaux")
Selection.PasteSpecial Paste:=xlValues, Operation:=xlAdd, SkipBlanks:= _
False, Transpose:=False
Hoja1.Range("a1").Activate
Hoja1.Range("a1").Select
Selection.Copy
forigen = Right(forigen, 12)
Workbooks(forigen).Close False
End If

End Function

Muchas Gracias de antemano por vuestra colaboración.-
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:30.