Visual Basic Foro

Programación => Visual Basic 6 => Mensaje iniciado por: czar9 en Noviembre 26, 2011, 05:31:32 am

Título: Excel + Vb6 +autofill
Publicado 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
Título: Re:Excel + Vb6 +autofill
Publicado por: Bazooka en Noviembre 26, 2011, 10:05:56 am
Hola debe ser que no descargas de memoria de forma correcta debería ser algo como esto:



     
Código: [Seleccionar]
  ' 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!
Título: Re:Excel + Vb6 +autofill
Publicado por: czar9 en Noviembre 27, 2011, 03:55:41 am
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

Código: [Seleccionar]
'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
Título: Re:Excel + Vb6 +autofill
Publicado por: LeandroA en Noviembre 27, 2011, 03:39:33 pm
Hola jeje yo no escrivi nada fue Bazooka, no tengo muy fresca la memoria de vba desde vb6 ahora pero prova poner 

Código: [Seleccionar]
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.

Código: (Vb) [Seleccionar]
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
Título: Re:Excel + Vb6 +autofill
Publicado por: czar9 en Noviembre 28, 2011, 01:19:28 am
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