過去の桐井戸端BBS (桐ver.8)
19546 シェル実行コマンドで「表示=最小化」が上手くいかない TS 2003/03/21-14:12
桐V8spなし os:Me です。

早速ですが、シェルの実行設定の中で、
画面の表示サイズを設定できる、通常・最小化及び最大化の設定で、
最小化の設定にして実行したいのですが、最小化してタスクバーに入らず
標準の画面と同じように、デスクトップ画面上にエクセルが画面が
表示されてしまいます。

 ちなみに、最大化の設定にすると画面は正しく最大化されます。
 また、通常設定にするとデスクトップ上に通常の標準の大きさで画面表示されます。
なぜ最小化表示だけ、タスクバーに入るように最小化されないのかわかりません。
回避方法等ご存知の方がいらっしゃったら
ご教示いただければと思います。

(具体例)

シェル実行 "abc.xls",起動フォルダ = "C:\WINDOWS\SYSTEM\tmp\excelf",表示 = 最小化,&OK

19567 Re:シェル実行コマンドで表示=最小化が上手くいかない うにん 2003/03/22-13:52
記事番号19546へのコメント
コメントがつきませんね…

PDFを開いてみると、AcrobatReaderが起動していない状態では最小化・最大化とも
指示通りに開けますが、シェル実行コマンド実行時にすでに起動していると、
最小化・最大化とも元のウィンドウが復元してしまいます。

Windowsの仕様か、桐の手抜き(開いた後で最小化する手順をさぼっている)どっちかな?

19584 Re:シェル実行コマンドで表示=最小化が上手くいかない TS 2003/03/23-18:25
記事番号19567へのコメント
うにんさん コメントいただきまして有難うございます。

このような事象になっているのが、私だけなのかと・・ほぼあきらめかけていました。

うにんさんがやっても、

>>元のウィンドウが復元してしまいます。

とのこと。

私のシェル実行コマンドの記載方法が悪いのではなさそうで・・・ということがわかっただけでも、
嬉しいです。
もう少し、自分なりに調べてみます。

コメント有難うございました。
19594 Re:シェル実行コマンドで表示=最小化が上手くいかない 尾形 2003/03/24-08:12
記事番号19546へのコメント
>桐V8spなし
これはかなりマズイと思いますけど
念の為

19615 Re:シェル実行コマンドで表示=最小化が上手くいかない うにん 2003/03/25-14:14
記事番号19594へのコメント
>>桐V8spなし
>これはかなりマズイと思いますけど

確かにそうですね。ちなみにこちらのテストはV9です。

http://www.runan.net/program/tips/API/shell32_ShellExecute.shtml
によると、桐のせいではないみたいですね。そういうものらしい。。。

19616 Re:シェル実行コマンドで表示=最小化が上手くいかない hidetake 2003/03/25-16:29
記事番号19615へのコメント
>http://www.runan.net/program/tips/API/shell32_ShellExecute.shtml
>によると、桐のせいではないみたいですね。そういうものらしい。。。

start /min データファイル名
start /max データファイル名
で,起動した場合,ソフトによって違うようですね?

桐はどちらも無視! Excel は MAX は有効・・・

あと,Excel の表を最小化で起動させたい場合,
コマンドボタン経由のシェル実行であれば,最小化も制御可能ですよね!
機能名:シェル実行
パラメータ:"C:\Program Files\Microsoft
Office\Office\EXCEL.EXE","D:\DATA\DOC\hogehoge.xls","","最小化"

だから,フォームが絡む場合は「メソッド呼び出し 実行」
で制御可能だと思います。

では,フォームが絡まない一括処理からの実行したい場合はどうしましょうか?
「システム」コマンドでも
システム "C:\Program Files\Microsoft
Office\Office\EXCEL.EXE","D:\DATA\DOC\hogehoge.xls",表示=最小化
と言うようにすれば,最小化も可能ですが,最小化すると言う事ですから,
同期なシステムコマンドではチト都合が悪いのでしょうね?
だとすると。無理やりフォームを呼び出して起動するか?
外部アプリで WSH 等のお世話になるか? なのでしょうか・・・


19621 Re:シェル実行コマンドで表示=最小化が上手くいかない TS 2003/03/25-20:39
記事番号19616へのコメント
尾形さん、うにんさん、hidetakeさん コメントいただき有難うございます。

>ボタン経由のシェル実行であれば,

とありましたが、これは私の説明が不足していました。
ボタンで、kevの手続き実行を呼び出し、その手続きの中でシエル実行で
エクセルのvbaを自動実行させている使い方をしたいと考えています。

