tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトルExcelの行をコピー
記事No12073
投稿日: 2008/04/22(Tue) 10:30
投稿者RRI
Dim xlApp  As Object

Set xlApp = CreateObject("Excel.application")

〜中略(ループ開始)

    xlApp.Worksheets(3).Rows("1:50").Copy
    xlApp.Worksheets(1).Rows(1).Select
    xlApp.Worksheets(1).Rows(1).Insert

〜以下略(ループ終了処理)

エクセルのシート3の1〜50行目をコピーして、シート1の1行目に
挿入(または貼付け)をしたいのですが
上のやり方だと1回目は出来るのですが、2回目から

xlApp.Worksheets(1).Rows(1).Selectのところで
RangeクラスのSelectプロパティを取得できません。

とエラーが出てしまいます。
そもそものやり方が間違っているのでしょうか?

説明が乏しいかもしれませんが、ご指導お願いします。

[ツリー表示へ]
タイトルRe: Excelの行をコピー
記事No12075
投稿日: 2008/04/22(Tue) 11:08
投稿者YK
こんにちは。

>     xlApp.Worksheets(3).Rows("1:50").Copy
>     xlApp.Worksheets(1).Rows(1).Select は無くても良いと思いますが。
>     xlApp.Worksheets(1).Rows(1).Insert

エラーの原因はWorksheets(1)がアクティブでない為
    xlApp.Worksheets(1).Select を追加すれば
>     xlApp.Worksheets(1).Rows(1).Select
>     xlApp.Worksheets(1).Rows(1).Insert

勘違いでしたら失礼

[ツリー表示へ]
タイトルRe^2: Excelの行をコピー
記事No12078
投稿日: 2008/04/22(Tue) 12:01
投稿者RRI
YKさん、ありがとうございます。

まさにその通りでした;;
Activateを入れたらちゃんと出来ました!

[ツリー表示へ]
タイトル続きですみません。
記事No12081
投稿日: 2008/04/22(Tue) 13:10
投稿者RRI
もとのひな型を行列共に同じ幅に設定することは出来るでしょうか?

Excelのマクロをとってみたのですが…

    Range("A1:Z50").Select
    Selection.Copy
    Sheets(1).Select
    Range("A1").Select
    Selection.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
    ActiveSheet.Paste

VBだとどこをどう直したらいいのか分かりません;;

ご指導お願いします。

[ツリー表示へ]
タイトルRe: 続きですみません。
記事No12086
投稿日: 2008/04/22(Tue) 14:46
投稿者YK
> もとのひな型を行列共に同じ幅に設定することは出来るでしょうか?

私ならこう書きます。
xlApp.ScreenUpdating = False
With xlApp.Worksheets("Sheet2")
    For i = 1 To 26
        .Columns(i).ColumnWidth = xlApp.Worksheets("Sheet1").Columns(i).ColumnWidth
    Next
    For i = 1 To 50
        .Rows(i).RowHeight = xlApp.Worksheets("Sheet1").Rows(i).RowHeight
    Next
End With
xlApp.ScreenUpdating = True

[ツリー表示へ]
タイトルRe: 続きですみません。
記事No12088
投稿日: 2008/04/22(Tue) 16:19
投稿者るしぇ
手作業でコピーする場合も、縦(または横)のみのセル幅を保持したまま
コピーしたい場合は列(または行)選択でコピーしますし、両方のセル幅を
保持したい場合はシート全体を選択してコピーすると思います。

そんな中、特定行だけコピーしてセル横幅を適用したい場合に、直接
セル横幅の値を設定してやるYKさんの手法は素晴らしいと思います。

もともと、Excelで『Active』とか『Select』といった類の単語が
使われている命令は不安定です。
(ちょっとした原因でアクティブにならないと失敗します)
>    Range("A1:Z50").Select
>    Selection.Copy

    Range("A1:Z50").Copy
で置き換えられるはずです。
マクロの記録で得られるコードをそのまま使用せず、ヘルプ等で構造を
理解した上で安定して実行できるプログラムに修正していくことを
お勧めします。

>エラーの原因はWorksheets(1)がアクティブでない為
>    xlApp.Worksheets(1).Select を追加すれば
>>     xlApp.Worksheets(1).Rows(1).Select
>>     xlApp.Worksheets(1).Rows(1).Insert
もしかしたら。。。だけどSelectしなくてもいいんじゃない?
つまりSelect命令を丸ごと削除したら。。。

[ツリー表示へ]
タイトルRe^2: 続きですみません。
記事No12098
投稿日: 2008/04/23(Wed) 10:23
投稿者RRI
YKさん、るしぇさん、ありがとうございます。

無事、コピーできるようになりました^^
ちゃんとヘルプを活用していかないとダメですね^^;

[ツリー表示へ]