タイトル | : Re^6: 既存のExcelファイルにシートを追加 |
記事No | : 12203 |
投稿日 | : 2008/05/03(Sat) 13:14 |
投稿者 | : べた |
ありがとうございます。
説明、および、ソースのおかしいところの指摘、解説 ありがとうございます。 大変参考になります。
> after:=Worksheets(〜) ではなく、 > after:=xlBook.Worksheets(〜) とせねばなりません。
> 親オブジェクトの指定(この場合は xlBook)を忘れていると、今回のように > 2回目以降の動作が失敗したり、Excel が終了しなくなるなどの問題を引き起こします。 については、前の書き込みで、魔界の仮面弁士さんからご指摘して貰っているのに 生かされていませんでした。
>> Set xlApp = CreateObject("Excel.Application") > 参照設定している場合は、 > Set xlApp = New Excel.Application > の方が良いでしょう。 Excel・Word関係 [ http://hanatyan.sakura.ne.jp/vbhlp/excelframe.htm ] Office アプリケーションのインスタンスを作成する場合は、New 関数の代わりに CreateObject 関数を使用してください。 とありましたので、CreateObject 関数を使いました。
>> tmpSheet = ws.Name >> If InStrB(1, tmpSheet, strExcelSheet, -1) <> 0 Then >なぜ、(InStr ではなく)InStrB を使っておられるのでしょうか? バイトとバイナリを勘違いしていました。 If InStr(1, tmpSheet, strExcelSheet, 0) <> 0 Then で、比較のモードは、”-1”と”0”のどちらがよいのでしょうか。
>> Do Until objDs.EOF > ちなみに、Recordset オブジェクトの内容をワークシートに転記するために、 > CopyFromRecordset というメソッドが用意されていたりもします。 知りませんでした。調べてみます。
>> With xlSheet >> End With >これは一体? 1行目に見出し行を入れています。 データを設定したあと、罫線などをつけています。 その部分の処理を除いていました。
----- xlSheet.Cells.NumberFormat = "@" ColCnt = 17 With xlSheet .Cells(1, 1) = "項目1" .Cells(1, 2) = "項目2" .Cells(1, 3) = "項目3" : : .Cells(1, 16) = "項目16" .Cells(1, 17) = "項目17" End With
I = 2 Do Until objDs.EOF With xlSheet If Not IsNull(objDs(2).Value) Then .Cells(I, 1) = objDs(1).Value & " " & objDs(2).Value Else .Cells(I, 1) = objDs(1).Value End If .Cells(I, 2) = objDs(3).Value .Cells(I, 3) = objDs(4).Value If Not IsNull(objDs(5).Value) Then .Cells(I, 4) = objDs(5).Value End If .Cells(I, 5) = objDs(6).Value : : .Cells(I, 16) = objDs(17).Value .Cells(I, 17) = objDs(18).Value End With
I = I + 1 objDs.DbMoveNext Loop RowCnt = I - 1
With xlSheet .Range(.Cells(1, 1), .Cells(RowCnt, ColCnt)).Borders.LineStyle = xlContinuous '実線 .Range(.Cells(1, 1), .Cells(RowCnt, ColCnt)).Borders(xlEdgeTop).LineStyle = xlGray75 .Range(.Cells(1, 1), .Cells(RowCnt, ColCnt)).Borders(xlEdgeLeft).LineStyle = xlGray75 .Range(.Cells(1, 1), .Cells(RowCnt, ColCnt)).Borders(xlEdgeRight).LineStyle = xlGray75 .Range(.Cells(RowCnt, 1), .Cells(RowCnt, ColCnt)).Borders(xlEdgeBottom).LineStyle = xlGray75 .Range(.Cells(1, 1), .Cells(1, ColCnt)).Borders(xlEdgeBottom).LineStyle = xlDouble .Range(.Cells(1, 1), .Cells(1, ColCnt)).Interior.Color = RGB(192, 192, 192)
If RowCnt <> 1 Then .Cells.VerticalAlignment = xlVAlignCenter .Range("A:A").HorizontalAlignment = xlLeft .Range("B:B", "Q:Q").HorizontalAlignment = xlVAlignCenter End If End With -----
|