tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルエクセルをコピーし、行の高さも複写出来ますか?
記事No1548
投稿日: 2005/04/03(Sun) 21:42
投稿者匿名希望
[OSのVer]:Windows 2000 XP   [VBのVer]:VB.NET 2003

    下記の様にコピーをしていて、プロセスもきちんと終了しますが、
    エクセルの行の高さまでは複写出来ません。
  以前VB6 でコーディングしていた時は Rows で複写して、行の高さも複写出来ましたが、
  .NET での複写は Range 又は _Default を使用した方がいいとのアドバイスを受けましたので、
  取り込んでみたのですが…どうにか、行の高さまで複写出来る方法のアドバイスを
  頂けないでしょうか?

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles Button1.Click
        Dim xlApp As Excel.Application
        Dim xlsSheet As Excel.Worksheet
        Dim xlsBooks As Excel.Workbooks
        Dim xlsBook As Excel.Workbook
        Dim xlsSheets As Excel.Sheets
        Dim objCells As Excel.Range
        Dim objRows As Excel.Range
        Dim R1, R2 As Excel.Range
        Dim RCopy As Excel.Range
        Dim RPaste As Excel.Range

        xlApp = New Excel.Application

        xlsBooks = xlApp.Workbooks
        xlsBook = xlsBooks.Open("c:\Test.xls")
        xlsSheets = xlsBook.Worksheets
        xlsSheet = xlsSheets.Item(1)

        objCells = xlsSheet.Cells

        R1 = DirectCast(objCells._Default(1, 1), Excel.Range)
        R2 = DirectCast(objCells._Default(4, 3), Excel.Range)
        RCopy = xlsSheet.Range(R1, R2)
        RCopy.Copy()
        RPaste = DirectCast(objCells._Default(6, 1), Excel.Range)
        RPaste.Insert()

        System.Runtime.InteropServices.Marshal.ReleaseComObject(R1)
        System.Runtime.InteropServices.Marshal.ReleaseComObject(R2)
        System.Runtime.InteropServices.Marshal.ReleaseComObject(RCopy)
        System.Runtime.InteropServices.Marshal.ReleaseComObject(RPaste)

        System.Runtime.InteropServices.Marshal.ReleaseComObject
(objCells)                 'Cells の開放

        xlApp.Visible = True

        System.Runtime.InteropServices.Marshal.ReleaseComObject
(xlsSheet)            'xlSheet の開放
        System.Runtime.InteropServices.Marshal.ReleaseComObject
(xlsSheets)           'xlSheets の開放

        System.Runtime.InteropServices.Marshal.ReleaseComObject
(xlsBook)             'xlBook の開放
        System.Runtime.InteropServices.Marshal.ReleaseComObject
(xlsBooks)            'xlBooks の開放

        System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp)              'xlApp
を開放

    End Sub  

[ツリー表示へ]
タイトルRe: エクセルをコピーし、行の高さも複写出来ますか?
記事No1549
投稿日: 2005/04/03(Sun) 22:18
投稿者花ちゃん
>   以前VB6 でコーディングしていた時は Rows で複写して、行の高さも複写出来ましたが、

セル範囲をコピーした場合は行の高さまではコピーできないかと(Excel単独で使用しても)
行単位で範囲を指定した場合は行の高さもコピーできますが。

従って、行単位で範囲を指定してコピーするか、後で行の高さだけを取得して
変更するするしかないのでは。

[ツリー表示へ]
タイトルRe^2: エクセルをコピーし、行の高さも複写出来ますか?
記事No1550
投稿日: 2005/04/03(Sun) 22:32
投稿者匿名希望
[OSのVer]:Windows    [VBのVer]:VB.NET  
 早速のご回答有難う御座います。
 行単位で範囲を指定するとありますが、
 以前のアドバイスで、複写のときは、 Rows を使用せず、
 Range を使用した方がいいとありましたが、
 Rows の様な、行の指定の複写の方法というのがあるのでしょうか?
 アドバイスの程宜しくお願い致します。

[ツリー表示へ]
タイトルRe^3: エクセルをコピーし、行の高さも複写出来ますか?
記事No1551
投稿日: 2005/04/03(Sun) 22:53
投稿者花ちゃん
>  以前のアドバイスで、複写のときは、 Rows を使用せず、
>  Range を使用した方がいいとありましたが、

そのような事どなたも言っておられないかと思うのですが、どこに書いてましたか?

[ツリー表示へ]
タイトルRe^4: エクセルをコピーし、行の高さも複写出来ますか?
記事No1552
投稿日: 2005/04/03(Sun) 23:01
投稿者匿名希望
[OSのVer]:Windows    [VBのVer]:VB.NET 
申し訳御座いません。
私の認識不足でした。
下記のアドバイスを、てっきり Rows を使用しない方がいいのかと
思ったのです。申し訳ありませんでした。
 
RangeオブジェクトのRowsプロパティやColumnsプロパティは、
Cellsプロパティ同様、「引数を取らない」仕様になっていますので、
X = R.Rows  なら良いですが、 X = R.Rows("1:2") のような構文は、
ReleaseComObject できないオブジェクトを生成する結果になるかと。

[ツリー表示へ]
タイトルRe^5: エクセルをコピーし、... (訂正)
記事No1553
投稿日: 2005/04/04(Mon) 00:25
投稿者花ちゃん
        Dim xlRange As Excel.Range
        Dim xlRows As Excel.Range
        xlRows = xlSheet.Rows
       ' xlRange = DirectCast(xlRows("1:5"), Excel.Range)
        xlRange = xlRows("1:5")
        xlRange.Copy()

        System.Runtime.InteropServices.Marshal.ReleaseComObject(xlRows)
        System.Runtime.InteropServices.Marshal.ReleaseComObject(xlRange)

上記ならプロセスが終了しておりますが、xlRange = xlRows("1:5") の部分を
xlRange = DirectCast(xlRows.Rows(("1:5"), Excel.Range) に変えると終了しませんでした。

>         objRows = xlsSheet.Rows

>         RCopy = DirectCast(objRows.Rows("1:5"), Excel.Range)

          
objRows は xlsSheet.Rows なので objRows.Rows("1:5") のような使い方が間違って
いるので  RCopy = DirectCast(objRows("1:5"), Excel.Range) なら終了するはずですが。

[ツリー表示へ]
タイトルアドバイス、有難う御座います
記事No1562
投稿日: 2005/04/04(Mon) 21:19
投稿者匿名希望
[OSのVer]:Windows XP   [VBのVer]:VB.NET 2003 
早々のアドバイス有難う御座います。
皆様には、今回の数々の質問に丁寧にご回答頂き、
誠に有難う御座います。
自分に未熟さを痛感致しました。
今後も、このサイトをフルに活用させて頂き、
勉強させて頂きます。
有難う御座いました。今後とも宜しくお願い致します。

[ツリー表示へ]
タイトル解決出来ました。
記事No1563
投稿日: 2005/04/04(Mon) 21:45
投稿者匿名希望
[OSのVer]:Windows    [VBのVer]:VB.NET  
        
> objRows は xlsSheet.Rows なので objRows.Rows("1:5") のような使い方が間違って
> いるので  RCopy = DirectCast(objRows("1:5"), Excel.Range) なら終了するはずですが。

ご指摘の通りに修正し、確認しました所、
行の高さまで、正常に複写することが出来ました。
有難う御座いました。
今後とも、ご指導のほど宜しくお願い致します。

[ツリー表示へ]