tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル VB2010でのエクセルの起動と終了
投稿日: 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

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。