しかし、>ボタン経由のシェル実行であれば,可能とのこと。
再度、ボタンの機能1には従来どおり手続き実行を、次の機能2で
シェル実行を指定しやってみたいと思います。
いろいろご助言いただき有難うございました。

(・・・sp無しだとまずいですかね??
spで修正されているバグ対策後の機能は使う予定がないのですが・・・)
19623 Re:シェル実行コマンドで表示=最小化が上手くいかない hidetake 2003/03/25-20:50
記事番号19621へのコメント
>エクセルのvbaを自動実行させている使い方をしたいと考えています。

VBA を使用するのでしたら,VBA で自分に自身を
最小化しても良いのでは無いですか?
ただ,最小化する時の表示がわずらわしいかも?
知れませんが・・・
(ついでに,フォーカスやアクティブウィンドウ
を桐に戻すコードも入れたりして?)

フォームを使っているのなら,そのボタン自身に
記述しても良いでしょうし,Excel を起動させる
ための専用のボタンをどこかに作っておいて,
コードから呼び出す事でも可能だと思います。


19647 Re:シェル実行コマンドで表示=最小化が上手くいかない TS 2003/03/26-19:56
記事番号19623へのコメント
hidetakeさん コメントいただきまして有難うございます。

早速ですが

>VBA で自分に自身を最小化・・・
>アクティブウィンドウを桐に戻すコード・・・

の両方とも私の勉強不足で実のところ知らないのです。
もしよろしければ、どのようなメッソドを記入したらよいか、
教えていただけると助かります。

よろしくお願いします。
19649 Re:シェル実行コマンドで表示=最小化が上手くいかない hidetake 2003/03/26-23:13
記事番号19647へのコメント
>もしよろしければ、どのようなメッソドを記入したらよいか、
>教えていただけると助かります。

一応,次のような感じで・・・

もし,桐が起動していれば Excel を最小化して,アクティブウィンドウを「桐」に移す!
 そうで無ければそのまま何もしない処理です。

