Visual Basic Foro
Programación => Visual Basic 6 => Mensaje iniciado por: czar9 en Noviembre 26, 2011, 05:31:32 am
-
Hola, estoy haciendo un proyecto en el cual aplica poner una formula y copiarla sobre una rango de 1 fila por 20 columnas, para esto uso la función autofill,la situacion es que al usarla y al cerrar los objetos no me cierra la liga con excel y mi aplicacion , derivando que al ejecutar la función por segunda ves , me tira un error 1004, ya he probado con diferentes métodos y nada ¿Alguna idea, de alguien que ya haya usado el Autofill?
Gracias y saludos a la comunidad ;D
-
Hola debe ser que no descargas de memoria de forma correcta debería ser algo como esto:
' crea los objetos y agrega el libro y la hoja
Set o_Excel = New Excel.Application
Set o_Libro = o_Excel.Workbooks.Add
Set o_Hoja = o_Libro.Worksheets.Add
o_Excel.Visible = True
' Recorremos el FlexGrid por filas y columnas
'AQUI HACES LO QUE QUIERAS
' Para guardar el Libro
'o_Hoja.SaveAs Path_Libro
' Cierra el libro
'o_Libro.Close
'Cierra el excel
' o_Excel.Quit
' Elimina las instancias
If Not o_Excel Is Nothing Then
Set o_Excel = Nothing
End If
If Not o_Libro Is Nothing Then
Set o_Libro = Nothing
End If
If Not o_Hoja Is Nothing Then
Set o_Hoja = Nothing
End If
¡sUERTE!
-
Hola debe ser que no descargas de memoria de forma correcta debería ser algo como esto
Hola Leandro, ya intente cerrar como me comentas, pero sigo teniendo el mismo error, pongo mi codigo sintetizando un poco, quedaría asi
'en modo desarrollo uso declaraciones de tipo excel, ya cuando compilo uso objects
'declaro las variables para abrir y manejar la hoja de excel
Dim excelApp As Excel.Application
Dim excelBook As Excel.Workbook
Dim excelSheet As Excel.Worksheet
'inicializo las variables
Set excelApp = CreateObject("Excel.Application")
Set excelBook = excelApp.Workbooks.Add
Set excelSheet = excelBook.Worksheets(1)
'aquí vienen un montón de lineas de código que no me dan problemas ex.
excelSheet.Range("B12:O26").NumberFormat = "#,##0.00;[Red]-#,##0.00"
excelSheet.Range("A10:O26").AutoFormat
'Esta es la linea problemática que si bien podría ser omitida y meter en cada celda la formula correspondiente...
excelSheet.Range("B26").Formula = "=SUM(B12:B25)"
excelSheet.Range("B26").Select
excelApp.Selection.AutoFill Destination:=Range("B26:O26"), Type:=xlFillDefault
'asi es como cierro mis instancias
Set excelSheet = Nothing
Set excelBook = Nothing
Set excelApp = Nothing
LA situación es la siguiente, si yo ejecuto la función que tiene por código el anterior, lo ejecuta sin ningún problema. si lo ejecuto por segunda vez.. me sale un lindo error 1004,el cual según microsoft es por hacer un desbordamiento en el Autofill..
si quito del codigo todas las lineas que usan el auto fill el código se ejecuta y cerrando la vinculación de mi aplicación con excel sin problemas, cosa que no sucede cuando uso autofill, ya que puedo ver con el taskmgr a exel ejecutando en segundo plano.
imagino que no estoy haciendo el uso adecuado de la función autofill, alguna idea?
Saludos y gracias Leandro por tomarte un tiempo para contestar
-
Hola jeje yo no escrivi nada fue Bazooka, no tengo muy fresca la memoria de vba desde vb6 ahora pero prova poner
excelBook.Close False
otra cosa que vi usas createobject pero parace que tambien usas la referencia a la dll creo que con esto esta lo que buscas.
Option Explicit
Private Sub Form_Load()
'en modo desarrollo uso declaraciones de tipo excel, ya cuando compilo uso objects
'declaro las variables para abrir y manejar la hoja de excel
Dim excelApp As Object
Dim excelBook As Object
Dim excelSheet As Object
'inicializo las variables
Set excelApp = CreateObject("Excel.Application")
Set excelBook = excelApp.Workbooks.Add
Set excelSheet = excelBook.Worksheets(1)
'aquí vienen un montón de lineas de código que no me dan problemas ex.
excelSheet.Range("B12:O26").NumberFormat = "#,##0.00;[Red]-#,##0.00"
excelSheet.Range("A10:O26").AutoFormat
'Esta es la linea problemática que si bien podría ser omitida y meter en cada celda la formula correspondiente...
excelSheet.Range("B26").Formula = "=SUM(B12:B25)"
excelSheet.Range("B26").Select
excelApp.Selection.AutoFill Destination:=excelSheet.Range("B26:O26"), Type:=0
'excelApp.Visible = True
'MsgBox "Pausa"
excelBook.Close False
'asi es como cierro mis instancias
Set excelSheet = Nothing
Set excelBook = Nothing
Set excelApp = Nothing
End Sub
-
Hola jeje yo no escrivi nada fue Bazooka, no tengo muy fresca la memoria de vba desde vb6 ahora pero prova poner
Bueno para antecedente, ya no tengo el problema, gracias Leandro
la linea de codigo debiera ser asi excelApp.Selection.AutoFill Destination:=excelSheet.Range("B26:O26"), Type:=0
en el parámetro de destination debia ser explicito en el range es de mi objeto excelSheet.Range, de esta forma al hacer el set a nothing.. cerraba todos losobjetos y ya no hay problema, de lo contrario ocupa el range de la referencia excel.
gracias leandro, lo vi en tu codigo