Problemas con un proceso de excel

Primero me presento pues soy nuevo en este foro.
He encontrado por la web un montón de temas que hacen referencia al tema planteado, pero ninguno logra solucionarme el problema.
El problema es el siguiente.
Abro un libro de excel, y según los datos de entrada, este va pasando de hoja en hoja en el libro hasta que se cumple la condición.
Una vez encontrada la condición, pido que se visualice el resultado mediante el uso de excel.Application.Visible = True, y luego al cerrar el excel con la X, este se cierra correctamente, es decir no queda abierto.
En cambio cuando se cumple la condición, pero no pido visualizar el resultado,(es decir no hago visible la hoja y la cierro con X) la hoja de excel que tiene el resultado, me queda abierta.
Es como si faltaría aplicar el comando Unloadme.
Agradezco los comentarios y transcribo el código. Saludos
Option Explicit
Private Sub Command1_Click()
Dim objexcel As excel.Application
Dim xlibro As excel.Workbook
Dim i As Integer
i = 0
Set objexcel = New excel.Application
Set xlibro = objexcel.Workbooks.Open _
("C:\Ejemplos Visual\Plegados\Dimensionamiento correa\plegados3.xls")
For i = 1 To 4
objexcel.Sheets(i).Select
'Luces de pandeo
objexcel.Range("f9") = Text1(0).Text
objexcel.Range("f10") = Text2(0).Text
objexcel.Range("f11") = Text3(0).Text
'Caracteristicas de la seccion
objexcel.Range("j6") = Text5(1).Text
objexcel.Range("j7") = Text6(1).Text
objexcel.Range("j8") = Text7(1).Text
If Val(Text4(0).Text) <= Val(objexcel.Range("m10")) Then
'Obtengo el esfuerzo
Label7.Caption = objexcel.Range("m10")
Label7.Caption = Format(Label7.Caption, "########.00")
'Calculo el espesor
Label6.Caption = objexcel.Range("j9")
Label6.Caption = Format(Label6.Caption, "########.0")
Exit Sub
Else
End If
Next
xlibro.Close
objexcel.Application.Quit
Set objexcel = Nothing
Set xlibro = Nothing
End Sub
Private Sub Command2_Click()
excel.Application.Visible = True
End Sub

2 respuestas