Excel ウィンドウ自身を操作する機能は Excel 自身で持ち合わせていますが,
他のアプリを操作する場合は API を呼び出す必要があるので,
MS としてはサポート対象外になるでしょうし
難しくなってくる?かも知れません・・・ (^^;

それと,下記の例では「桐Ver8」を対象にしています。
ハンドルを取得するにクラス名を使用(指定)しているので「桐Ver9」では
Kiri9 を指定する必要があります。
桐の場合はバージョン毎にクラス名が変わるので,バージョンにより管理が面倒です!

だからアクティブ設定は無しにして,最小化するだけだったら
Application.WindowState = xlMinimized
を現在のコードの最初の部分にでも入れるだけでも構いません。


Option Explicit
'----------------------------------------------------------------
Private Declare Function FindWindow Lib "user32" _
Alias "FindWindowA" _
(ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long
Private Declare Function SetForegroundWindow Lib "user32" _
(ByVal hWnd As Long) As Long
'----------------------------------------------------------------
Sub Auto_Open()
Call ExActivate("Kiri8")
End Sub

Sub ExActivate(ClassName As String)
Dim hWnd As Long
Dim Result As Long
If Len(ClassName) Then
hWnd = FindWindow(ClassName, vbNullString)
If hWnd Then
'MsgBox "桐が起動しています!"
Application.WindowState = xlMinimized
Result = SetForegroundWindow(hWnd)
End If
End If
End Sub
'----------------------------------------------------------------
' Access ClassName : "OMAIN" Title : "Microsoft Access"
' Excel ClassName : "XLMAIN" Title : "Microsoft Excel"
' Word ClassName : "OpusAPP" Title : "Microsoft Word"
' 一太郎 ClassName : "js:TARO" Title : "一太郎"
' 一太郎 ClassName : "js:TARO" Title : "一太郎"
' 一太郎v11 ClassName : "js:TARO11" Title : "一太郎" (11から?)
' 1-2-3 ClassName : "LegoAppMDIView" Title : "ロータス 1-2-3"
' 桐v7.1 ClassName : "Kiri71" Tille : "桐ver.7.1"
' 桐v8 ClassName : "Kiri8" Tille : "桐"
' 桐v9β ClassName : "Kiri8" Tille : "桐"
' 桐v9 ClassName : "Kiri9" Tille : "桐"
'----------------------------------------------------------------


19654 Re:シェル実行コマンドで表示=最小化が上手くいかない TS 2003/03/27-22:37
記事番号19649へのコメント
hidetakeさん コメント有難うございます。

ウワ〜〜〜こんなにスゴイ!!

メソッドをひとつずつ勉強させていただきます。
桐もバージョンによってクラス名が変わるとは知りませんでした。
本当にいろいろ教えていただき有難うございました。
19656 Re:シェル実行コマンドで表示=最小化が上手くいかない hidetake 2003/03/28-01:06
記事番号19654へのコメント
ついでに,こんな方法もあるかも知れないと言う方法?

桐から,なにがしのデータを書き出して,それを Excelで読み込んで,
何かの処理を行う場合,今回のように
Excel を最小化して実行する方法もあると思います。

この場合,最小化は出来ても起動時から Excel を非表示では実行する事は出来ません。
Excel を開いてから VBA で非表示にする方法はありますが
最初はどうしても表示されてしまいます。

では WSH 経由で Excel.Application を呼び出して実行させたら?
と言う方法です。
スクリプトファイルは下記のような感じになります。

Excel ファイルを WSH で開いて処理しますが,
その場合に Excel 本体を非表示に(xl.Visible = Fales),警告も
出さないように(xl.DisplayAlerts = Fales) 設定して
処理を行います。ActiveX 経由で Excel を開いた場合は
アドインや Auto_Open マクロは実行されませんので,
それを実行します。実行したらファイルを強制保存して終了します。
終了時に必要であれば,終了メッセージを出したり,
Execl を表示状態にして終了する方法もあります。(Fales を True にする)

ただ,この場合気をつけないといけないのは,
Excel本体を非表示にした状態でエラーが発生すると,Excel が
常駐しファイルを開いたままになります。
非表示状態だから Excel を操作できなくなります。
だから,実行するマクロなどは充分にテストを行い,エラーなど発生しないように
(しても途中で止まらないように)作っておく事が必要です。

これだと,使用者に Excel を意識させないし,
システムコマンドを組み合わせると,システムコマンドは同期で
外部プログラムを実行してくれるので,桐側でメッセージを出しておいて,
影で Excel 側の処理を実行させ,
外部プログラムは意識させないで終了とともに,桐側で終了の表示もできたりします。

システム "wscript.exe","x:\xls_open.vbs x:\filename.xls"

実際にはこの辺の処理(ActiveXでの処理)は
桐9 の Excelファイルの読み書きでは行っているのです。

=======================================================
実行方法: xls_open.vbs x:\data\filename.xls
-------------------------------------------------------
Dim arg, ws, xl, xls, book, ret
Set arg = WScript.Arguments
If Arg.Count < 1 Then
WScript.Quit
End If
xls = arg(0)
Set ws = WScript.CreateObject("WScript.Shell")
Set xl = Wscript.CreateObject("Excel.Application")
On Error Resume Next ' マクロ無し場合のエラー対策
xl.Visible = Fales ' Excelを非表示
xl.DisplayAlerts = Fales ' 警告を非表示
Set book = xl.WorkBooks.Open(xls)
xl.Run("Auto_Open")
'xl.Run("other_macro") ' 必要に応じて
book.SaveAs xls
book.Close True
xl.Quit
'必要に応じて終了メッセージを表示
ret = ws.Popup( "××を終了しました!" _
, 3 _
, "確認" _
, 0)
Set xl = Nothing
Set ws = Nothing
Set arg = Nothing
WScript.Quit
=======================================================


19670 Re:シェル実行コマンドで表示=最小化が上手くいかない TS 2003/03/28-21:52
記事番号19656へのコメント
hidetake さん コメントいただきまして度々有難うございます。

う〜〜ん。なるほど!

WSHで処理をさせる方法があるとは、思いもよりませんでした。
今まで私自身は、WSHはSVの運用管理バッチ用に少し使ったことがあるくらいで、
エクセルを動かしたことなどありませんでした。
今回、回答いただいたスクリプトよりぜひ勉強させていただきたいと思います。

本当に有難うございました。
19674 Re:シェル実行コマンドで表示=最小化が上手くいかない hidetake 2003/03/29-08:01
記事番号19670へのコメント
>WSH

WSH も結構面白いです。 (^_^)

ODBC の操作から,正規表現にバイナリファイルの一部操作・・・と,結構楽しめます!
使い方によっては WindowsAPI の呼び出しも! :-)

ただし,ウィルスとの関係でメーラやブラウザのアンチウィルス対策は充分に行って下さい。

それと,本来ならこのような他のアプリとの連携も桐内部で出来たらなぁ〜!って私は思います。
特に桐9 からは Excel との関係で,桐の内部的には
ActiveX を呼び出して使用しています。
その仕組みを桐内部だけでなくユーザからもアクセスし
自由に使えるインターフェースだけでも作ってもらい公開して頂けないかと?

そしたら,他のアプリ等との連携ももっともっと自由にできるし,
桐の自由度ももっともっと上がるのに!と思います。
もちろん,他のソフトと同じように,この分野に関しての
サポートなんて無しと言う条件付きでも構わないのですが・・・ (^^;


戻る