Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


12602 / 13646 ツリー ←次へ | 前へ→

【9644】オブジェクトの開放 まさと 03/12/11(木) 15:39 質問
【9650】Re:オブジェクトの開放 りん 03/12/11(木) 20:13 回答
【9654】Re:オブジェクトの開放 まさと 03/12/12(金) 9:33 質問
【9661】Re:オブジェクトの開放 つん 03/12/12(金) 11:06 回答
【9687】Re:オブジェクトの開放 まさと 03/12/12(金) 16:06 お礼

【9644】オブジェクトの開放
質問  まさと  - 03/12/11(木) 15:39 -

引用なし
パスワード
   固定長テキストファイルをエクセルで開くマクロを作成しています。
目的は、すでに開いているエクセルファイに対して、マクロ実行により新規に開かれるエクセルファイルのデータの必要箇所をコピーして張り付けることです。ここで、すでに開いていたものとマクロにより開かれたもので、2つのエクセルブックが表示される状態なのですが、マクロにより開いたファイルを閉じた後もオブジェクトが開放されていないようなのです。
参照したファイル(テキストファイル)を削除しようとすると

”FILEを削除できません。ほかの人またはプログラムによって使用されています。ファイルを使用している可能性があるプログラムをすべて閉じてから、やり直してください。”

というメッセージが表示されます。
最初から開いていたエクセルまで閉じるとファイルの削除ができるのですが、
どのオブジェクトが開放されていないかわかりません。
以下にマクロを記述します。どなたか対応策をお教えください。

Sub Excel変換()

Dim Ebook As Excel.Application
Dim OpenFileName As Variant

'出力ファイルの選択
OpenFileName = Application.GetOpenFilename("テキストファイル,*.txt")

If OpenFileName <> False Then

  'オブジェクト変数にオブジェクトの参照を代入
  Set Ebook = New Excel.Application

  'ファイルのExcel展開
  Ebook.Workbooks.OpenText Filename:=OpenFileName _
            , DataType:=xlFixedWidth _
            , FieldInfo:=Array(Array(0, 1) _
            , Array(9, 1) _
            , Array(16, 1) _
            , Array(22, 1) _
            , Array(29, 1) _
            , Array(37, 1) _
            , Array(45, 1) _
            , Array(53, 1) _
            , Array(61, 1) _
            , Array(68, 1)) _
            , TrailingMinusNumbers:=True

  'Excel表示
  Ebook.Visible = True

  'オブジェクトの開放
  Set Ebook = Nothing

End If

End Sub

【9650】Re:オブジェクトの開放
回答  りん E-MAIL  - 03/12/11(木) 20:13 -

引用なし
パスワード
   まさと さん、こんばんわ。
>”FILEを削除できません。ほかの人またはプログラムによって使用されています。ファイルを使用している可能性があるプログラムをすべて閉じてから、やり直してください。”
↓テキストファイルを開いている
>  'ファイルのExcel展開
>  Ebook.Workbooks.OpenText Filename:=OpenFileName _
>            , DataType:=xlFixedWidth _
>            , FieldInfo:=Array(Array(0, 1) _
>            , Array(9, 1) _
<<<<略>>>>
>
>  'Excel表示
>  Ebook.Visible = True
>
>  'オブジェクトの開放
>  Set Ebook = Nothing
>
>End If
>
>End Sub

ブック(テキストファイル)を名前をつけて保存したり、閉じたりする処理が行われていない → テキストファイルがひらきっぱなしなので、削除できません。
別名(テキストまたはブック)で保存をするか、このシートをどこかのブックにコピーして、テキストファイルを閉じない限り、アクセス中扱いになります。

【9654】Re:オブジェクトの開放
質問  まさと  - 03/12/12(金) 9:33 -

引用なし
パスワード
   りんさん、回答ありがとうございます。

>ブック(テキストファイル)を名前をつけて保存したり、閉じたりする処理が行われていない → テキストファイルがひらきっぱなしなので、削除できません。
>別名(テキストまたはブック)で保存をするか、このシートをどこかのブックにコピーして、テキストファイルを閉じない限り、アクセス中扱いになります。

私の理解不足でうまく飲み込めません。
開いたファイルはEbookであり、
set Ebook = nothing
で開放できているものと考えていました。
具体的にどういうソースを追加すればよいのでしょうか?
よろしくお願いします。

【9661】Re:オブジェクトの開放
回答  つん E-MAIL  - 03/12/12(金) 11:06 -

引用なし
パスワード
   おはようございます。
りんさん、横から失礼します。
うーん、りんさんの横入りするなんて、私って勇気あるー(笑)

>私の理解不足でうまく飲み込めません。
>開いたファイルはEbookであり、
>set Ebook = nothing
>で開放できているものと考えていました。

>set Ebook = nothing
は、単に変数を開放してるだけで、
実際のファイルを閉じているのとは、また訳が違います。

なので、

処理が終わったあとで、

処理されたファイルを、りんさんの言うように別に保存した後で、
参照したテキストファイルを閉じる必要があると思います。
・・・りんさんが言ってるのと同じことやね(^^;

【9687】Re:オブジェクトの開放
お礼  まさと  - 03/12/12(金) 16:06 -

引用なし
パスワード
   つんさん、回答ありがとうございます。

>set Ebook = nothing
>は、単に変数を開放してるだけで、
>実際のファイルを閉じているのとは、また訳が違います。

なるほど。

>
>なので、
>
>処理が終わったあとで、
>
>処理されたファイルを、りんさんの言うように別に保存した後で、
>参照したテキストファイルを閉じる必要があると思います。
>・・・りんさんが言ってるのと同じことやね(^^;

私は自分の作成したマクロに問題があってファイルが開いたままなのかと
思っていたのですが、手動でファイルを開いて見ても、やはりExcelブックを
閉じない限りファイルの削除はできないようですね。

つまり、Excelブックを開いたまま参照したファイルは削除できない。
ということがやっとわかりました。

りんさん、つんさんありがとうございました。

12602 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free