投稿時間: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
|