tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re^6: 既存のExcelファイルにシートを追加
投稿日: 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
-----

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

古いスレッドにレスはつけられません。