投稿日 | : 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