[リストへもどる]
一括表示

投稿時間:2003/11/19(Wed) 11:25
投稿者名:うに
Eメール:
URL :
タイトル:
Excelアプリ終了後マウスポインタが戻らない
こんにちは。
VBからExcelを起動し、プレビューを表示させ終了させるという処理で、
プレビュー画面からの印字終了もしくは「閉じる」ボタン押下でVBに
制御は戻るのですが、マウスポインタがHourglassのまま戻りません。
プロセスが残ってしまっている可能性も考えましたが、タスクマネージャ
で確認したところExcel.exeは残っていませんでした。
どこか問題なのか皆目検討がつきません。お詳しい方のご指摘を頂戴した
いと思います。よろしくお願いします。環境およびソースコードは以下です。

<環境>
  Win2000Pro(SP3) VB6(SP5)  Office2000

<ソースコード>(なお参照設定はしておりません)
Sub sub()

    Me.MousePointer = ccHourglass

    Private WKO_ExcelAppl  As Object    'EXCELアプリケーションオブジェクト
    Private WKO_ExcelBook  As Object    'EXCELブックオブジェクト
    Private WKO_ExcelSheet As Object    'EXCELシートオブジェクト
        
         '既存Bookのオープン
    Set WKO_ExcelAppl = CreateObject("Excel.Application")
    Set WKO_ExcelBook = WKO_ExcelAppl.Workbooks.Open("Book.xls")
    Set WKO_ExcelSheet = WKO_ExcelBook.Worksheets("Sheet")
    
    'ワークシートへ値をセットするサブプロシージャ
         'ワークシートオブジェクトを渡しています(もちろんByRefで)
         'こちらのコードは割愛します。
    Call Sub_Set_Values(WKO_ExcelSheet)

         'ユーザに見せるのはプレビュー画面のみなため、ここで
         'はじめてVisibleを有効にしています
         WKO_ExcelAppl.Visible = True
         WKO_ExcelBook.PrintPreview

         WKO_ExcelAppl.Visible = False
         WKO_ExcelBook.Close SaveChanges:=True
         WKO_ExcelAppl.Quit
         Set WKO_ExcelAppl = Nothing
         Set WKO_ExcelBook = Nothing
         Set WKO_ExcelSheet = Nothing

     'ステップ実行でこの処理の実行を確認しているのですが・・・
    Me.MousePointer = ccDefault 
    
End sub  'このプロシージャを終了するとマウスポインタはHourglassのまま・・・なんで〜!?

投稿時間:2003/11/19(Wed) 11:49
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re: Excelアプリ終了後マウスポインタが戻らない
>     Me.MousePointer = ccHourglass

>      'ステップ実行でこの処理の実行を確認しているのですが・・・
>     Me.MousePointer = ccDefault 

このような定数はないと思うのですが?
Me.MousePointer = VbHourglass
Me.MousePointer = vbDefault
に変更しても同じですか?

参照設定していなければこの部分問題なかったでしょうか?(未確認)
>WKO_ExcelBook.Close SaveChanges:=True

投稿時間:2003/11/19(Wed) 12:52
投稿者名:うに
Eメール:
URL :
タイトル:
Re^2: Excelアプリ終了後マウスポインタが戻らない
> このような定数はないと思うのですが?
> Me.MousePointer = VbHourglass
> Me.MousePointer = vbDefault
> に変更しても同じですか?

Microsoft Windows Common Controlライブラリの定数のようです。
(MSCOMCTL.oca:MSComctlLib.MousePointerConstants)
VBを触り始めた当初、指導してくださった方がこのコンポーネントを
多用していたので私もあたりまえのように使う習慣がついてしまって
いました。vb〜のほうが一般的ですよね。失礼しました。
なおvb〜に変更しても現象は変わりませんでした。


> 参照設定していなければこの部分問題なかったでしょうか?(未確認)
> >WKO_ExcelBook.Close SaveChanges:=True

はい、問題なく動作し保存もされています。

投稿時間:2003/11/19(Wed) 13:33
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^3: Excelアプリ終了後マウスポインタが戻らない
'    Call Sub_Set_Values(WKO_ExcelSheet)
上記の部分をコメントアウトしても同じですか?
私の環境では事象がおきないのですが?

コメントアウトしても同じなら新規のファイルでの
状況を再現できるコードを投稿して下さい。

投稿時間:2003/11/19(Wed) 14:44
投稿者名:うに
Eメール:
URL :
タイトル:
Re^4: Excelアプリ終了後マウスポインタが戻らない
> '    Call Sub_Set_Values(WKO_ExcelSheet)
> 上記の部分をコメントアウトしても同じですか?
> 私の環境では事象がおきないのですが?
>
> コメントアウトしても同じなら新規のファイルでの
> 状況を再現できるコードを投稿して下さい。

以下のコードで再現しました。
もちろんのことながら、これらはプロジェクトの一部のコードにすぎません
ので他のモジュールとの関連に起因するかもしれませんね。
全てのコードを検証していただくわけにもまいりませんので、勝手ながら
この件はここで一度凍結させてください。
ご多忙の中、細かなご指摘ありがとうございました。

------------------------------------------------------------------------------
Sub sub()

    Me.MousePointer = ccHourglass

    Private WKO_ExcelAppl  As Object    'EXCELアプリケーションオブジェクト
    Private WKO_ExcelBook  As Object    'EXCELブックオブジェクト
    Private WKO_ExcelSheet As Object    'EXCELシートオブジェクト

    Set WKO_ExcelAppl = CreateObject("Excel.Application")
    Set WKO_ExcelBook = WKO_ExcelAppl.Workbooks.Add
    Set WKO_ExcelSheet = WKO_ExcelBook.Worksheets(1)

    'ワークシートへ値をセット
    WKO_ExcelSheet.Cells(1, 1).Value = "TEST"

    WKO_ExcelAppl.Visible = True
    WKO_ExcelBook.PrintPreview

    WKO_ExcelAppl.Visible = False
    WKO_ExcelBook.SaveAs App.Path & "\Test.xls"
    WKO_ExcelAppl.Quit
    Set WKO_ExcelAppl = Nothing
    Set WKO_ExcelBook = Nothing
    Set WKO_ExcelSheet = Nothing

    Me.MousePointer = ccDefault
    
End sub

投稿時間:2003/11/19(Wed) 15:16
投稿者名:うに
Eメール:
URL :
タイトル:
Re: Excelアプリ終了後マウスポインタが戻らない
> <ソースコード>(なお参照設定はしておりません)
> Sub sub()
>
>     Me.MousePointer = ccHourglass
>
>        --(中略)--
>
>      'ステップ実行でこの処理の実行を確認しているのですが・・・
>     Me.MousePointer = ccDefault 
>     
> End sub  'このプロシージャを終了するとマウスポインタはHourglassのまま・・・なんで〜!?

MousePointerプロパティの対象をScreenオブジェクトに変更して解決しました。
ありがとうございました。