• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ShellでEXCEL2002を起動する場合)

ShellでEXCEL2002を起動する方法について

このQ&Aのポイント
  • VB6のコーディングで、Shell関数を使用してEXCEL2002を起動する方法について、正常な表示と動作をする方法を教えてください。
  • EXCEL2002では、Shell関数を使用してEXCELを起動すると、表示方法が他のバージョンと異なります。最後に使用した大きさやロゴマークが表示されてしまう問題があります。
  • この問題を解決し、VB6のコーディングでEXCEL2002を起動してマクロを使用した帳票を出力する方法を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.5

解決したのでしょうか? それとも反則技で怒ったのでしょうか? もし別方法で解決したのであれば教えてください。 今後の参考にしたいです。。。m(__)m

ys63
質問者

お礼

お返事送れてすみません。(^^;) 解決しました。 こんな方法があるとは... 反則技なんてとんでもない、いい方法を教わりました。 ありがとうございました。 今後ともよろしくお願いします。m(__)m

すると、全ての回答が全文表示されます。

その他の回答 (4)

  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.4

そーですかー。Shellのオプションを受け入れてくれませんかー。。。 おそらく、Windowsから送られてくるメッセージをSpyで見てみたら、正確な方法がわかるのでしょうが・・・環境がないと実験ができないので、原因追求をしたくてもできないのです。。。 なので、こちらの方でも唯一可能な方法で作成しました。 もろ反則技です。 処理内容 1.ピクチャボックスを創生 2.ピクチャボックスの親ハンドルをデスクトップに変更 3.ピクチャボックスのサイズを画面サイズに変更し、最前面固定 4.デスクトップの状態をピクチャボックスに描画 5.ピクチャボックスを表示 6.エクセルを起動 7.エクセルを最小化 8.ピクチャボックスの破棄 ねっ反則でしょ?(笑) 関数creDmyPicで1~5の処理を行っています。 関数openExcelで6~7の処理を行っています。 ちなみに・・・ この方法は、どうしても見せたくない処理があるけど、いちいち制御するのが面倒な時に使ってます。 これがダメなら・・・すいません・・・回答不能です。。。 Option Explicit Private Const HWND_TOPMOST = (-1) Private Type RECT   Left As Long   Top As Long   Right As Long   Bottom As Long End Type Private Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As Long) As Long Private Declare Function StretchBlt Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal nSrcWidth As Long, ByVal nSrcHeight As Long, ByVal dwRop As Long) As Long Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long Private Declare Function GetDesktopWindow Lib "user32" () As Long Private Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long Private Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long    Private Sub Command1_Click()   Dim dmyPic As PictureBox        'ピクチャボックスを作成して、一時画面描画を視覚的にとまったように見せる   Set dmyPic = creDmyPic("picDammy")   If dmyPic Is Nothing Then     Call MsgBox("ダミー作成失敗")   End If      'エクセルブックのオープン   Call openExcel("c:\test.xls")      'アクティブウィンドウを自分自身に設定   Call SetForegroundWindow(Me.hwnd)      'ピクチャボックスウィンドウの破棄   Controls.Remove dmyPic End Sub '【機 能】エクセルを最小化で起動する '【引 数】エクセルブックのフルパス '【注意点】エラーチェックを使用してない Private Sub openExcel(inOpenXlsBookPath As String)   Dim xlApp  As Excel.Application      'エクセル起動   Call Shell("C:\Program Files\Microsoft Office\Office\EXCEL.exe /e")   Set xlApp = GetObject("", "Excel.Application")      'エクセル最小化   xlApp.WindowState = xlMinimized      'ワークブックオープン   xlApp.Workbooks.Open inOpenXlsBookPath      '開放   xlApp.Visible = True   Set xlApp = Nothing End Sub '【機 能】ピクチャボックスを創生して、現在のデスクトップ状態を描画し、最前面で表示を行う '【引 数】創生するピクチャボックスの名称(任意) '【注意点】パラメータには既存のピクチャボックスと重複しない名称を使用すること Private Function creDmyPic(inPicBoxName As String) As PictureBox   Dim picWork     As PictureBox  'ピクチャボックスオブジェクト   Dim lngDeskTopWnd  As Long     'ハンドル(デスクトップ)   Dim rcDeskTop    As RECT     '領域座標(デスクトップ)   Dim lngDeskTopDC  As Long     'デバイスコンテキスト(デスクトップ)      '左位置/上位置/幅/高   Dim lngL As Long, lngT As Long, lngW As Long, lngH As Long      '失敗したら終了   On Error GoTo PGMEND      'ピクチャボックスを作成   Set picWork = Controls.Add("VB.PictureBox", inPicBoxName)      'ピクチャボックスの初期設定   With picWork     .Appearance = 0     .AutoRedraw = True     .AutoSize = False     .BorderStyle = 0   End With      'デスクトップのハンドルを取得   lngDeskTopWnd = GetDesktopWindow   'デスクトップ領域の座標を取得   Call GetWindowRect(lngDeskTopWnd, rcDeskTop)   'デスクトップのデバイスコンテキストを取得   lngDeskTopDC = GetDC(lngDeskTopWnd)      '左位置/上位置/幅/高を取得   With rcDeskTop     lngL = .Left: lngT = .Top: lngW = .Right - .Left: lngH = .Bottom - .Top   End With      With picWork     '親ハンドルの変更(ピクチャボックスをフォームから飛び出させる)     Call SetParent(.hwnd, lngDeskTopWnd)          'デスクトップの領域にピクチャボックスのサイズをあわし、画面Zオーダーを最前面固定にする     Debug.Print SetWindowPos(.hwnd, HWND_TOPMOST, lngL, lngT, lngW, lngH, 0)          '描画実行     Call StretchBlt(.hdc, lngL, lngT, lngW, lngH, lngDeskTopDC, lngL, lngT, lngW, lngH, vbSrcCopy)          'ピクチャボックスの表示     .Visible = True   End With      'ピクチャボックスオブジェクトを返す   Set creDmyPic = picWork PGMEND: End Function

すると、全ての回答が全文表示されます。
  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.3

ShellでvbMinimizedFocusなどが無効なのですよね? もしかしたら、vbHideも無効なのかな? さっきのは [Set xlApp = New Excel.Application] で起動してましたが、今度は[Shell]で起動して、[GetObjectでxlAppをセット]してます。これでもダメですか? こちらに環境がないので、すいませんがそちらでテストしてください。 できたら、結果報告もお願いします。 Private Sub Command1_Click()   Dim xlApp  As Excel.Application      Call Shell("C:\Program Files\Microsoft Office\Office\EXCEL.exe", vbHide)      Set xlApp = GetObject("", "Excel.Application")   xlApp.Workbooks.Add      xlApp.WindowState = xlMinimized   xlApp.Visible = True   Set xlApp = Nothing End Sub

ys63
質問者

お礼

結果報告です。無理でした(T_T) shellのウィンドウスタイルの指定がまったく無視されるみたいです。 APIで色々試してみます。

すると、全ての回答が全文表示されます。
  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.2

ツールバーから [プロジェクト]の[参照設定]より Microsoft Excel x.x Object Library をチェック入れて使用してください。 x.xの部分は、環境によって違います。 Private Sub Command1_Click()   Dim xlApp  As Excel.Application      'Ecxel起動   Set xlApp = New Excel.Application   xlApp.Workbooks.Open "C:\TEST.xls"   'Ecxel最小化   xlApp.WindowState = xlMinimized      '表示する   xlApp.Visible = True   'Ecxel開放   Set xlApp = Nothing End Sub

ys63
質問者

お礼

ありがとうございます。見事にアイコン化されました。 ただ、Shellでなくても構いませんといったのに申し訳ございませんが、 EXCEL2000とEXCEL2002を両方インストールした端末で、バージョンを指定して起動する必要があったので、やはりできればファイル名を指定できるShellの方を使用できればと思います。 (バージョンの指定とは単純にインストールしているフォルダの指定です。) この回答は、参考になりました、ありがとうございました。

すると、全ての回答が全文表示されます。
  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.1

EXCEL2002は未経験ですが・・・ Shellのオプション値がうまく動作しないのですね? Shellじゃなきゃダメですか? Excel2000しか手元にないので、動作環境は保証できませんが、別方法なら何とか最小化で起動できると思いますよ。

ys63
質問者

補足

Shellでなくても構いません。 ちなみにロゴマーク(起動画面)の問題は、起動スイッチ(/e)で解決しました。

すると、全ての回答が全文表示されます。

関連するQ&A