[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2005/08/24(Wed) 17:58
投稿者名:ま〜さ
URL :
タイトル:
Excelプロセスが残る
OS)Windows2000/XP  VB.net  Excel2000/2003

はじめまして、いつも利用させていただいております。
語り尽くされた問題かも知れませんが、"Excelのプロセスが残る"ということ
で添付のようなことが起きました。
3)〜4)のコーディング(Excelのセルにデータを貼り付ける)プロセスが正常に終了して
いたプログラムに1)〜2)(編集のための情報をセルから入手する)を追加しましたとこ
ろExcelプロセスが終了しない事象が起きました。
(a)〜(e)まで5セルの内容を取得しようとすると終了しませんがこのうち2行をコメント
アウトし、3セルを取得にすると正常に終了します。
とりあえず、Cellsの使用をやめRangeで取得【5)〜6)参照】するように変更したら動作
するようになってますので現在は問題にはなっていません。
後学のためなにがいけなかったかお教えいただけませんでしょうか?

--------------------------------------------------
1)      Const yLine As Integer = 3
        Const yQtyQ As Integer = 8
        Const yQtyX As Integer = 9
        Const yQtyN As Integer = 10
        Const yQtyG As Integer = 11
        Const yPrice As Integer = 12
        Const yAmount As Integer = 13
        xlSheet = xlSheets(cDetailSheet)                
        xlCells = xlSheet.Cells
(a)     zQtyQ = xlCells(yLine, yQtyQ).text              'QTY1 TAG
(b)     zQtyX = xlCells(yLine, yQtyX).text              'QTY2 TAG
(c)     zQtyN = xlCells(yLine, yQtyN).text              'QTY3 TAG
(d)     zQtyG = xlCells(yLine, yQtyG).text              'QTY4 TAG
(e)     zPrice = xlCells(yLine, yPrice).text            'Price TAG
        zAmount = xlCells(yLine, yAmount).text          'Amount TAG
        MRComObject(xlCells)                            'xlCells の開放
2)      MRComObject(xlSheet)                            'xlSheet の開放
        
3)      '===== 5. 共通(Head)データの編集 =====
        Call pCommonData()
        xlSheet = xlSheets(cCommonSheet)
        xlRange = xlSheet.Range("e3:H180")              'データの入力セル範囲
        xlRange.Value = strDat                          'セルへデータの入力
        MRComObject(xlRange)                            'xlRange の開放
        MRComObject(xlSheet)                            'xlSheet の開放

        Call pCommonData2()
        xlSheet = xlSheets(cControlSheet)
        xlRange = xlSheet.Range("d9:e45")               'データの入力セル範囲
        xlRange.Value = strDat                          'セルへデータの入力
        MRComObject(xlRange)                            'xlRange の開放
4)      MRComObject(xlSheet)                            'xlSheet の開放
        :
        :

-----------------------------------------------------
5)      Const yQtyQCell As String = "H3"
        Const yQtyXCell As String = "I3"
        Const yQtyNCell As String = "J3"
        Const yQtyGCell As String = "K3"
        Const yQtyPCell As String = "L3"
        Const yQtyACell As String = "M3"
        xlSheet = xlSheets(cDetailSheet)                    '明細データシート
        xlRange = xlSheet.Range(yQtyQCell)
        zQtyQ = xlRange.Text                                'QTY1 TAG
        MRComObject(xlRange)                                'xlCells の開放
        xlRange = xlSheet.Range(yQtyXCell)
        zQtyX = xlRange.Text                                'QTY2 TAG
        MRComObject(xlRange)                                'xlCells の開放
        xlRange = xlSheet.Range(yQtyNCell)
        zQtyN = xlRange.Text                                'QTY3 TAG
        MRComObject(xlRange)                                'xlCells の開放
        xlRange = xlSheet.Range(yQtyGCell)
        zQtyG = xlRange.Text                                'QTY4 TAG
        MRComObject(xlRange)                                'xlCells の開放
        xlRange = xlSheet.Range(yQtyPCell)
        zPrice = xlRange.Text                               'Price TAG
        MRComObject(xlRange)                                'xlCells の開放
        xlRange = xlSheet.Range(yQtyACell)
        zAmount = xlRange.Text                              'Amount TAG
        MRComObject(xlRange)                                'xlCells の開放
6)      MRComObject(xlSheet)                                'xlSheet の開放

ちなみに3)〜4)の作成の際は掲示板の記述を参考にさせていただきました。
おかげさまで3)〜4)の部分についてはあまり問題なく動作しました。

投稿時間:2005/08/24(Wed) 18:24
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re: Excelプロセスが残る
> (a)     zQtyQ = xlCells(yLine, yQtyQ).text              'QTY1 TAG
> (b)     zQtyX = xlCells(yLine, yQtyX).text              'QTY2 TAG
> (c)     zQtyN = xlCells(yLine, yQtyN).text              'QTY3 TAG
> (d)     zQtyG = xlCells(yLine, yQtyG).text              'QTY4 TAG
> (e)     zPrice = xlCells(yLine, yPrice).text            'Price TAG

