Problemas con MACRO

23/10/2007 - 23:20 por Marvin | Informe spam
Que tal grupo, no se que es lo que pasa, pero cuando mando llamar desde una
macro este proceso no se ejecuta, pero si la ejecuto al terminar todo si
funciona, de verdad que no se que sucede...

desde otro proceso solo tengo este codigo

sub inicio()
.
.
.
cerrar
end sub

********************************************************************************
Sub cerrar()
Dim wb As Workbook
If MsgBox("EN ESTE MOMENTO SE CERRARAN TODOS LOS ARCHIVOS DE EXCEL, DESEA
CONTINUAR??", vbYesNo + vbCritical, "CIERRE DE ARCHIVOS EXCEL") = vbYes Then
With ThisWorkbook
For Each wb In Workbooks
Select Case wb.Name
Case .Name 'ignorar
Case "RIH_Titulos_Ejemplo.xls", "pipes_RIH_" + Dia + "" + Mes +
"" + AnioComp + ".lst", "Master_Roaming.xls", "series_iusacell.xls" 'guardar
wb.Close False
Case Else 'no guardar
wb.Close True
End Select
Next wb
.Save
.Close
End With
Else
With ThisWorkbook
For Each wb In Workbooks
Select Case wb.Name
Case .Name 'ignorar
Case "RIH_Titulos_Ejemplo.xls", "pipes_RIH_" + Dia + "" + Mes +
"" + AnioComp + ".lst", "Master_Roaming.xls", "Master_Roaming_2.xls", "Switch
Origen.xls", "COMPAÑIAS_2.xls" 'guardar
wb.Close False

End Select
Next wb
.Save
.Close
End With
End If
Application.DisplayAlerts = True
Application.EnableEvents = True
End Sub

Espero me puedan ayudar.

GRCS

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
24/10/2007 - 04:55 | Informe spam
hola, Marvin !

... cuando mando llamar desde una macro este proceso no se ejecuta
pero si la ejecuto al terminar todo si funciona... no se que sucede...
desde otro proceso solo tengo este codigo (...)



prueba estableciendo puntos de interrupcion y/o ejecutando los procedimientos "paso a paso" (aunque)...

1) no son muy claras las intenciones del msgbox ya que sin importar la respuesta hay 3 libros que se guardan "igual"...
- "RIH_Titulos_Ejemplo.xls"
- "pipes_RIH_" + Dia + "" + Mes + "" + AnioComp + ".lst"
- "Master_Roaming.xls"

2) tampoco resulta muy claro cuando dices (en los comentarios del codigo)... -> ' guardar
ya la instruccion siguiente dice: -> wb.Close False
lo que es el equivalente de cerrar SIN "guardar" los cambios: wb.Close SaveChanges:=False

3) pasa similar (a la inversa) cuando tu comentario dice -> ' no guardar
la siguiente instruccion dice: -> wb.Close True

4) otro detalle que pudiera estar causando interferencias, es el "manejo" que haces de los eventos de la aplicacion:
-> Application.DisplayAlerts = True
-> Application.EnableEvents = True
OJO: estan hasta el final de codigo, y DESPUES de que ocurre un ThisWorkbook.Save y un .Close
con lo cual, las lineas que siguen al .Close YA NO SE EJECUTAN (el libro ya esta cerrado)
con lo cual, los eventos (que no se ve en donde hubieran sido deshabiltados)... -> seguiran DESHABILITADOS
y la aplicacion (al menos aparentemente)... seguira abierta (aunque sin libros a la vista) -???-

5) (comentario aparte) no me parece "correcto" obligar al cierre de todo libro abierto en la sesion...
-> sin el consentimiento del usuario de si guarda o no los cambios (tu codigo lo maneja "a su entera discrecion")

si cualquier duda (o informacion adicional)... comentas ?
saludos,
hector.

