QA@IT
この質問・回答は、@ITの旧掲示板からインポートされたものです。

Excel.Applicationについて

エクセルファイルをvb.netで印字るすプログラムを考えていますが、2箇所エラーになってしまいます。エラー箇所は、Excelオブジェクトの生成行のExcel.Applicationのところと、Excelシートの指定の Excel.Worksheet)のところに波線になってしまいます。
参照設定でMicrosoft Excel 11.0 Object Libraryを追加しているのですが、もっとなにか指定が必要なのでしょうか?ご教授願います。

(プログラム)

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim oXL, oWB, oSheet As Object
Dim FileName As String 'ファイル名(絶対パス指定)

    'Excelオブジェクトの生成
    oXL = CType(CreateObject("Excel.Application"), Excel.Application)
    'ファイル指定
    oWB = oXL.Workbooks.Open(FileName)
    'Excelシートの指定
    oSheet = CType(oWB.Worksheets(1), Excel.Worksheet)
    'シートの印刷 
    oSheet.PrintOut()

End Sub

質問者:こうめい

回答

ラッパーの違いにより Excel ではなく、
Microsoft.Office.Interop.Excel になっている場合があります。

Imports Microsoft.Office.Interop

と書き加えてみてください。

投稿者:えるにえ

編集 履歴 (0)

だめでした。Microsoft.Office.Interopにも波線が出ました。
????わからない!!

Imports Microsoft.Office.Interop
Public Class Form1
Inherits System.Windows.Forms.Form

#Region " Windows フォーム デザイナで生成されたコード "

Public Sub New()
    MyBase.New()

    ' この呼び出しは Windows フォーム デザイナで必要です。
    InitializeComponent()

    ' InitializeComponent() 呼び出しの後に初期化を追加します。

End Sub

' Form は、コンポーネント一覧に後処理を実行するために dispose をオーバーライドします。
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
    If disposing Then
        If Not (components Is Nothing) Then
            components.Dispose()
        End If
    End If
    MyBase.Dispose(disposing)
End Sub

' Windows フォーム デザイナで必要です。
Private components As System.ComponentModel.IContainer

' メモ : 以下のプロシージャは、Windows フォーム デザイナで必要です。
'Windows フォーム デザイナを使って変更してください。  
' コード エディタを使って変更しないでください。
Friend WithEvents Button1 As System.Windows.Forms.Button
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
    Me.Button1 = New System.Windows.Forms.Button
    Me.SuspendLayout()
    '
    'Button1
    '
    Me.Button1.Location = New System.Drawing.Point(64, 48)
    Me.Button1.Name = "Button1"
    Me.Button1.Size = New System.Drawing.Size(152, 23)
    Me.Button1.TabIndex = 0
    Me.Button1.Text = "OFFICE印字"
    '
    'Form1
    '
    Me.AutoScaleBaseSize = New System.Drawing.Size(5, 12)
    Me.ClientSize = New System.Drawing.Size(292, 273)
    Me.Controls.Add(Me.Button1)
    Me.Name = "Form1"
    Me.Text = "Form1"
    Me.ResumeLayout(False)

End Sub

#End Region

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim oXL, oWB, oSheet As Object
    Dim FileName As String        'ファイル名(絶対パス指定)

    'Excelオブジェクトの生成
    oXL = CType(CreateObject("Excel.Application"), Excel.Application)
    'ファイル指定
    oWB = oXL.Workbooks.Open(FileName)
    'Excelシートの指定
    oSheet = CType(oWB.Worksheets(1), Excel.Worksheet)
    'シートの印刷 
    oSheet.PrintOut()

End Sub

End Class

えるにえさんの書き込み (2004-10-05 22:28) より:

ラッパーの違いにより Excel ではなく、

Microsoft.Office.Interop.Excel になっている場合があります。

Imports Microsoft.Office.Interop

と書き加えてみてください。

投稿者:こうめい

編集 履歴 (0)