掲示板が間違っていますよ(だからコードも間違うのかな)

.NETからExcelの基本的な操作方法(2) の記述と見比べて下さい。

投稿時間:2005/08/24(Wed) 20:02
投稿者名:ま〜さ
URL :
タイトル:
Re2: Excelプロセスが残る(ごめんなさい、理解力不足で)
ありがとうございます。
ごめんなさい。VB.NETでのプログラムです。
(引っ越したほうがよければ書き直します)

> > (a)     zQtyQ = xlCells(yLine, yQtyQ).text              'QTY1 TAG
>
> 掲示板が間違っていますよ(だからコードも間違うのかな)

> .NETからExcelの基本的な操作方法(2) の記述と見比べて下さい。

このページはTEXTファイルにしてバイブルのように使用しております。
ご指摘わかりませんでした。
    xlRange1 = xlCells(5, 3)
        xlRange1.Value = "12"
        MRComObject(xlRange1)
一旦、Excel.RANGEで定義した項目にCells(x,y)をセットして、
そこから取り出しなさいという意味ですか?
お手数おかけします。

投稿時間:2005/08/24(Wed) 21:58
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re: Re2: Excelプロセスが残る(ごめんなさい、理解力不足で)
> そこから取り出しなさいという意味ですか?
> お手数おかけします。

hhttp://www.bcap.co.jp/hanafusa/dotnet/Excel08.htm
自分で見比べて違う箇所を直して試して見て下さい。
自分でやらないと身につかないし、応用も利きませんよ。

hhttp://www.bcap.co.jp/hanafusa/dotnet/Excel01.htm
hhttp://www.bcap.co.jp/hanafusa/bbs/wforum.cgi?no=1000&reno=997&oya=997&mode=msgview&page=30

投稿時間:2005/08/25(Thu) 13:45
投稿者名:ま〜さ
URL :
タイトル:
Re4: Excelプロセスが残る(ごめんなさい、理解力不足で)
お手数おかけして申し訳ございません。

今回はRangeで逃げたので現在は問題になってませんが、
ご指摘のように次の機会でCellsを使用したいとき "応用できない" ので
掲示板に書き込みさせていただきました。
お教えいただいたページをみてもスグに理解できませんでしたので
じっくり考えて見ます。

わかったら書き込みします。ありがとうございました。

投稿時間:2005/08/26(Fri) 16:02
投稿者名:ま〜さ
URL :
タイトル:
Re2': Excelプロセスが残る(ごめんなさい、理解力不足で)
> > そこから取り出しなさいという意味ですか?
> > お手数おかけします。
>
> hhttp://www.bcap.co.jp/hanafusa/dotnet/Excel08.htm
> 自分で見比べて違う箇所を直して試して見て下さい。
> 自分でやらないと身につかないし、応用も利きませんよ。
>
> hhttp://www.bcap.co.jp/hanafusa/dotnet/Excel01.htm
> hhttp://www.bcap.co.jp/hanafusa/bbs/wforum.cgi?no=1000&reno=997&oya=997&mode=msgview&page=30

いろいろやってみましたがうまくできませんでした。
下記のように変えたら動作するようにはなりました。(当初から理解していたつもり)
    Dim xlRange1 As Excel.Range

    xlRange1 = xlCells(yLine, yQtyQ)
    zQtyQ = xlRange1.Value                              'QTY1 TAG
    MRComObject(xlRange1)
    xlRange1 = xlCells(yLine, yQtyX)                    'QTY2 TAG
    zQtyX = xlRange1.Value                              'QTY1 TAG
    MRComObject(xlRange1)
    xlRange1 = xlCells(yLine, yQtyN)                    'QTY3 TAG
    zQtyN = xlRange1.Value                              'QTY1 TAG
    MRComObject(xlRange1)
    xlRange1 = xlCells(yLine, yQtyG)                    'QTY4 TAG
    zQtyG = xlRange1.Value                              'QTY1 TAG
    MRComObject(xlRange1)
    xlRange1 = xlCells(yLine, yPrice)                   'Price TAG
    zPrice = xlRange1.Value                             'QTY1 TAG
    MRComObject(xlRange1)
    xlRange1 = xlCells(yLine, yAmount)                  'Amount TAG
    zAmount = xlRange1.Value                            'QTY1 TAG

経緯を書くと、当初は取出したい項目が3項目でした

    zQtyQ = xlCells(yLine, yQtyQ).value                 'QTY1 TAG
    zQtyX = xlCells(yLine, yQtyX).value                 'QTY2 TAG
    zQtyN = xlCells(yLine, yQtyN).value                 'QTY3 TAG

Rangeを使いたくなかった(MachalMoveObj)を使用する度実行する必要があると、
お教え(掲示板)いただいていた。(Cellsは1回でイイ)
なら同じExcle.Range型の項目から内容を取りだすだけなのでCellsのみで
コーディングしたらいいのではと思ってコーディングしたら動作した。
(プロセスが正常に終了していた)
2項目追加したらうまく行かなくなった。
1項目でも5項目でもダメなら最初からダメにならないのかと、いまだまったく理解できない。

これが正解ということなんでしょうか。