タイトル | : VB2010でのエクセルの起動と終了 |
記事No | : 10774 |
投稿日 | : 2012/04/09(Mon) 14:44 |
投稿者 | : かっちゃん |
いつも大変お世話になっております。 今回も苦労しておりますよろしくお願いいたします
Win-7でVB2010を使っております フォームアプリケーションからクラスライブラリを通り エクセルシートを読んで処理するプログラムです。
質問1 エクセルの起動を一度にしたいので CASE 0 の エクセル起動の中にエクセルワークエリアDIM5行を入れたいのですがエラーになります。 Public Sub SetInXls の 下に エクセルワークエリア5行を入れてありますが、SetInXls を通るたびに エクセルが起動してしまいます。 一番先頭のPublic Class KaClass の 下にエクセルワークエリアDIM5行入れましたら、プログラムが終了するまでエクセルは停止しなくなりました。 エクセルを使用するフォームでエクセルを立ち上げ、フォームがCLOSEになったらエクセルを終了するようにしたいのですがどのように作成すればよろしいでしょうか
質問2 CASE 6 の 保存と終了もエラーとなります
すみません、よろしくお願いいたします。
**ブック名:ABC・シート名:エクセルシート (1列目) (2列目) (1行目) 100 1111 (2行目) 200 2222
** フォームアプリケーション ** Private Sub cmdJiko_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdJiko.Click ' Excelを起動(入力) Call KaOBJ.SetInXls(0, 0, "", "", "", 0, 0, 0, "", "") ' 既存のワークブックを開く Call KaOBJ.SetInXls(1, 0,”C”, "ABC", "エクセルシート", 1, 0, 0, "", "") ‘ エクセルの最終行確保 wklngLastSu = KaOBJ.NI ‘ 1行目から 100, 1111, 200, 2222 の順に表示する wklngRow = 1 Do Until wklngRow > wklngLastSu Call KaOBJ.SetInXls(3, 1, "", "", "", 0, 0, 0, Str(wklngRow), "1") MSGBOX (KaOBJ.NI) Call KaOBJ.SetInXls(3, 1, "", "", "", 0, 0, 0, Str(wklngRow), "2") MSGBOX (KaOBJ.NI) wklngRow = wklngRow + 1 Loop ' Excelを終了 Call KaOBJ.SetInXls(6, 1, "", "", "", 0, 0, 0, "", "") Call KaOBJ.SetInXls(7, 0, "", "", "", 0, 0, 0, "", "") End Sub
** クラスライブラリ・オブジェクト名:KaOBJ ** Imports XL = Microsoft.Office.Interop.Excel Public Class KaClass
Public ReadOnly Property NI() As String Get NI = CStr(wklngItem) End Get End Property
Public Sub SetInXls(ByRef Flag As Byte, ByRef SubFl As Byte, ByRef FrmItem As String, ByRef strItem As String, ByRef SubstrIm As String, ByRef bytItem As Byte, ByRef intItem As Short, ByRef lngItem As Integer, ByRef TblX As String, ByRef TblY As String) ' エクセルワークエリア Dim xlsInApp As New XL.Application Dim xlsInBooks As XL.Workbooks Dim xlsInbook As XL.Workbook Dim xlsInSheets As XL.Sheets Dim xlsInSheet As XL.Worksheet Select Case Flag Case 0 ' Excel起動 ' xlsInApp = CreateObject("Excel.Application") 不要? Case 1 Select Case SubFl Case 0 ' 既存のエクセルシート使用 xlsInBooks = xlsInApp.Workbooks xlsInbook = xlsInBooks.Open(Trim(FrmItem) & Trim(strItem) & ".xls") xlsInSheets = xlsInbook.Worksheets xlsInSheet = xlsInbook.Sheets(Trim(SubstrIm)) 'シートの最終セルを選択します xlsInSheet.Cells.SpecialCells(Microsoft.Office.Interop.Excel.XlCellType.xlCellTypeLastCell).Select() '最終行を表示しています wklngItem = xlsInApp.ActiveCell.Row End Select Case 3 Select Case SubFl Case 0 ' エクセルへ内容を移送 xlsInSheet.Cells(Val(TblX), Val(TblY)) = strItem Case 1 ' エクセルの内容をワークへ移送 wklngItem = xlsInSheet.Range(xlsInSheet.Cells(Val(TblX), Val(TblY)), xlsInSheet.Cells(Val(TblX), Val(TblY))).Value.ToString End Select Case 6 ' オブジェクトを解放 xlsInSheet = Nothing Select Case SubFl Case 0 ' エクセルを保存して終了する xlsInbook.Close(True) xlsInbook = Nothing Case 1 ' エクセルを保存せず終了する xlsInbook.Close(False) xlsInbook = Nothing Case 2 ' Excelをテキストで保存する xlsInApp.DisplayAlerts = False xlsInSheet.SaveAs(Filename:=Trim(FrmItem) & Trim(strItem) & ".txt", FileFormat:=Excel.XlWindowState.xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, CreateBackup:=False) xlsInApp.DisplayAlerts = True End Select Case 7 ' エクセル終了 xlsInApp.Quit() xlsInApp = Nothing End Select End Sub
Class
|