Shell Problem

G

Gary''s Student

I am having trouble getting Paint started:

Sub paint1()
Dim ReturnValue, i
ReturnValue = Shell("C:\WINDOWS\system32\mspaint.exe", 1)
AppActivate ReturnValue
End Sub

Raises a run time error 5

Sub paint2()
Dim ReturnValue, i
ReturnValue = Shell("C:\WINDOWS\system32\mspaint.exe", 1)
MsgBox (ReturnValue)
AppActivate ReturnValue
End Sub

Works just fine. Why do I need the MsgBox() before the AppActivate??
 
J

John Bundy

I've never totally understood the why's, and the first time i worked with it
i tried it your way, but if you just shell without the returnvalue= you get
an error, take off the paren and it all works beautifully
Shell "C:\WINDOWS\system32\mspaint.exe", 1

that is the only line you need in the whole thing.
 
B

Bob Phillips

Why use AppActivate

Sub paint1()
Dim ReturnValue
ReturnValue = Shell("C:\WINDOWS\system32\mspaint.exe", 1)
End Sub


--
---
HTH

Bob

(there's no email, no snail mail, but somewhere should be gmail in my addy)
 
G

Gary''s Student

Thanks for your response. Its the AppActivate that is failing. It need it
to make Paint the active application. If I omit the AppActivate, any
subsequent commands I send end up going to Excel rather than Paint.

I need them to go to Paint


b.t.w. I don't have this problem running Word from Excel.
 
G

Gary''s Student

I use AppActivate to make Paint the active window. Without it my SendKeys
end up going to Excel instead of Paint. For example:

Sub paintum()
Dim ReturnValue, i As Integer
Range("A1:D1").CopyPicture Appearance:=xlScreen, Format:=xlPicture
ReturnValue = Shell("C:\WINDOWS\system32\mspaint.exe", 1)

MsgBox (ReturnValue)

AppActivate ReturnValue
SendKeys "^v", True

End Sub

Works just fine...The picture is copied to Paint...After I acknowledge the
MsgBox.
If I omit the MsgBox, the Macro fails
If I omit both the MsgBox and the AppActivate, the macro pastes the picture
back onto the spreadsheeet!!

I would rather not have to acknowledge a MsgBox just to get paste to work.
 
J

John Bundy

I see where you get those examples in the help but they are wrong, they error
if you run them (as you know), just give the program focus with the ,1 at the
end of the shell script
 
J

John Bundy

Personally, i think the code runs too fast for the shell to work, if you run
this
Dim ReturnValue, i As Integer
Range("A1:D1").CopyPicture Appearance:=xlScreen, Format:=xlPicture

Shell "C:\WINDOWS\system32\mspaint.exe", 1

Application.SendKeys " ", True
Application.SendKeys "^v", True

from code, the space will be place in your code where your cursor is. If you
attach this to a button it works perfectly, take out the sendkeys " " and it
is again too fast.
 
G

Gary''s Student

First, thank you very much for you help. I do appreciate your interest &
willingness to help.

Here is a sample of what is happening:

Sub pai()
Dim ReturnValue, i As Integer
For i = 1 To 4
Cells(1, i).Value = i
Next
Range("A1:D1").CopyPicture Appearance:=xlScreen, Format:=xlPicture
Shell "C:\WINDOWS\system32\mspaint.exe", 1
SendKeys "^v", True
End Sub

1. the cells are filled
2. the picture is copied
3. Paint is activated
4. CNTRL-v is issued

Sadly the CNTRL-v is accepted by Excel rather than Paint.
 
S

Steve Yandl

Gary's Student,

I'm guessing that your goal is to save a picture of a range in some picture
format like gif. If that's the case, it might be more efficient to create a
chart on the active sheet with nothing in it, paste what you placed using
the range's copypicture method into the chart, export the chart as a gif to
wherever you want it and then delete the chart.

Steve
 
G

Gary''s Student

Bob, John, Steve:

Thank you all very much. I gave up on Paint, used CreateObject with
PowerPoint. Also able to avoid SendKeys that way.

Thanks again.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top