VBAでExcelの再起動するには?(VBScript吐き出し)


しばふ  2012-02-01 00:53:20  No: 103212

いつも勉強させていただいております。以下、ご教授頂けるとたいへん助かります。
「Excelで、自分自身を終了後、すぐ再起動するVBAは可能でしょうか?」
【きっかけ】
Excel2003には、同一シートのコピーを連続で行うと30件くらいで限界になってしまう
仕様があると聞きました。
これを解決するには、Excelを再起動するしかないと思い、
ならば再起動が簡単にできるVBAを作ってしまおうと思いました。

以下、こちらの過去ログを参照して作成しました。
一応それらしい動きはするのですが、sendkeyでF4を使っているので
複数ブックがある際に、無関係のブックも閉じてしまう問題があります。

うまく、該当のブックのみ閉じるようなVBAは作れないでしょうか
参考サイトだけでもご紹介いただけると助かります。
よろしくお願いします。

以下試作コード

Sub SelfReset()
mypath = ThisWorkbook.Path & "\" & ThisWorkbook.Name
'終了行
l1 = "Set ws = CreateObject(""WScript.Shell"")"
l2 = "Set p = ws.Exec(""Excel.exe"")"
l3 = "ws.AppActivate (p.ProcessID)"
l4 = "WScript.Sleep 1000"
l5 = "ws.SendKeys ""%{F4}"""
l6 = "WScript.Sleep 1000"
'再起動行
l7 = "ws.Run ""rundll32.exe url.dll , FileProtocolHandler " & mypath & """, vbNormalFocus, False"
'VBS出力
n = 1
Open "C:\hoge.vbs" For Output As #1
Print #1, l1
Print #1, l2
Print #1, l3
Print #1, l4
Print #1, l5
Print #1, l6
Print #1, l7
Close #1
'VBS実行
Set objWShell = CreateObject("WScript.Shell")
objWShell.Run "C:\hoge.vbs", 1, 0
End Sub


しばふ  2012-02-01 01:26:24  No: 103213

すみません。WSHについての理解が浅く、↑のコードは正しく動きませんでした。
上記コードを修正しました。

Sub SelfReset()
mypath = ThisWorkbook.Path & "\" & ThisWorkbook.Name
l1 = "Set ws = CreateObject(""WScript.Shell"")"
l2 = "ws.AppActivate (""Excel"")"
l3 = "WScript.Sleep 100"
l4 = "ws.SendKeys ""^W"""
l5 = "WScript.Sleep 1000"
l6 = "ws.Run ""rundll32.exe url.dll , FileProtocolHandler " & mypath & """, vbNormalFocus, False"

Open "C:\reset.vbs" For Output As #1
Print #1, l1
Print #1, l2
Print #1, l3
Print #1, l4
Print #1, l5
Print #1, l6
Close #1
Set objWShell = CreateObject("WScript.Shell")
objWShell.Run "C:\reset.vbs", 1, 0
End Sub


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加