CreateObjectではなく、Newでインスタンスを生成するのではだめでしょうか?
とりあえず下記のコードは問題なく動作しました。



    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim oXL As Excel.Application
        Dim oWB As Excel.Workbook
        Dim oSheet As Excel.Worksheet
        Dim FileName As String
        FileName = "絶対パス"
        oXL = New Excel.Application
        oWB = oXL.Workbooks.Open(FileName)
        oSheet = oWB.Worksheets(1)
        oSheet.PrintOut()
        oWB.Close()
        oXL.Application.Quit()
        oSheet = Nothing
        oWB = Nothing
        oXL = Nothing
    End Sub

[ メッセージ編集済み 編集者: kanai 編集日時 2004-10-06 10:25 ]

投稿者:kanai

編集 履歴 (0)

Dim oXL As Excel.Application
Dim oWB As Excel.Workbook
Dim oSheet As Excel.Worksheet
oXL = New Excel.Application
の4箇所に波線がつきます。参照設定にはOFFICEの設定を追加しただけですが、それ以外もっと指定する必要があるのでしょうか。それともシステム的にVS.NET以外のソフトが必要なのでしょうか?

kanaiさんの書き込み (2004-10-06 10:24) より:

CreateObjectではなく、Newでインスタンスを生成するのではだめでしょうか?

とりあえず下記のコードは問題なく動作しました。



    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim oXL As Excel.Application
        Dim oWB As Excel.Workbook
        Dim oSheet As Excel.Worksheet
        Dim FileName As String
        FileName = "絶対パス"
        oXL = New Excel.Application
        oWB = oXL.Workbooks.Open(FileName)
        oSheet = oWB.Worksheets(1)
        oSheet.PrintOut()
        oWB.Close()
        oXL.Application.Quit()
        oSheet = Nothing
        oWB = Nothing
        oXL = Nothing
    End Sub

[ メッセージ編集済み 編集者: kanai 編集日時 2004-10-06 10:25 ]

投稿者:こうめい

編集 履歴 (0)

こうめいさんの書き込み (2004-10-06 12:02) より:

Dim oXL As Excel.Application

Dim oWB As Excel.Workbook

Dim oSheet As Excel.Worksheet

oXL = New Excel.Application

の4箇所に波線がつきます。参照設定にはOFFICEの設定を追加しただけですが、それ以外もっと指定する必要があるのでしょうか。それともシステム的にVS.NET以外のソフトが必要なのでしょうか?

こんにちは。

Microsoft ExcelX.X Object LibraryとMicrosoft OfficeX.X Object Libraryを参照設定で追加でどうですか?

僕もExcelをオートメーションで動かしていますが、Microsoft ExcelX.X Object Libraryを参照設定から削除するとご指摘の場所が波線になり、参照設定に追加すると波線が消えますよ。

投稿者:とっと

編集 履歴 (0)

えるにえさんの書き込み (2004-10-05 22:28) より:

ラッパーの違いにより Excel ではなく、

Microsoft.Office.Interop.Excel になっている場合があります。

もしこれが原因であれば、
Imports Excel = Microsoft.Office.Interop.Excel
と書いてみてはどうでしょう。

以下は補足です。

System.Windows.Forms.Labelクラスを使いたいときに



Imports System.Windows
Dim label1 As Forms.Label

みたいにはしませんよね。



Imports System.Windows.Forms
Dim label1 As Label

とするでしょう。

今回の件も、Microsoft.Office.Interop.Excel.Application クラスを使いたいのであれば



Imports Microsoft.Office.Interop.Excel
Dim oXL As Application

などと書けばいい……はずなのですが、
その書き方だと、System.Windows.Forms.Application クラスとバッティングするんですよね。

投稿者:いのまた

編集 履歴 (0)

皆さんありがとう御座いました。おかげさまで成功です。

投稿者:こうめい

編集 履歴 (0)
ウォッチ

この質問への回答やコメントをメールでお知らせします。