Autor Tema: Excel + Vb6 +autofill  (Leído 4842 veces)

0 Usuarios y 1 Visitante están viendo este tema.

czar9

  • Kilobyte
  • **
  • Mensajes: 64
  • Reputación: +4/-4
    • Ver Perfil
Excel + Vb6 +autofill
« 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

Bazooka

  • Terabyte
  • *****
  • Mensajes: 951
  • Reputación: +31/-20
  • El pibe Bazooka
    • Ver Perfil
    • Desof sistemas
Re:Excel + Vb6 +autofill
« Respuesta #1 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!
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

czar9

  • Kilobyte
  • **
  • Mensajes: 64
  • Reputación: +4/-4
    • Ver Perfil
Re:Excel + Vb6 +autofill
« Respuesta #2 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

LeandroA

  • Administrador
  • Petabyte
  • *****
  • Mensajes: 1128
  • Reputación: +151/-8
    • Ver Perfil
Re:Excel + Vb6 +autofill
« Respuesta #3 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

czar9

  • Kilobyte
  • **
  • Mensajes: 64
  • Reputación: +4/-4
    • Ver Perfil
Re:Excel + Vb6 +autofill
« Respuesta #4 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