0
私は、アイテム数に基づいてExcelワークブックを動的に作成しています。そして、各ワークブックに本質的に同じヘッダーを書きたいと思います。私の下の構文は、最初のブックには機能しますが、2番目に新しいブックが作成され、エラーがスローされます。複数のWOrkbosにヘッダーを書き込む
これは私の構文です - ヘッダー行が作成された各ブックに書き込まれるようにするにはどうすればよいですか?
Set xlApp = CreateObject("Excel.Application")
xlApp.Visible = True
Do While Not rs1.EOF
i = 0
x = 1
name = rs1.Fields(0).Value
Set xlWb = xlApp.Workbooks.Add
row = 1
xyz = 0
Set HeaderWrite = xlWb.Worksheets(1)
HeaderWrite.Cells(row, xyz + 1).Value = "Header 1"
xyz = xyz + 1
HeaderWrite.Cells(row, xyz + 1).Value = "Header 2"
xyz = xyz + 1
HeaderWrite.Cells(row, xyz + 1).Value = "Header 3"
xyz = xyz + 1
HeaderWrite.Cells(row, xyz + 1).Value = "Header 4"
xyz = xyz + 1
HeaderWrite.Cells(row, xyz + 1).Value = "Header 5"
xyz = xyz + 1
HeaderWrite.Cells(row, xyz + 1).Value = "Header 6"
xyz = xyz + 1
HeaderWrite.Cells(row, xyz + 1).Value = "Header 7"
xyz = xyz + 1
HeaderWrite.Cells(row, xyz + 1).Value = "Header 8"
xyz = xyz + 1
HeaderWrite.Cells(row, xyz + 1).Value = "Header 9"
xyz = xyz + 1
xlWb.Worksheets(1).Range("$A$2") = name
Set xlR = xlWb.Worksheets(1).Range("$N$2")
Set rs2 = Db.OpenRecordset("SELECT * FROM MasterDB", dbOpenDynaset)
With rs2
.MoveLast
.MoveFirst
Do While Not .EOF
xlR.Value = .Fields(0).Value
xlR.Offset(ColumnOffset:=1).Value = .Fields(2).Value
xlR.Offset(ColumnOffset:=2).Value = "Mainstreem"
HeaderWrite.Cells(row, xyz + 1).Value = "Dept_" & i
xyz = xyz + 1
HeaderWrite.Cells(row, xyz + 1).Value = "Item" & i
xyz = xyz + 1
HeaderWrite.Cells(row, xyz + 1).Value = "CRN" & i
xyz = xyz + 1
i = i + 1
Debug.Print i
If i = 50 Then
i = 0
x = x + 1
xlWb.SaveAs FileName:=sPath & sFile, FileFormat:=xlOpenXMLWorkbook
xlWb.Close SaveChanges:=True
Set xlWb = xlApp.Workbooks.Add
sFile = name & "_" & "SalesLog" & x & ".xlsx"
xlWb.Worksheets(1).Range("$C$2") = name
Set xlR = xlWb.Worksheets(1).Range("$Q$2")
Else
Set xlR = xlR.Offset(ColumnOffset:=3)
End If
.MoveNext
Loop
.Close
End With
あなたはそれは内にある、ブックを閉じて、ループの外にワークシートオブジェクト 'HeaderWrite'を設定していますループ( 'xlWb.Close SaveChanges:= True')、ワークシートオブジェクトを再び使用するときはもう使用できません。 – YowE3K
@ YowE3K - それを説明するああ。しかし、ヘッダ情報を一度書きたいだけです。ループの中に置くと、ループが繰り返されるたびにヘッダが書き込まれます。それを避けることについての考え方? – BellHopByDayAmetuerCoderByNigh
最初に 'xlWb'をどこに設定しているのか、そして' i'を最初に設定している場所が分からなければ、最も簡単な解決方法がわかりません。ワークブックを作成するループの中に 'If i = 0 Then'ステートメントを置くだけで簡単ですが、' HeaderWrite'オブジェクトを設定し、ヘッダーや他のワークブックの初期化が必要なものを書き出し、 'If i = 50 Then'ブロックすると、単にブックを閉じ、 'i = 0'を設定します。 (しかし、それはちょうど "私の頭の上から"提案です。) – YowE3K