- 日時: 2012/06/06 19:27
- 名前: VBレスキュー(花ちゃん)
- ***********************************************************************************
* カテゴリー:[エクセル][][] * * キーワード:Excel VBA,Excel2010,印刷,印刷する範囲を指定 * *********************************************************************************** '=================================================================================================== '投 稿 日:2012.05.06 '投 稿 者:VBレスキュー(花ちゃん) 'タイトル:VB2010 から Excel の印刷プレビューの画面を閉じる '========1=========2=========3=========4=========5=========6=========7=========8=========9=========0
Private Sub Button27_Click(sender As System.Object, e As System.EventArgs) Handles Button27.Click Call ExcelOpen("", "") '新規ファイルをオープンして、Excel を起動 '======================= 印刷プレビューの画面を閉じる ======================== '仮データの入力 Dim xlRange As Excel.Range = Nothing For r As Integer = 1 To 80 For c As Integer = 1 To 15 xlRange = xlSheet.Range(R1ToA1(r, c), R1ToA1(r, c)) xlRange.Value = Str(r) & "," & Str(c) MRComObject(xlRange) Next Next '-------------------------------------------------------------------------- '現在表示している Excel のタイトルを取得する title = xlApp.Caption sleepTime = 3000 '指定ミリ秒後に BackgroundWorker を実行する 'バックグラウンド操作の実行を開始 '指定時間後に別スレッドから印刷プレビューの画面を閉じる Me.BackgroundWorker1.RunWorkerAsync() '印刷プレビューを表示する xlSheet.PrintPreview()
'============================================================================= 'Excelファイルを上書き保存(True 又省略すれば)して終了処理を実行 Call ExcelClose(IO.Path.GetFullPath(".\Test.xlsx"), False) 'False の場合保存しないで終了 'Excel.EXE がタスクマネージャに残っていないか調査(実使用時は必要なし) Call ProcessCheck() End Sub
'別途、ツールボックスから BackgroundWorker1 を貼り付けておいて下さい。 Private Sub BackgroundWorker1_DoWork(ByVal sender As Object, ByVal e As _ System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork '指定時間操作の開始を待つ(別スレッド内なので問題ないかと) System.Threading.Thread.Sleep(sleepTime)
Dim hwnd As IntPtr 'タイトル名を指定して Excel のウィンドウハンドルを取得 hwnd = FindWindowEx(IntPtr.Zero, IntPtr.Zero, vbNullString, title) 'AppActivate(title) '前面に表示するでもいいが、後の事も考えて '現在使用している Excel をアクティブにする SetForegroundWindow(hwnd)
'Excel に Excel のショートカットキーを送る '簡便的に SendKeys を使って SendKeys.SendWait("{ESC}")
'できれば、下記の SendInput 関数を使った方法でキーを送信して下さい。 ' http://hanatyan.sakura.ne.jp/patio/read.cgi?no=245
'Dim ki As New SendInput.Helper() 'ki.KyeReSet() 'キー操作の初期化 ''閉じる場合(ESC キーを押す 又は、Ctr + C でも同じ) 'ki.KeyDown(Keys.Escape) 'ESC キーを押す 'ki.KeyUP(Keys.Escape) 'ESC キーを放す 'ki.KeyStroke() '上記一連のキー操作を実行 End Sub
#Region "Win32 API 関数の宣言及び変数の宣言"
''' <summary> ''' 指定のウィンドウをZオーダーのトップ位置に移動しアクティブにする(P99) ''' </summary> ''' <param name="hWnd">フォアグラウンドにするウィンドウのハンドルを指定</param> ''' <returns>正常終了の場合=0 以外 エラーの時= 0</returns> <DllImport("USER32.DLL", CharSet:=CharSet.Auto)> _ Private Shared Function SetForegroundWindow( _ ByVal hWnd As IntPtr) As IntPtr End Function
''' <summary> ''' クラス名又はキャプションタイトルを与えてウインドウのハンドルを取得 ''' </summary> ''' <param name="hWnd1"> ''' 検索する子ウィンドウの親ウィンドウのハンドルを指定、 ''' NULLを指定すると、デスクトップウィンドウが親ウインドウとして使われ ''' デスクトップの子ウィンドウが探されます ''' </param> ''' <param name="hWnd2">子ウィンドウのハンドルを指定</param> ''' <param name="lpsz1">クラス名又は、クラス名を指定するグローバルアトム</param> ''' <param name="lpsz2">ウィンドウのタイトルでNULLを指定するとクラス名のみで検索する</param> ''' <returns>関数が成功すると、指定したクラスとウィンドウ名を持つウィンドウのハンドルが返り ''' 関数が失敗すると、NULL が返ります</returns> <DllImport("user32.dll", CharSet:=CharSet.Auto)> _ Private Shared Function FindWindowEx( _ ByVal hWnd1 As IntPtr, _ ByVal hWnd2 As IntPtr, _ ByVal lpsz1 As String, _ ByVal lpsz2 As String) As IntPtr End Function
Private title As String 'Excel のタイトル名 Private sleepTime As Integer '待ち時間を指定するための変数
#End Region
|