[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『外部ファイル読込後にUSBメモリが読込状態』(Hashi)
何時も参考にさせて頂いております。自己解決が困難でしたので、ご教授願えれば幸いです。
USBメモリにデータを保存した後、以下のマクロでExcelに取り込み、転記・保存をして閉じています。
USBメモリを安全な取り外しを行うと「現在使用中です」となり、全てのEXCELブックを閉じないと外せない状態になってしまいます。
また、そのブックのみ開いている場合には、エクスプローラーを閉じないと、「現在使用中です」になります。
マクロを動かさずに読み込むと、USBメモリを外せる事は確認済みです。
全てのファイルを閉じることなく、USBメモリを外したいので、宜しくお願い致します。
Sub ASC読込()
Const AscTitle = "テキストファイル読み込み処理" Const AscFilter = "ASC形式ファイル (*.asc),*.asc,全てのファイル(*.*),*.*" Dim xlAPP As Application ' Applicationオブジェクト Dim StrFileName As String ' OPENするファイル名(フルパス) Dim vntFileName As Variant ' ファイル名受取り用 Set xlAPP = Application ' Applicationオブジェクト取得 ' 「ファイルを開く」のダイアログでファイル名の指定を受ける vntFileName = xlAPP.GetOpenFilename(FileFilter:=AscFilter, Title:=AscTitle) If VarType(vntFileName) = vbBoolean Then ’キャンセル処理 End Else StrFileName = vntFileName Dim Ws As Worksheet, Qt As QueryTable Set Ws = Worksheets("取込") Set Qt = Ws.QueryTables.Add(Connection:="TEXT;" & StrFileName, Destination:=Ws.Range("A1")) With Qt .TextFilePlatform = 932 '文字コード Shift-JIS .TextFileParseType = xlDelimited '区切り文字形式 .TextFileCommaDelimiter = True 'カンマ区切り .TextFileOtherDelimiter = "_" ' 区切り文字を指定 "_" .Refresh BackgroundQuery:=False ' スペース区切りしない .Delete ' データとの接続を解除 End With End If End Sub
< 使用 Excel:Excel2013、使用 OS:Windows7 >
とりあえず、End Sub の直前に1行追加して、End (キャンセル時は既にEndにしているようです)を入れてみてください。 これを入れると強制的にVBAのリソースを開放するので、USBメモリを取り出せるようになるかも知れません。
(???) 2019/05/30(木) 16:28
Excelを全部閉じると回復するのだし、OSよりも、Excelの問題? 過去にも、自シートをデータベース扱いするとメモリリークする、なんて問題があったので、QueryTables.Add も何かリークしてるかもです。 2019でどうなっているかですが、そう簡単にバージョンアップして試せないでしょうし。
(???) 2019/05/30(木) 17:40
.Delete ' データとの接続を解除 End With ChDrive "C" '←こんな感じに End If End Sub
(白茶) 2019/05/30(木) 17:55
あ。すみません。書き忘れました。
↑は、エクセルのファイル側の問題ではなく、 マクロで読込む「ASC形式ファイル」が同じUSBに存在しているのでは?
と予想してのものです。
と言うのも、当方の環境Win7/Excel2010で適当なテキストファイルで再現してみたら、 USB以外の場所から読込んだテキストファイルの場合は、現象が再現しませんでした。
ならばUSBから読込んだテキストファイルの方で引っ掛かってるのでは? と思った次第です。
違うかったらスミマセン
(白茶) 2019/05/30(木) 18:09
大雑把だけど、この辺かも? クエリーのコードをほとんど書いたことが無いので、あまり使ったことが無いけど。
クエリーの削除 For i = 1 To ActiveSheet.QueryTables.Count ActiveSheet.QueryTables(i).Delete Next
クエリーの定義の削除 With ActiveSheet.QueryTables.Add(Connection:= _ "TEXT;D:\(Data)\F11Data65000.txt", Destination:=Range("A1")) .Parent.Names(.Name).Delete '←クエリの定義の削除 .Delete
(BJ) 2019/05/30(木) 18:33
おー。解決して何よりです。 一応追試してみました。
Dドライブ直下に[tmp]フォルダを作成 [tmp]フォルダ内に新規ファイルを作成
イミディエイトウィンドウで ?Application.GetOpenFilename("All Files,*.*") して、作成した新規ファイルを選択
エクセルは終了せず、エクスプローラからD:\tmpの削除を試みると 「別のプログラムがこのフォルダーまたはファイルを開いているので、 操作を完了できません。 フォルダーまたはファイルを閉じてから再実行して下さい。 」
とのメッセージが出て、tmpフォルダが消せませんでした。 但し、中にある新規ファイルは消えていました。
再度 イミディエイトウィンドウで ?Application.GetOpenFilename("All Files,*.*") して、他の場所にあるファイルを選択
エクセルは終了せず、エクスプローラからD:\tmpの削除を試みると 今度はすんなり消えてくれました。
どうもGetOpenFilenameが原因の様ですね。
(白茶) 2019/05/31(金) 09:56
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.