__ los codigos expuestos __
sub inicio()
.
.
.
cerrar
end sub
********************************************************************************
Sub cerrar()
Dim wb As Workbook
If MsgBox("EN ESTE MOMENTO SE CERRARAN TODOS LOS ARCHIVOS DE EXCEL, DESEA
CONTINUAR??", vbYesNo + vbCritical, "CIERRE DE ARCHIVOS EXCEL") = vbYes Then
With ThisWorkbook
For Each wb In Workbooks
Select Case wb.Name
Case .Name 'ignorar
Case "RIH_Titulos_Ejemplo.xls", "pipes_RIH_" + Dia + "" + Mes +
"" + AnioComp + ".lst", "Master_Roaming.xls", "series_iusacell.xls" 'guardar
wb.Close False
Case Else 'no guardar
wb.Close True
End Select
Next wb
.Save
.Close
End With
Else
With ThisWorkbook
For Each wb In Workbooks
Select Case wb.Name
Case .Name 'ignorar
Case "RIH_Titulos_Ejemplo.xls", "pipes_RIH_" + Dia + "" + Mes +
"" + AnioComp + ".lst", "Master_Roaming.xls", "Master_Roaming_2.xls", "Switch
Origen.xls", "COMPAà‘IAS_2.xls" 'guardar
wb.Close False

End Select
Next wb
.Save
.Close
End With
End If
Application.DisplayAlerts = True
Application.EnableEvents = True
End Sub
Respuesta Responder a este mensaje
#2 Marvin
06/11/2007 - 00:28 | Informe spam
El punto es de que llevo más de 2 años trabajando con este código y hasta
ahora se presenta este problema??.. No es EXTRAÑO?

El objetivo de este procedimiento es cerrar libros de los cuales solo tomo
algunos datos y de los cuales no necesito guardar cambios. y otros libros que
si el usuario lo desea dejar abiertos. Es por eso que el usuario elige cerrar
todos los libros de abiertos se lo advierta con msgbox, además de que antes
de cerrarse pregunte si desea guardar aquellos no guardados. Me explique?

Como quedaría mi código desde tu punto de vista considerando que quiero
cerrar todos los libros abiertos, considerando avisar previamente al usuario.

"Héctor Miguel" wrote:

hola, Marvin !

> ... cuando mando llamar desde una macro este proceso no se ejecuta
> pero si la ejecuto al terminar todo si funciona... no se que sucede...
> desde otro proceso solo tengo este codigo (...)

prueba estableciendo puntos de interrupcion y/o ejecutando los procedimientos "paso a paso" (aunque)...

1) no son muy claras las intenciones del msgbox ya que sin importar la respuesta hay 3 libros que se guardan "igual"...
- "RIH_Titulos_Ejemplo.xls"
- "pipes_RIH_" + Dia + "" + Mes + "" + AnioComp + ".lst"
- "Master_Roaming.xls"

2) tampoco resulta muy claro cuando dices (en los comentarios del codigo)... -> ' guardar
ya la instruccion siguiente dice: -> wb.Close False
lo que es el equivalente de cerrar SIN "guardar" los cambios: wb.Close SaveChanges:=False

3) pasa similar (a la inversa) cuando tu comentario dice -> ' no guardar
la siguiente instruccion dice: -> wb.Close True

4) otro detalle que pudiera estar causando interferencias, es el "manejo" que haces de los eventos de la aplicacion:
-> Application.DisplayAlerts = True
-> Application.EnableEvents = True
OJO: estan hasta el final de codigo, y DESPUES de que ocurre un ThisWorkbook.Save y un .Close
con lo cual, las lineas que siguen al .Close YA NO SE EJECUTAN (el libro ya esta cerrado)
con lo cual, los eventos (que no se ve en donde hubieran sido deshabiltados)... -> seguiran DESHABILITADOS
y la aplicacion (al menos aparentemente)... seguira abierta (aunque sin libros a la vista) -???-

5) (comentario aparte) no me parece "correcto" obligar al cierre de todo libro abierto en la sesion...
-> sin el consentimiento del usuario de si guarda o no los cambios (tu codigo lo maneja "a su entera discrecion")

si cualquier duda (o informacion adicional)... comentas ?
saludos,
hector.

