Visual Basic - Problemas para llamar excel desde VB

Life is soft - evento anual de software empresarial
 
Vista:
sin imagen de perfil

Problemas para llamar excel desde VB

Publicado por Fabio (12 intervenciones) el 26/06/2022 06:25:20
Hola:
Estoy modificando un viejo programa cuyo código hice en VB6 hace mucho tiempo. Ahora estoy haciendo que el código llame a una hoja Excel y llene algunas celdas y deje abierto el cuaderno para modificaciones e impresión.
Esta modificación funciona bien en una pc que tiene instalado un ofiice 2007 pero en dos máquinas que tienen office 2016 se abre y cierra inmediatamente el Excel (apenas se ve un segundo) y ni siquiera tira error el programa.
Ya probé sacando la protección de edición del cuaderno y sigue igual. El office esta activado.
¿cual puede ser el problema y donde puedo buscar la solución?...¡gracias!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de gilman
Val: 594
Bronce
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Problemas para llamar excel desde VB

Publicado por gilman (359 intervenciones) el 26/06/2022 08:36:37
Sin el código que usas para abrir el Excell, difícilmente podemos ayudarte
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Problemas para llamar excel desde VB

Publicado por Fabio (12 intervenciones) el 10/07/2022 02:08:51
¡gracias por leer y responder mi mensaje!. El código primero hace cerrar EXCEL si se esta ejecutando y luego abre una planilla llamada PLANIDIARIA a la que carga en ciertas celdas los caption de unos controles y los campos de una variable definida como array de registro. Repito que el código funciona bien en una máquina con WINDOWS 10 y office 2007 pero en otra que tiene office 2016 la planilla se muestra e instantáneamente se cierra.
Falta una parte del código donde se definen las variables y se carga el vector de registros.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
'de acá en adelante es para que abra Excel de planilla Diaria
Err.Clear   ' Borra el objeto Err si se produjo antes un error.
'puntero va indicando el índice del vector de registros
' Prueba para ver si hay una copia de Microsoft Excel ejecutándose.
    On Error Resume Next    ' Difiere la interceptación de errores.
' La llamada a la función Getobject sin el primer argumento devuelve una
' referencia a una instancia de la aplicación. Si no se está ejecutando
' se produce un error.
    Set MiXl = GetObject(, "Excel.Application")
    If Err.Number = 0 Then alerta = MsgBox("Cierre primero todos los cuadernos de Excel", vbOKOnly + vbInformation, "Excel en ejecución")
    If Err.Number = 0 Then Exit Sub
 
'Establece la variable de objeto para hacer referencia al archivo que desea ver.
    Set MiXl = GetObject("c:\MuestrasRA3\PlaniDiaria.XLSX")
 
' Muestra Microsoft Excel mediante su propiedad Application. Después
' muestra la ventana real que contiene el archivo mediante
' la colección Windows de la referencia de objeto MiXL.
    MiXl.Application.Visible = True
 
MiXl.Parent.Windows(1).Visible = True
 
MiXl.Application.cells(puntero + 5, 3).Formula = lblDía.Caption
MiXl.Application.cells(puntero + 6, 3).Formula = lblFecha.Caption
MiXl.Application.cells(puntero + 5, 6).Formula = LblPeríodo.Caption
MiXl.Application.cells(puntero + 5, 8).Formula = List1.List(0)
MiXl.Application.cells(puntero + 6, 8).Formula = List1.List(1)
MiXl.Application.cells(puntero + 7, 8).Formula = List1.List(2)
 
For cont = 0 To índice
MiXl.Application.cells(puntero + 10, 2).Formula = movimientos(puntero).Número
 
MiXl.Application.cells(puntero + 10, 5).Formula = movimientos(puntero).Material
MiXl.Application.cells(puntero + 10, 3).Formula = Left(movimientos(puntero).Posición, 2)
MiXl.Application.cells(puntero + 10, 4).Formula = Mid(movimientos(puntero).Posición, 3)
If movimientos(puntero).Número <> "" Then MiXl.Application.cells(puntero + 10, 7).Formula = movimientos(puntero).Hora
If movimientos(puntero).Entra = True Then MiXl.Application.cells(puntero + 10, 6).Formula = "ENTRA"
If movimientos(puntero).Entra = False And movimientos(puntero).Número <> "" Then MiXl.Application.cells(puntero + 10, 6).Formula = "SALE"
puntero = puntero + 1
Next cont
Set MiXl = Nothing
End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de gilman
Val: 594
Bronce
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Problemas para llamar excel desde VB

Publicado por gilman (359 intervenciones) el 10/07/2022 08:34:51
La sentencia:
1
Set MiXl = GetObject("c:\MuestrasRA3\PlaniDiaria.XLSX")
Es incorrecta, sustitúyela por:
1
2
3
4
    'Restablecer el control de errores
    On Error GoTo 0
    Set MiXl = CreateObject("Excel.Application")
    MiXl.Workbooks.Open "c:\MuestrasRA3\PlaniDiaria.XLSX"
Verás que además reestablezco el control de errores antes de ejecutarla, será lo lógico.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Problemas para llamar excel desde VB

Publicado por Fabio (12 intervenciones) el 01/08/2022 05:29:28
¡gracias por todos los consejos!
Arreglé el problema modificando el código y aparte borré la parte que detectaba si ya estaba abierto excel. Este es el código que si me funcionó haciendo la referencia de la librería correspondiente de Excel y declarando ApXl como Excel.Aplication
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
'a continuación Presenta Excel de planilla Diaria
'Establece la variable de objeto para hacer referencia al archivo que desea ver.
    Set ApXl = CreateObject("Excel.Application")
 
    ApXl.Visible = True
 
    Set Libro = ApXl.Workbooks.Open("c:\MuestrasRA3\PlaniDiaria.XLSX")
 
    Set MiXl = Libro.Sheets(1)
 
MiXl.Cells(puntero + 5, 3).Formula = lblDía.Caption
MiXl.Cells(puntero + 6, 3).Formula = LblFecha.Caption
MiXl.Cells(puntero + 5, 6).Formula = LblPeríodo.Caption
MiXl.Cells(puntero + 5, 8).Formula = List1.List(0)
MiXl.Cells(puntero + 6, 8).Formula = List1.List(1)
MiXl.Cells(puntero + 7, 8).Formula = List1.List(2)
MiXl.Cells(puntero + 29, 2).Formula = Label6.Caption
 
 
For cont = 0 To índice
MiXl.Cells(puntero + 10, 2).Formula = movimientos(puntero).Número
 
MiXl.Cells(puntero + 10, 5).Formula = movimientos(puntero).Material
MiXl.Cells(puntero + 10, 3).Formula = Left(movimientos(puntero).Posición, 2)
MiXl.Cells(puntero + 10, 4).Formula = Mid(movimientos(puntero).Posición, 3)
If movimientos(puntero).Número <> "" Then MiXl.Cells(puntero + 10, 7).Formula = movimientos(puntero).Hora
If movimientos(puntero).Entra = True Then MiXl.Cells(puntero + 10, 6).Formula = "ENTRA"
If movimientos(puntero).Entra = False And movimientos(puntero).Número <> "" Then MiXl.Cells(puntero + 10, 6).Formula = "SALE"
puntero = puntero + 1
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de RAUL
Val: 2
Ha aumentado su posición en 97 puestos en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Problemas para llamar excel desde VB

Publicado por RAUL (443 intervenciones) el 28/06/2022 19:24:39
Aparte de los detalles del código como indicaron también debes considerar el sistema operativo en el cual esta corriendo la aplicación dado que en versiones mas actuales se han incrementado las políticas de seguridad, tu problema puede deberse a configuración de permisos de lectura y escritura en la carpeta donde se almacena el archivo Excel que estas llamando.
Verifícalo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Problemas para llamar excel desde VB

Publicado por Fabio (12 intervenciones) el 10/07/2022 02:13:06
¡gracias por leer y responder mi mensaje!.

Si te referías a habilitar los permisos de edición a la hoja Excel que va a abrir ya lo hice y sigue igual.

El código primero hace cerrar EXCEL si se esta ejecutando y luego abre una planilla llamada PLANIDIARIA a la que carga en ciertas celdas los caption de unos controles y los campos de una variable definida como array de registro. Repito que el código funciona bien en una máquina con WINDOWS 10 y office 2007 pero en otra que tiene office 2016 la planilla se muestra e instantáneamente se cierra.
Falta una parte del código donde se definen las variables y se carga el vector de registros.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
'de acá en adelante es para que abra Excel de planilla Diaria
Err.Clear   ' Borra el objeto Err si se produjo antes un error.
'puntero va indicando el índice del vector de registros
' Prueba para ver si hay una copia de Microsoft Excel ejecutándose.
    On Error Resume Next    ' Difiere la interceptación de errores.
' La llamada a la función Getobject sin el primer argumento devuelve una
' referencia a una instancia de la aplicación. Si no se está ejecutando
' se produce un error.
    Set MiXl = GetObject(, "Excel.Application")
    If Err.Number = 0 Then alerta = MsgBox("Cierre primero todos los cuadernos de Excel", vbOKOnly + vbInformation, "Excel en ejecución")
    If Err.Number = 0 Then Exit Sub
 
'Establece la variable de objeto para hacer referencia al archivo que desea ver.
    Set MiXl = GetObject("c:\MuestrasRA3\PlaniDiaria.XLSX")
 
' Muestra Microsoft Excel mediante su propiedad Application. Después
' muestra la ventana real que contiene el archivo mediante
' la colección Windows de la referencia de objeto MiXL.
    MiXl.Application.Visible = True
 
MiXl.Parent.Windows(1).Visible = True
 
MiXl.Application.cells(puntero + 5, 3).Formula = lblDía.Caption
MiXl.Application.cells(puntero + 6, 3).Formula = lblFecha.Caption
MiXl.Application.cells(puntero + 5, 6).Formula = LblPeríodo.Caption
MiXl.Application.cells(puntero + 5, 8).Formula = List1.List(0)
MiXl.Application.cells(puntero + 6, 8).Formula = List1.List(1)
MiXl.Application.cells(puntero + 7, 8).Formula = List1.List(2)
 
For cont = 0 To índice
MiXl.Application.cells(puntero + 10, 2).Formula = movimientos(puntero).Número
 
MiXl.Application.cells(puntero + 10, 5).Formula = movimientos(puntero).Material
MiXl.Application.cells(puntero + 10, 3).Formula = Left(movimientos(puntero).Posición, 2)
MiXl.Application.cells(puntero + 10, 4).Formula = Mid(movimientos(puntero).Posición, 3)
If movimientos(puntero).Número <> "" Then MiXl.Application.cells(puntero + 10, 7).Formula = movimientos(puntero).Hora
If movimientos(puntero).Entra = True Then MiXl.Application.cells(puntero + 10, 6).Formula = "ENTRA"
If movimientos(puntero).Entra = False And movimientos(puntero).Número <> "" Then MiXl.Application.cells(puntero + 10, 6).Formula = "SALE"
puntero = puntero + 1
Next cont
Set MiXl = Nothing
End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de RAUL
Val: 2
Ha aumentado su posición en 97 puestos en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Problemas para llamar excel desde VB

Publicado por RAUL (443 intervenciones) el 13/07/2022 04:07:23
Verifica la configuración regional de los equipos que si funciona la aplicación con el del los que tienes el inconveniente deberían ser similares tal vez es un detalle que si es representativo en función de tu programación.

otro detalle es como lo estas instalado manualmente o tienes creado un instalador que registra todas las librerías relacionadas a tu aplicación.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Problemas para llamar excel desde VB

Publicado por Fabio (12 intervenciones) el 01/08/2022 05:29:51
¡gracias por todos los consejos!
Arreglé el problema modificando el código y aparte borré la parte que detectaba si ya estaba abierto excel. Este es el código que si me funcionó haciendo la referencia de la librería correspondiente de Excel y declarando ApXl como Excel.Aplication
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
'a continuación Presenta Excel de planilla Diaria
'Establece la variable de objeto para hacer referencia al archivo que desea ver.
    Set ApXl = CreateObject("Excel.Application")
 
    ApXl.Visible = True
 
    Set Libro = ApXl.Workbooks.Open("c:\MuestrasRA3\PlaniDiaria.XLSX")
 
    Set MiXl = Libro.Sheets(1)
 
MiXl.Cells(puntero + 5, 3).Formula = lblDía.Caption
MiXl.Cells(puntero + 6, 3).Formula = LblFecha.Caption
MiXl.Cells(puntero + 5, 6).Formula = LblPeríodo.Caption
MiXl.Cells(puntero + 5, 8).Formula = List1.List(0)
MiXl.Cells(puntero + 6, 8).Formula = List1.List(1)
MiXl.Cells(puntero + 7, 8).Formula = List1.List(2)
MiXl.Cells(puntero + 29, 2).Formula = Label6.Caption
 
 
For cont = 0 To índice
MiXl.Cells(puntero + 10, 2).Formula = movimientos(puntero).Número
 
MiXl.Cells(puntero + 10, 5).Formula = movimientos(puntero).Material
MiXl.Cells(puntero + 10, 3).Formula = Left(movimientos(puntero).Posición, 2)
MiXl.Cells(puntero + 10, 4).Formula = Mid(movimientos(puntero).Posición, 3)
If movimientos(puntero).Número <> "" Then MiXl.Cells(puntero + 10, 7).Formula = movimientos(puntero).Hora
If movimientos(puntero).Entra = True Then MiXl.Cells(puntero + 10, 6).Formula = "ENTRA"
If movimientos(puntero).Entra = False And movimientos(puntero).Número <> "" Then MiXl.Cells(puntero + 10, 6).Formula = "SALE"
puntero = puntero + 1
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar