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

タイトル Re^3: Excelが解放されない
投稿日: 2010/07/09(Fri) 13:04
投稿者魔界の仮面弁士
> 「xlSheet 変数を使って制御する」というのは、
> Set xlSheet = xlBook.Worksheets(L_Value)だけで、シートの選択はできており、
> このコードのみでよいということでしょうか?
取得しただけなので、選択はされていません。

xlBook.Sheets(L_Value).Select ではなく、
xlSheet.Select と記述しましょう、という意味です。


> ご指摘頂きました内容でわからない所がありました。
指摘の意図を順に説明していきます:



★1:シート系プロパティを使い分けましょう★

>> シートの種類(ワークシート、グラフ、ダイアログ、マクロシート)ごとに
>> .Worksheets / .Charts / .DialogSheets / .Excel4MacroSheets プロパティを
>> 使い分けるようにしましょう。

Excel のシートには、ワークシートやグラフシートなど、複数の種類があります。

たとえば、「シートの種類は問わないが、とにかく先頭のシート」という目的であれば、
xlBook.Sheets(1) といった表現で構いませんが、「先頭のワークシート」の意味ならば
xlBook.Worksheets(1) と記述した方が、より正確な表現となります。
(シート番号ではなく、シート名などを使うとよりベター)

また、もしもワークシートしか使っていない場合には、
 xlBook.Sheets(L_Value).Select
 xlBook.Worksheets(L_Value).Select
は同じ意味を持ちますが、他の種類のシートなどが含まれていると、
それぞれは別のシートを指し示す可能性があります。


★2:プロパティの取得回数は最低限にしましょう★

>> 同じシートならば、最初に取得した xlSheet 変数を使って制御するようにすべきです。

xlBook.Sheets(L_Value).Select を実行したときには、

 (1) xlBook 変数から、処理対象の Workbook オブジェクトを取得。
 (2) Workbook オブジェクトの Sheets プロパティから、Sheets オブジェクトを取得。
 (3) Sheets オブジェクトの既定のプロパティから、L_Value という
  Sheet オブジェクト(正確には Worksheet オブジェクト)を取得。
 (4) Sheet オブジェクトの Select メソッドを呼び出し、該当シートを選択。

という処理が実行されています。L_Value に対して検索処理が発生しています。

しかし処理対象のワークシートは、既に変数 xlSheet に取得済みなのですから、
ここでは xlSheet.Select と記述した方がスマートです。こちらの記述を使うと、

 (1) xlSheet 変数から、処理対象の Worksheet オブジェクトを取得。
 (2) Worksheet オブジェクトの Select メソッドを呼び出し、該当シートを選択。

という単純なステップで済みます。



>>     Name "\\Kq-001\工程集計\工程不良集計\Ppk集計" & "\" & "\Ppk管理図(原紙)" _
>>       As "\\Kq-001\工程集計\工程不良集計\Ppk集計" & "\" & "\Ppk管理図" & Gouki
> 間違いではありませんが、この部分、やや統一性が無いように見えました。
よく見ると微妙に間違っていますね。これだと、
 "\\Kq-001\工程集計\工程不良集計\Ppk集計\Ppk管理図(原紙)"
ではなく
 "\\Kq-001\工程集計\工程不良集計\Ppk集計\\Ppk管理図(原紙)"
というパスを操作していることになってしまいます。


> Name プロパティを使ったコードはどのようになるのか教えて頂けませんでしょうか。
"Ppk管理図(原紙)" というのはフォルダですよね。
Gouki が文字列であり、かつ、その中に "\" が含まれていないというパターンなら、
  FSO.GetFolder("\\Kq-001\工程集計\工程不良集計\Ppk集計\Ppk管理図(原紙)").Name = "Ppk管理図" & Gouki
といった感じです。ここで、FSO はFileSystemObject 型のオブジェクト変数です。

あるいは、
  FSO.MoveFolder "\\Kq-001\工程集計\工程不良集計\Ppk集計\Ppk管理図(原紙)", _
                 "\\Kq-001\工程集計\工程不良集計\Ppk集計\Ppk管理図" & Gouki
という書き方もできます。

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

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