__ los codigos expuestos __
> sub inicio()
> .
> .
> .
> cerrar
> end sub
> ********************************************************************************
> Sub cerrar()
> Dim wb As Workbook
> If MsgBox("EN ESTE MOMENTO SE CERRARAN TODOS LOS ARCHIVOS DE EXCEL, DESEA
> CONTINUAR??", vbYesNo + vbCritical, "CIERRE DE ARCHIVOS EXCEL") = vbYes Then
> With ThisWorkbook
> For Each wb In Workbooks
> Select Case wb.Name
> Case .Name 'ignorar
> Case "RIH_Titulos_Ejemplo.xls", "pipes_RIH_" + Dia + "" + Mes +
> "" + AnioComp + ".lst", "Master_Roaming.xls", "series_iusacell.xls" 'guardar
> wb.Close False
> Case Else 'no guardar
> wb.Close True
> End Select
> Next wb
> .Save
> .Close
> End With
> Else
> With ThisWorkbook
> For Each wb In Workbooks
> Select Case wb.Name
> Case .Name 'ignorar
> Case "RIH_Titulos_Ejemplo.xls", "pipes_RIH_" + Dia + "" + Mes +
> "" + AnioComp + ".lst", "Master_Roaming.xls", "Master_Roaming_2.xls", "Switch
> Origen.xls", "COMPAà‘IAS_2.xls" 'guardar
> wb.Close False
>
> End Select
> Next wb
> .Save
> .Close
> End With
> End If
> Application.DisplayAlerts = True
> Application.EnableEvents = True
> End Sub



Respuesta Responder a este mensaje
#3 Héctor Miguel
06/11/2007 - 03:50 | Informe spam
hola, Marvin !

__ 1 __
El punto es de que llevo mas de 2 a#os trabajando con este codigo y hasta ahora se presenta este problema??.. No es EXTRA#O?


__ 2 __
El objetivo de este procedimiento es cerrar libros de los cuales solo tomo algunos datos y... no necesito guardar cambios.


__ 3 __
y otros libros que si el usuario lo desea dejar abiertos.
Es por eso que el usuario elige cerrar todos los libros de abiertos se lo advierta con msgbox
ademas de que antes de cerrarse pregunte si desea guardar aquellos no guardados. Me explique?


__ 4 __
Como quedaria mi codigo desde tu punto de vista considerando que quiero cerrar todos los libros abiertos
considerando avisar previamente al usuario.



1) tan extrano... como que si falla despues de tanto tiempo de no fallar, es mas seguro que probable que...
hay "algo" en el entorno donde se ejecuta el codigo que esta siendo "diferente" (que ?... -honestamente- no lo pude "ver") :(

2) en este caso, la alternativa mas sencilla es cerrar cada libro despues de tomar sus datos (SIN necesidad de avisos al usuario)
el mejor metodo, dependeria de si (todos) los libros que usas permanecen abiertos despues de tomar sus datos... (o no) -???-
ya que el uso (p.e.) de un Select Case wb.Name ... End Select solamente averigua si el nombre del wb coincide con cada Case
pero no te da la certeza de que alguno/cualquiera/todos de "esos" libros este/n abierto/s (aun) en la sesion -???-

3) si vas a permitir que el usuario decida si desea dejar abiertos otros libros que tenga en uso en la sesion...
para que "incordiarlo" tratando de cerrar esos otros libros y perguntandole por cada uno si desea guardar los cambios ????????

4) antes de ofrecerte algu punto de vista (mio en particular), me gustaria entender "la logica" del codigo que expusiste (p.e.)
existen 3 grupos de libros (no es claro si todos estan abiertos en la sesion):
a) - "RIH_Titulos_Ejemplo.xls"
- "pipes_RIH_" + Dia + "" + Mes + "" + AnioComp + ".lst"
- "Master_Roaming.xls"
b) - "series_iusacell.xls"
c) - "Master_Roaming_2.xls"
- "Switch Origen.xls"
- "COMPAÑIAS_2.xls"

4.1) despues del msgbox donde preguntas al usuario si desea continuar:
a) los libros del primer grupo (inciso a anterior) se cierran sin cambios independientemente de si responde vbYes o vbNo
b) si responde vbYes, se cierra el primer grupo y tambien el libro del inciso b anterior
si responde vbNo, este libro ("series_iusacell.xls") SE QUEDA ABIERTO
c) si responde vbNo, se cierra el primer grupo y tambien los libros del tercer grupo (inciso c anterior)
si responde vbYes, este grupo de libros SE QUEDA ABIERTO

4.1) cual es la logica o el sentido de cerrar unos al vbYes y otros al vbNo ???
estan todos estos libros abiertos en la sesion ??? (o es probable que algunos ya los hubiera cerrado) -?-

