VB6.0用掲示板の過去のログ(No.2)−VBレスキュー(花ちゃん)
[記事リスト] [新規投稿] [新着記事] [ワード検索] [管理用]

投稿日: 2005/01/26(Wed) 19:32
投稿者ligaro
URL
タイトル別フォームから同じExcelシートを使う

名簿作成システムを作っています。
フォーム(1)からの処理結果を出力したエクセルシートに、
続けてフォーム(2)の処理結果も出力したいと思っています。
フォーム(1)の処理結果は、(1,1)に番号、(1,2)に氏名という風に
(1,1)から(1,5)までを一人分の情報としてエクセルのシートに出力したもので、
(2,1)から(2,5)までがまた一人分、と一行ずつに個人情報が入っているものです。
そのシートに続けてフォーム(2)の処理結果も出力していきます。
フォーム(2)では使用するデータが違うだけで処理内容はフォーム(1)と同じです。
例えば、フォーム(1)の処理結果が15行目まで出力されたものだったら、
フォーム(2)は16行目から出力させていきます。
お聞きしたいことは、
・xlNewsheetをグローバル変数として使うことは可能か
・フォーム(1)から開いたエクセルシートは、一度閉じたり保存したりしなくても
フォーム(2)で開けるか(使えるか)についてです。よろしくお願いします。
xlBook,xlNewsheet,lastrowはグローバル変数です。

フォーム(1)
Private Sub Command1_Click()
Set xlApp = CreateObject("Excel.Application") 'エクセル起動
xlFileName = strFileName ’一つ前のフォームからのファイルパス
Set xlBook = xlApp.Workbooks.Open(xlFileName)
Set xlNamesheet = xlBook.Sheets.Item(1)
Set xlApp = CreateObject("Excel.Application") ’出力用の新しいエクセルシートを開く
Set xlBook = xlApp.Workbooks.Add
Set xlNewsheet = xlBook.Worksheets(1)

lastrow = 1
cnt = 0
rowNum = xlNamesheet.Range("A1").CurrentRegion.Rows.Count ’開いたエクセルのデータの行数を数
える
For i = 1 To rowNum
shusseki = xlNamesheet.Cells(i, 5).Value ’5セル目(出席回数)をチェック
        If IsNumeric(shusseki) Then ’5セル目に数字が入っていれば
                    その人の情報(5セル分)を出力用の新しいエクセルシートに出力
            stno = xlNamesheet.Cells(i, 1)
            stno = Form10.Text1 & stno
            xlNewsheet.Cells(lastrow, 1) = stno
            lastrow = lastrow + 1
            cnt = cnt + 1
            For j = 2 To 5
            xlNewsheet.Cells(cnt, j).Value = xlNamesheet.Cells(i, j).Value
            Next j
        End If
Next i

フォーム(2)
Private Sub Command1_Click()
Set xlApp = CreateObject("Excel.Application")
xlFileName = strFileName ’パス名はフォーム(1)と同じですがデータは別物です
Set xlBook2 = xlApp.Workbooks.Open(xlFileName)
Set xlNamesheet = xlBook2.Sheets.Item(1) ’これは必要でしょうか?
Set xlNewsheet = xlBook.Worksheets(1) ’ここでエラーが出てしまいます。
   このxlNewsheetはグローバル変数で宣言してありフォーム(1)と同じもの、出力用のシートです

rowNum = xlNamesheet.Range("A1").CurrentRegion.Rows.Count
For i = 1 To rowNum
shusseki = xlNamesheet.Cells(i, 5).Value
        If IsNumeric(shusseki) Then
            stno = xlNamesheet.Cells(i, 1)
            stno = Form7.Text1 & stno
            xlNewsheet.Cells(lastrow, 1) = stno ’同じシートに出力
            lastrow = lastrow + 1
            cnt = cnt + 1
            For j = 2 To 5
            xlNewsheet.Cells(cnt, j).Value = xlNamesheet.Cells(i, j).Value
            Next j
        End If
Next i


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

- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)

- VBレスキュー(花ちゃん) - - Web Forum -