En este grupo En todos

Foro de Excel



Cerrar y Guardar Paint con VBA

luis
Ingenieria de sistemas universidad de ...
Escrito por Luis Merlano Rojas
el 20/06/2012

Estimados expertos,

Las siguientes instrucciones de vba permiten abrir Paint, copiar una imagen de una de las hojas del libro de excel y pegarla en Paint.

Pretendo poder guardar la imagen y cerrar Paint tambien desde codigo vba pero no lo logro

Requiero su ayuda para conocer las instrucciones necesarias para cerrar Microsoft Paint desde el codigo vba y antes de cerrar guardar dicha imagen.

acontinuacion el codigo:

Sub GuardarImagenes()
Dim img As Shape
On Error Resume Next
For Each img In ActiveSheet. Shapes
If img. Type = 13 Then
img. Copy
Shell "C:\WINDOWS\System32\mspaint. Exe", 1
Application. Wait Now + TimeValue("0:00:01")
SendKeys "^{end}{enter}^v"
SendKeys "^{end}{enter}^s" 'ESTA INSTRUCCION NO FUNCIONA
'AQUI DEBIERA IR LA INSTRUCCION PARA CERRAR
endif
Next
End Sub

Gracias por su soporte y ayuda

Adrian Colazo
Técnico operador en pc universidad nac...
Escrito por Adrian Colazo
el 20/06/2012

Hola, no siendo experto, te puedo decir que pruebes con:
SendKeys "%{F4}"

Servando Villalon
Licenciado en sistemas universidad del...
Escrito por Servando Villalon
el 20/06/2012

Lo que pude observar es que el código no funciona para múltiples imágenes y que no responde a la instrucción "cerrar la aplicación", pero sí a "guardar como" que si te sería muy útil.

If img. Type = 13 Then

img. Copy

Shell "C:\WINDOWS\System32\mspaint. Exe", 1

Application. Wait Now + TimeValue("0:00:01")

SendKeys "^v"

SendKeys "{F12}"

SendKeys "%{F4}" ' No responde al cierre de la aplicación

End If

Saludos

Adrian Colazo
Técnico operador en pc universidad nac...
Escrito por Adrian Colazo
el 20/06/2012

Hola Gente, esto puede ayudar, pero soy un Experto en APIs.
Private Declare Function PostMessage Lib "user32" _
Alias "PostMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function FindWindow Lib "user32" _
Alias "FindWindowA" (ByVal szClass$, ByVal szTitle$) As Long
Private Const WM_CLOSE = &H10

Sub Abre_y_Cierra()
Shell ("mspaint. Exe")
Application. Wait Now + TimeValue("0:00:05")
Dim hWnd, retval As Long
Dim WinTitle As String
WinTitle = "Dibujo - Paint" '<- Title of Window
hWnd = FindWindow(vbNullString, WinTitle)
retval = PostMessage(hWnd, WM_CLOSE, 0&, 0&)
MsgBox "MS Paint Cerrado", 64, ""
End Sub

Adrian Colazo
Técnico operador en pc universidad nac...
Escrito por Adrian Colazo
el 20/06/2012

FE DE ERRATAS: en donde dice:
esto puede ayudar, pero soy un Experto en APIs
Quise poner:
esto puede ayudar, pero NO soy un Experto en APIs

Luis Merlano Rojas
Ingenieria de sistemas universidad de ...
Escrito por Luis Merlano Rojas
el 20/06/2012

Antes que nada Gracias por sus respuestas y su interes de verdad que lo aprecio mucho; acontinuacion la experiencia:

Servando:

El "guardar como", si aparece pero unicamente al intentar cerrar el paint de manera "manual" que es lo que intentaba evitar.

Adrian:

Tu codigo abre el paint, luego deja en standby la ejecucion es decir "queda esperando respuesta del usuario" al ahacer click en la hoja de excel, sale el mensaje "paint cerrado" pero nunca se cierrra...

Nuevamente gracias por sus aportes, pero aun no lo logro....

podrian recomendarme algo mas?

saludos

Cacho Rodríguez
Ing. electrónica u.n.r.
Escrito por Cacho Rodríguez
el 22/06/2012

Hola! Luis (Servando y Adrián)

Se podría "esquivar" el problema planteado sin salir del Excel así:
____________________

Sub GuardarImagenes()
Dim img As Shape, i%

i = 11
With ActiveSheet.Shapes.AddChart. Chart

For Each img In ActiveSheet. Shapes
If img. Type = msoPicture Then
. ChartArea. Width = img. Width
. ChartArea. Height = img. Height
img. Copy
. Paste
. Export ThisWorkbook. Path & "\Imagen" & _
Format(i, "000") & Chr(46) & "gif", "gif"
. Shapes(1). Delete
i = 1 + i
End If
Next
. Parent. Delete

End With

End Sub
____________________

¿Te sirve la idea?...
Saludos, Cacho R.

Luis Merlano Rojas
Ingenieria de sistemas universidad de ...
Escrito por Luis Merlano Rojas
el 23/06/2012

Hola Cacho!

Siempre al pie del cañon!

Mira probé la solucion y genera el error 438

"el objeto no admite esta propiedad o metodo" y se genra el error en la linea:

With ActiveSheet.Shapes.AddChart. Chart

gracias por tu soporte y ayuda!

Cacho Rodríguez
Ing. electrónica u.n.r.
Escrito por Cacho Rodríguez
el 23/06/2012

Mmmmmm... Eso es porque debes estar utilizando Excel 2003 o anterior.

De ser así prueba con (ya que yo no he podido hacerlo) reemplazar:

ActiveSheet.Shapes.AddChart. Chart

por:

ActiveSheet.ChartObjects.Add(500, 10, 10, 10). Chart

¿Este otro método te funciona?...
Saludos, Cacho R.

Luis Merlano Rojas
Ingenieria de sistemas universidad de ...
Escrito por Luis Merlano Rojas
el 25/06/2012

Hola Cacho efectivamente trabajo con excel 2003, tu solucion funciona pero ahora otro error aparece en la linea:

. ChartArea. Width = img. Width

"No se puede asignar la propiedad Width de la clase ChartArea"

y creo que lo mismo ocurrira con la propiedad Height, incluida en la linea de codigo que le sigue a la anterior y que es:

. ChartArea. Height = img. Height

otra vez gracias! Por tu soporte y ayuda

saludos

LF

Cacho Rodríguez
Ing. electrónica u.n.r.
Escrito por Cacho Rodríguez
el 25/06/2012

Entonces, Luis: ¡Quítale ese molesto "ChartArea"!:

. Width = img. Width


y ve pensando en pasarte a la versión 2010 (jajajaja)...

Cacho Rodríguez
Ing. electrónica u.n.r.
Escrito por Cacho Rodríguez
el 04/07/2012

No habiendo devolución por la última sugerencia: ¡Cerramos el intercambio!.