5) este punto (del mensaje anterior) como que me sigue "haciendo ruido" -?-
4) otro detalle que pudiera estar causando interferencias, es el "manejo" que haces de los eventos de la aplicacion:
-> Application.DisplayAlerts = True
-> Application.EnableEvents = True
OJO: estan hasta el final de codigo, y DESPUES de que ocurre un ThisWorkbook.Save y un .Close
con lo cual, las lineas que siguen al .Close YA NO SE EJECUTAN (el libro ya esta cerrado)
con lo cual, los eventos (que no se ve en donde hubieran sido deshabiltados)... -> seguiran DESHABILITADOS
y la aplicacion (al menos aparentemente)... seguira abierta (aunque sin libros a la vista) -???-





insisto... disculpa que no te ofrezca (aun) algun punto de vista "personal"
(me gusta tener cubiertas todas las eventualidades que se -me- puedan ocurrir) :))

saludos,
hector.
Respuesta Responder a este mensaje
#4 Marvin
06/11/2007 - 18:10 | Informe spam
Me parece bastante lógico tu análisis. Trataré de simplificar mi respuesta.

1.- Durante el proceso voy creando varios libros (libros D), todos se
originan de un libro principal (libro C), para complementar cada uno de estos
libros utilizo otros ya existentes (libros A).

2.- Con base en la información de los libros D, lleno un histórico diario al
final del proceso, llamemoslo (libro B).

3.- Cuando esto sucede, ya no necesito los libros A,C y D, pero si el
usuario desea analizar la información procesada, es necesario dejar abiertos
los libros D y B, de lo contrario sólo dejar abierto el libro B.

Me explique?


"Héctor Miguel" wrote:

hola, Marvin !

__ 1 __
> El punto es de que llevo mas de 2 a#os trabajando con este codigo y hasta ahora se presenta este problema??.. No es EXTRA#O?
__ 2 __
> El objetivo de este procedimiento es cerrar libros de los cuales solo tomo algunos datos y... no necesito guardar cambios.
__ 3 __
> y otros libros que si el usuario lo desea dejar abiertos.
> Es por eso que el usuario elige cerrar todos los libros de abiertos se lo advierta con msgbox
> ademas de que antes de cerrarse pregunte si desea guardar aquellos no guardados. Me explique?
__ 4 __
> Como quedaria mi codigo desde tu punto de vista considerando que quiero cerrar todos los libros abiertos
> considerando avisar previamente al usuario.

1) tan extrano... como que si falla despues de tanto tiempo de no fallar, es mas seguro que probable que...
hay "algo" en el entorno donde se ejecuta el codigo que esta siendo "diferente" (que ?... -honestamente- no lo pude "ver") :(

2) en este caso, la alternativa mas sencilla es cerrar cada libro despues de tomar sus datos (SIN necesidad de avisos al usuario)
el mejor metodo, dependeria de si (todos) los libros que usas permanecen abiertos despues de tomar sus datos... (o no) -???-
ya que el uso (p.e.) de un Select Case wb.Name ... End Select solamente averigua si el nombre del wb coincide con cada Case
pero no te da la certeza de que alguno/cualquiera/todos de "esos" libros este/n abierto/s (aun) en la sesion -???-

3) si vas a permitir que el usuario decida si desea dejar abiertos otros libros que tenga en uso en la sesion...
para que "incordiarlo" tratando de cerrar esos otros libros y perguntandole por cada uno si desea guardar los cambios ????????

4) antes de ofrecerte algu punto de vista (mio en particular), me gustaria entender "la logica" del codigo que expusiste (p.e.)
existen 3 grupos de libros (no es claro si todos estan abiertos en la sesion):
a) - "RIH_Titulos_Ejemplo.xls"
- "pipes_RIH_" + Dia + "" + Mes + "" + AnioComp + ".lst"
- "Master_Roaming.xls"
b) - "series_iusacell.xls"
c) - "Master_Roaming_2.xls"
- "Switch Origen.xls"
- "COMPAÑIAS_2.xls"

4.1) despues del msgbox donde preguntas al usuario si desea continuar:
a) los libros del primer grupo (inciso a anterior) se cierran sin cambios independientemente de si responde vbYes o vbNo
b) si responde vbYes, se cierra el primer grupo y tambien el libro del inciso b anterior
si responde vbNo, este libro ("series_iusacell.xls") SE QUEDA ABIERTO
c) si responde vbNo, se cierra el primer grupo y tambien los libros del tercer grupo (inciso c anterior)
si responde vbYes, este grupo de libros SE QUEDA ABIERTO

4.1) cual es la logica o el sentido de cerrar unos al vbYes y otros al vbNo ???
estan todos estos libros abiertos en la sesion ??? (o es probable que algunos ya los hubiera cerrado) -?-

