- PR -

Excel.Applicationについて

1
投稿者投稿内容
こうめい
常連さん
会議室デビュー日: 2004/08/31
投稿数: 30
投稿日時: 2004-10-05 19:04
エクセルファイルを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
えるにえ
会議室デビュー日: 2001/09/21
投稿数: 10
投稿日時: 2004-10-05 22:28
ラッパーの違いにより Excel ではなく、
Microsoft.Office.Interop.Excel になっている場合があります。

Imports Microsoft.Office.Interop

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



こうめい
常連さん
会議室デビュー日: 2004/08/31
投稿数: 30
投稿日時: 2004-10-06 08:54
だめでした。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

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





kanai
ベテラン
会議室デビュー日: 2004/09/13
投稿数: 98
投稿日時: 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 ]
こうめい
常連さん
会議室デビュー日: 2004/08/31
投稿数: 30
投稿日時: 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以外のソフトが必要なのでしょうか?



引用:

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 ]

とっと
大ベテラン
会議室デビュー日: 2004/03/25
投稿数: 197
投稿日時: 2004-10-06 12:42
引用:

こうめいさんの書き込み (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を参照設定から削除するとご指摘の場所が波線になり、参照設定に追加すると波線が消えますよ。
いのまた
会議室デビュー日: 2003/07/08
投稿数: 5
投稿日時: 2004-10-06 14:25
引用:

えるにえさんの書き込み (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 クラスとバッティングするんですよね。
こうめい
常連さん
会議室デビュー日: 2004/08/31
投稿数: 30
投稿日時: 2004-10-06 14:36
皆さんありがとう御座いました。おかげさまで成功です。
1

スキルアップ/キャリアアップ(JOB@IT)