Excel2007でプレビュー表示するには への返答
投稿で使用できる特殊コードの説明。(別タブで開きます。)
以下の返答は逆順(新しい順)に並んでいます。
投稿者 みかちゃん  (社会人)
投稿日時
2008/10/7 03:48:23
るしぇさん、レスありがとうございます。
Excel2000とExcel2007マクロの記録をとってみると、
両方とも同じコードでした。
ActiveWindow.SelectedSheets.PrintPreview
Excel2000とExcel2007マクロの記録をとってみると、
両方とも同じコードでした。
ActiveWindow.SelectedSheets.PrintPreview
投稿者 みか  (社会人)
投稿日時
2008/10/7 03:42:17
カムリンさん、レスありがとうございます。
結果は同じでした。
結果は同じでした。
投稿者 るしぇ  (社会人)
投稿日時
2008/10/7 03:40:14
>デバック時は出来るってことなので、
>これはどうかな?
PrintPreview しちゃうとそこでコードが待ち状態になるみたいなので
後ろのコードは実行されないかも?
(Book 閉じてるし、ボクも最初なんでできるの?って思ったところですが)
となるとマクロ実行前かマクロ側で?。。。2007固有っていうところも
厄介だねぇ。
ちなみにExcel2007でマクロの記録したらプレビューのコードは変わって
いませんでしたか?
>これはどうかな?
PrintPreview しちゃうとそこでコードが待ち状態になるみたいなので
後ろのコードは実行されないかも?
(Book 閉じてるし、ボクも最初なんでできるの?って思ったところですが)
となるとマクロ実行前かマクロ側で?。。。2007固有っていうところも
厄介だねぇ。
ちなみにExcel2007でマクロの記録したらプレビューのコードは変わって
いませんでしたか?
投稿者 カムリン  (社会人)
投稿日時
2008/10/7 03:27:52
デバック時は出来るってことなので、
これはどうかな?
xlApp.Run("Test.xls!プレビュー") 'マクロ実行
System.Windows.Forms.Application.DoEvents()
System.Threading.Thread.Sleep(1000)
これはどうかな?
xlApp.Run("Test.xls!プレビュー") 'マクロ実行
System.Windows.Forms.Application.DoEvents()
System.Threading.Thread.Sleep(1000)
投稿者 みかちゃん  (社会人)
投稿日時
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
コードはこんな感じです。
■■■ 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/6 20:08:02
VB2005でエクセルを立ち上げて、エクセルのプレビューを表示させる。
ということをしたいのですが、
Excel2000では、うまくできているのですが、
Excel2007になると、デバック時には、できたものが
ビルド後、Exeから起動させると
Excelが最小化になったままで、
エクセルがアクティブになりません。
エクセルマクロからプレビュー処理をしています。
VB2005側でエクセルプレビューをしたり
VB2005側のフォームを最小化したり、
Processを取得して、
AppActivate(p.Id)
など、してもエクセルが最小化になったままでした。
どうしたらよいでしょうか?
宜しくお願い致します。
ということをしたいのですが、
Excel2000では、うまくできているのですが、
Excel2007になると、デバック時には、できたものが
ビルド後、Exeから起動させると
Excelが最小化になったままで、
エクセルがアクティブになりません。
エクセルマクロからプレビュー処理をしています。
VB2005側でエクセルプレビューをしたり
VB2005側のフォームを最小化したり、
Processを取得して、
AppActivate(p.Id)
など、してもエクセルが最小化になったままでした。
どうしたらよいでしょうか?
宜しくお願い致します。
間に挟めば目的のことが
できそうです。
'非表示
xlApp.Run("Test.xls!プレビュー") 'マクロ実行
'表示
ありがとうございました。