Excel2007でプレビュー表示するには

タグの編集
投稿者 みかちゃん  (社会人) 投稿日時 2008/10/6 20:08:02
VB2005でエクセルを立ち上げて、エクセルのプレビューを表示させる。
ということをしたいのですが、

Excel2000では、うまくできているのですが、
Excel2007になると、デバック時には、できたものが
ビルド後、Exeから起動させると
Excelが最小化になったままで、
エクセルがアクティブになりません。
エクセルマクロからプレビュー処理をしています。


VB2005側でエクセルプレビューをしたり
VB2005側のフォームを最小化したり、
Processを取得して、
AppActivate(p.Id)
など、してもエクセルが最小化になったままでした。

どうしたらよいでしょうか?
宜しくお願い致します。 
投稿者 みかちゃん  (社会人) 投稿日時 2008/10/7 03:08:20
ちなみに
コードはこんな感じです。

■■■ VB2005側 ■■■

Public Sub TEST
        Dim xlApp As Object = CreateObject("Excel.Application")
        Dim xlBooks As Object = xlApp.Workbooks

        Try
            Dim xlFilePath As String = "C:\Test.xls"
            Dim xlBook As Object = xlBooks.Open(xlFilePath)

            Try
                xlApp.Visible = True              'Excelを表示
                xlApp.Run("Test.xls!プレビュー")  'マクロ実行
              
            Finally
                xlBook.Close(False)             'xlBook を閉じる
                MRComObject(xlBook)             'xlBook の解放dd
            End Try
        
    Finally
            MRComObject(xlBooks)            'xlBooks の解放
            xlApp.Quit()                    'Excelを閉じる 
            MRComObject(xlApp)              'xlApp を解放

        End Try

    End Sub

    Private Sub MRComObject(Of T As Class)(ByRef objCom As T, Optional ByVal force As Boolean = False)
        If objCom Is Nothing Then
            Return
        End If
        Try
            If System.Runtime.InteropServices.Marshal.IsComObject(objCom) Then
                If force Then
                    System.Runtime.InteropServices.Marshal.FinalReleaseComObject(objCom)
                Else
                    Dim count As Integer = System.Runtime.InteropServices.Marshal.ReleaseComObject(objCom)
                End If
            End If
        Finally
            objCom = Nothing
        End Try
    End Sub


■■■ Excel側 ■■■

Public Sub プレビュー()
      Workbooks("Test.xls").Sheets("Test").Select
      ActiveWindow.SelectedSheets.PrintPreview
End Sub
投稿者 カムリン  (社会人) 投稿日時 2008/10/7 03:27:52
デバック時は出来るってことなので、
これはどうかな?

xlApp.Run("Test.xls!プレビュー")  'マクロ実行
System.Windows.Forms.Application.DoEvents()
System.Threading.Thread.Sleep(1000)
投稿者 るしぇ  (社会人) 投稿日時 2008/10/7 03:40:14
>デバック時は出来るってことなので、
>これはどうかな?
PrintPreview しちゃうとそこでコードが待ち状態になるみたいなので
後ろのコードは実行されないかも?
(Book 閉じてるし、ボクも最初なんでできるの?って思ったところですが)

となるとマクロ実行前かマクロ側で?。。。2007固有っていうところも
厄介だねぇ。
ちなみにExcel2007でマクロの記録したらプレビューのコードは変わって
いませんでしたか?
投稿者 みか  (社会人) 投稿日時 2008/10/7 03:42:17
カムリンさん、レスありがとうございます。
結果は同じでした。
投稿者 みかちゃん  (社会人) 投稿日時 2008/10/7 03:48:23
るしぇさん、レスありがとうございます。
Excel2000とExcel2007マクロの記録をとってみると、
両方とも同じコードでした。

ActiveWindow.SelectedSheets.PrintPreview
投稿者 みかちゃん  (社会人) 投稿日時 2008/10/7 04:28:50
フォームの非表示と表示を
間に挟めば目的のことが
できそうです。

'非表示
xlApp.Run("Test.xls!プレビュー") 'マクロ実行
'表示

ありがとうございました。