5) este punto (del mensaje anterior) como que me sigue "haciendo ruido" -?-
>> 4) otro detalle que pudiera estar causando interferencias, es el "manejo" que haces de los eventos de la aplicacion:
>> -> Application.DisplayAlerts = True
>> -> Application.EnableEvents = True
>> OJO: estan hasta el final de codigo, y DESPUES de que ocurre un ThisWorkbook.Save y un .Close
>> con lo cual, las lineas que siguen al .Close YA NO SE EJECUTAN (el libro ya esta cerrado)
>> con lo cual, los eventos (que no se ve en donde hubieran sido deshabiltados)... -> seguiran DESHABILITADOS
>> y la aplicacion (al menos aparentemente)... seguira abierta (aunque sin libros a la vista) -???-

insisto... disculpa que no te ofrezca (aun) algun punto de vista "personal"
(me gusta tener cubiertas todas las eventualidades que se -me- puedan ocurrir) :))

saludos,
hector.



Respuesta Responder a este mensaje
#5 Héctor Miguel
07/11/2007 - 05:24 | Informe spam
hola, Marvin !

1.- Durante el proceso voy creando varios libros (libros D), todos se originan de un libro principal (libro C)
para complementar cada uno de estos libros utilizo otros ya existentes (libros A).
2.- Con base en... los libros D, lleno un historico... al final del proceso, llamemoslo (libro B).
3.- Cuando esto sucede, ya no necesito los libros A, C y D, pero si el usuario desea analizar la informacion procesada
es necesario dejar abiertos los libros D y B, de lo contrario solo dejar abierto el libro B.
Me explique?



aunque este punto 3 no es (exactamente) lo que sucede en el codigo que originalmente expusiste
el grupo B solo queda abierto bajo la respuesta de vbNo por parte del usuario al MsgBox
aunque ahora ya no estoy seguro de cual grupo (nuevo) se corresponde a cual grupo (de los anteriores)

y asumiendo que (todos) los libros involucrados permanecen abiertos hasta el final del proceso -?-
es probable que en lugar de hacer ciclos por (todos) los libros abiertos en la sesion...
pudieras establecer matrices con los nombres de los libros de cada "grupo"
-> si seguimos entendiendo que existen 3 grupos de libros (ver punto 4 del mensaje anterior)

asi podrias hacer un ciclo exclusivamente por los libros que se cierran (independiente del vbYes o del vbNo)
preguntar si queda abierto el segundo o el tercer grupo... y cerrar (solo) lo que decida o (no) necesite el usuario
(sin necesidad de tocar y/o averiguar si el usuario tiene "otros" libros en uso y abiertos en esa sesion y -tratar de- cerrarselos)

aunque en realidad, estas ideas no nos llevan a conocer (si hubiera) cual es la causa de la falla que origino tu consulta -???-

si cualquier duda (o informacion adicional)... comentas ?
saludos,
hector.

__ el punto 4 del mensaje anterior __
4) antes de ofrecerte algu punto de vista (mio en particular), me gustaria entender "la logica" del codigo que expusiste (p.e.)
existen 3 grupos de libros (no es claro si todos estan abiertos en la sesion):
a) - "RIH_Titulos_Ejemplo.xls"
- "pipes_RIH_" + Dia + "" + Mes + "" + AnioComp + ".lst"
- "Master_Roaming.xls"
b) - "series_iusacell.xls"
c) - "Master_Roaming_2.xls"
- "Switch Origen.xls"
- "COMPAÑIAS_2.xls"

4.1) despues del msgbox donde preguntas al usuario si desea continuar:
a) los libros del primer grupo (inciso a anterior) se cierran sin cambios independientemente de si responde vbYes o vbNo
b) si responde vbYes, se cierra el primer grupo y tambien el libro del inciso b anterior
si responde vbNo, este libro ("series_iusacell.xls") SE QUEDA ABIERTO
c) si responde vbNo, se cierra el primer grupo y tambien los libros del tercer grupo (inciso c anterior)
si responde vbYes, este grupo de libros SE QUEDA ABIERTO

4.1) cual es la logica o el sentido de cerrar unos al vbYes y otros al vbNo ???
estan todos estos libros abiertos en la sesion ??? (o es probable que algunos ya los hubiera cerrado) -?-
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida