none
VB.NETからエクセル→印刷プレビュー RRS feed

  • 質問

  • お世話になります。

    visual studio 2010  vb.net

    OS:Windows XP

    の環境で開発をしております。

    VB.NETからエクセルを操作し印刷プレビューを表示することはできたのですが印刷プレビューで印刷ボタンを押下させなくする

    ように制御することは可能でしょうか?

    ご教授お願いいたします。

    2011年5月21日 14:36

回答

  • 押させないというより、押しても印刷してしまわなければいいならば、BeforePrintのイベントでキャンセルしてしまうだけです。

    Public Class Form1
      Dim WithEvents xla As Microsoft.Office.Interop.Excel.Application
      Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        xla = New Microsoft.Office.Interop.Excel.Application()
        xla.Visible = True
        Dim wb As Microsoft.Office.Interop.Excel.Workbook _
          = xla.Workbooks.Add()
        Dim sh As Microsoft.Office.Interop.Excel.Worksheet _
          = wb.ActiveSheet
        sh.Range("A1").Value = 1
        allowPrint = True
        sh.PrintPreview()
        allowPrint = False
      End Sub
    
      Dim allowPrint = False
    
      Private Sub xla_WorkbookBeforePrint(ByVal Wb As Microsoft.Office.Interop.Excel.Workbook, ByRef Cancel As Boolean) _
        Handles xla.WorkbookBeforePrint
        If allowPrint Then
          allowPrint = False
        Else
          Cancel = True
        End If
      End Sub
    End Class
    

    #ReleaseComObjectなしの手抜き

    コードからプレビューを表示するときだけキャンセルしないことでプレビュー表示されます。
    #ちなみにマクロでこれと同じことさせるとExcelが落ちやすいです

    • 回答としてマーク ペニー 2011年5月22日 13:10
    2011年5月22日 4:35

すべての返信

  • 押させないというより、押しても印刷してしまわなければいいならば、BeforePrintのイベントでキャンセルしてしまうだけです。

    Public Class Form1
      Dim WithEvents xla As Microsoft.Office.Interop.Excel.Application
      Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        xla = New Microsoft.Office.Interop.Excel.Application()
        xla.Visible = True
        Dim wb As Microsoft.Office.Interop.Excel.Workbook _
          = xla.Workbooks.Add()
        Dim sh As Microsoft.Office.Interop.Excel.Worksheet _
          = wb.ActiveSheet
        sh.Range("A1").Value = 1
        allowPrint = True
        sh.PrintPreview()
        allowPrint = False
      End Sub
    
      Dim allowPrint = False
    
      Private Sub xla_WorkbookBeforePrint(ByVal Wb As Microsoft.Office.Interop.Excel.Workbook, ByRef Cancel As Boolean) _
        Handles xla.WorkbookBeforePrint
        If allowPrint Then
          allowPrint = False
        Else
          Cancel = True
        End If
      End Sub
    End Class
    

    #ReleaseComObjectなしの手抜き

    コードからプレビューを表示するときだけキャンセルしないことでプレビュー表示されます。
    #ちなみにマクロでこれと同じことさせるとExcelが落ちやすいです

    • 回答としてマーク ペニー 2011年5月22日 13:10
    2011年5月22日 4:35
  • gekka さん 回答ありがとうございます。

    こういうやり方があるのですね。

    試してみたところ印刷ボタンを押したらキャンセルされました。

    この方法でやってみたいと思います。

    助かりました。ご教授ありがとうございました。

    • 回答としてマーク ペニー 2011年5月22日 13:10
    • 回答としてマークされていない ペニー 2011年5月22日 13:10
    2011年5月22日 13:10