Respuesta
1
Pues creo que tu problema radica en el final de la sentencia if, terminas con exit sub, por lo cual no se procesan las lineas finales de cierre.
Si eliminas el exit sub, debería funcionarte, si lo que quieres es salir del bucle for, puedes utilizar el exit for. Te he modificado el código para que veas como quedaría.
Un saludo
Option Explicit
Private Sub Command1_Click()
Dim objexcel As Excel.Application
Dim xlibro As Excel.Workbook
Dim i As Integer
i = 0
Set objexcel = New Excel.Application
Set xlibro = objexcel.Workbooks.Open _
("C:\Ejemplos Visual\Plegados\Dimensionamiento correa\plegados3.xls")
For i = 1 To 4
objexcel.Sheets(i).Select
'Luces de pandeo
objexcel.Range("f9") = Text1(0).Text
objexcel.Range("f10") = Text2(0).Text
objexcel.Range("f11") = Text3(0).Text
'Caracteristicas de la seccion
objexcel.Range("j6") = Text5(1).Text
objexcel.Range("j7") = Text6(1).Text
objexcel.Range("j8") = Text7(1).Text
If Val(Text4(0).Text) <= Val(objexcel.Range("m10")) Then
'Obtengo el esfuerzo
Label7.Caption = objexcel.Range("m10")
Label7.Caption = Format(Label7.Caption, "########.00")
'Calculo el espesor
Label6.Caption = objexcel.Range("j9")
Label6.Caption = Format(Label6.Caption, "########.0")
'descomenta la siguiente linea si quieres salir del for
' Exit For
End If
Next
xlibro.Close
objexcel.Application.Quit
Set objexcel = Nothing
Set xlibro = Nothing
End Sub
Private Sub Command2_Click()
Excel.Application.Visible = True
End Sub
Experto, antes que nada gracias.
La respuesta me ha resultado muy útil, pues con este pequeño cambio he logrado que al no visualizar el excel con excel.Application.Visible = True, logro que el excel no quede abierto.
Pero ahora se me presentan 2 nuevos problemas y si conoces como solucionarlo agradecería vuestra ayuda.
El primero es que me queda residente en el administrador de archivos el proceso EXCEL.EXE y este me impide hacer una nueva corrida.
El segundo es que el comando exit for me origina que al salir del bucle me pregunte ahora si quiero guardar los cambios en el archivo *.xls. Cualquiera sea la respuesta, si luego quiero apretar el botón de visualizar el resultado con excel.Application. Visible = True, me abre el excel pero no me muestra el resultado, y creo yo porque se cierra con el paso anterior.
Espero haberme sabido explicar y agradezco tu tiempo y tu respuesta.
Saludos.
El proceso excel.exe, se queda abierto mientras no guardes los cambios.
Si quieres que el proceso se haga automáticamente inserta el siguiente código antes de intentar cerrar el objeto excel:
`Con estas lineas guardamos el archivo en formato excel con el nombre de la variable "ElNombreDelArchivo"
ActiveWorkbook.SaveAs Filename:= _
        ElNombreDelArchivo, FileFormat:=xlNormal _
        , Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _
        CreateBackup:=False
' Con esta linea cerramos la ventana de excel activa
ActiveWindow.Close
Si no quieres guardar los cambios utiliza la siguiente linea
ActiveWorkbook.Close Savechanges:=False
' o de forma abreviada
ActiveWorkbook.Close(False)
O si quieres puedes cerrarlo obviando los mensajes:
Application.DisplayAlerts = False
Windows(TuExcel).Close
Application.DisplayAlerts = True
Tu ayuda fue impresionante.
Si bien ahora debo depurar un montón de cosas, me has indicado las herramientas para poder seguir avanzando.
Creo que ahora, en vez de seguir preguntando, debo ponerme a trabajar hasta que se me queme otra vez la cabeza y no sepa como continuar.
Gracias, saludos
Respuesta

Tengo el siguiente problema con vb 6 y excel,

Tengo una aplicación en la cual mando un grid a excel con un formato definido, cuando corre la aplicación el excel despliega muy bien la información y el formato es como se diseño. Cuando corro la segunda vez el formato no se ejecuta como en la primera vez y aparte dentro del administrador de tarea existe una instacnia de excel activada.

Les coloco el código para ver si alguien me puede ayudar.

Set objExcel = CreateObject("Excel.Application")
Set objWorkbook = objExcel.Workbooks.Add

For I = 1 To MSHImprime.Rows - 1
MSHImprime.Row = I
For j = 1 To MSHImprime.Cols - 1
MSHImprime.Col = j
objWorkbook.ActiveSheet.Cells(I + 1, j + 1).Value = MSHImprime.Text
Next
Next
objExcel.Rows("1:6").Select
objExcel.Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove

objExcel.Range("a1:F51").Select
ActiveWindow.SmallScroll Down:=-27
With Selection.Font
.Name = "Arial"
.Size = 8
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ThemeColor = xlThemeColorLight1
.TintAndShade = 0
.ThemeFont = xlThemeFontNone
End With

objExcel.Columns("B:B").ColumnWidth = 18

'bordes
objExcel.Range("B8:D13").Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlInsideVertical)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlInsideHorizontal)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
objExcel.Range("B16:D20").Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlInsideVertical)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlInsideHorizontal)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
'cabeceras de color
objExcel.Range("B8:D8").Select
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 1216511
.TintAndShade = 0
.PatternTintAndShade = 0
End With
objExcel.Range("B16:D16").Select
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 1216511
.TintAndShade = 0
.PatternTintAndShade = 0
End With

objExcel.Visible = True

Set objWorkbook = Nothing
Set objExcel = Nothing
Set ActiveSheet = Nothing

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas