![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
http://oshiete.goo.ne.jp/qa/7833029.html
でも質問したものなのですが、VBAでキャッシュを削除するしたいのですがうまくいきません。
C:\Users\○○\AppData\Local\Microsoft\Windows\Temporary Internet Files
のフォルダを見ると現在4656個ですが、
/////////////////////////////////////////////////////////////////
Option Explicit
Sub Sample1()
On Error Resume Next
Dim Shell As Object, CashFolder As Object, FSO As Object
Dim Folder As Object, File As Object
Set FSO = CreateObject("Scripting.FileSystemObject")
Set Shell = CreateObject("Shell.Application")
Set CashFolder = Shell.Namespace(&H20)
''キャッシュフォルダのパスを取得する
For Each Folder In FSO.GetFolder(CashFolder.Self.Path & "\Content.IE5").SubFolders
For Each File In Folder.Files
''キャッシュフォルダ内のファイルを削除する
FSO.DeleteFile File
Next File
Next Folder
Set CashFolder = Nothing
Set Shell = Nothing
Set FSO = Nothing
End Sub
/////////////////////////////////////////////////////////////////
を実行した後に、Temporary Internet Filesのフォルダを見ても、1個も削除されてません。
On Error Resume Nextをつけないと
4656個全てが、書き込みできません。(Error 70)になってしまうようです。
どうすればいいのでしょうか?
ご教授よろしくお願いします。
A 回答 (5件)
- 最新から表示
- 回答順に表示
No.5
- 回答日時:
こんにちは。
#4の回答者です。
>エラーにもなりませんがキャッシュも削除されませんでした・・・
とのことですが、もしかしたら、少なくとも私は、読み違えをしていたかもしれません。
厳密に言えば、仮想フォルダ内のIEの取得したファイルの削除として理解しています。ただし、すべてが消えるわけではないのは、ご存知のことだと思います。
それは、IEのツールの中のインターネットオプションから、全般--閲覧の履歴--削除と同義だと思います。それは、MS側でも、過去に公開されたメソッド?ですから、VBAには備えられていませんが、コンパイラー型の言語を使えば簡単に出来るはずです。
#4のコードは、こちらも試していますが、いわゆる、IEの履歴の削除には成功しています。ダメなものを書いているつもりはありませんが、ただ、私自身が以前やっていたのは、VB6であり、ネット界で有名な方が作ったタイプライブラリを入手できたので、それを使いました。必要性に駆られてではなく、単なる勉強のひとつです。
一般的には、VBAでという話は、無理っぽいと思いつつも、VB6で可能なのですから、お話に加わりました。実際は、VB.Net やC#辺りで処理するほうが簡単だとは思います。
出来なかったということで、どこかで、話がすれ違っているかもしれません。もしかしたら、IEの削除対象のオプションに引きづられているのかもしれません。ただ、今は、あまり、そういうコードの必要性がありません。それは、CCleaner.exe などの優秀なツールが出ていますから、あえて挑戦する人も少なかろうとは思います。
No.4
- 回答日時:
#1 の回答者です。
悪いけれど、IE Cache そのものは、FileSystemObject では取れないはずです。元の質問が、IUrlHistoryStg2 のタイプライブラリを利用する話でしたが、私も、一度、このプログラムを悪戦苦闘したことがあります。FileSystemObjectでフォルダ自体が取得して削除できたような気がしても、それが削除自体は成功していなかった記憶があるのです。
本日、Win32 APIを調べてみましたが、DeleteUrlCacheGroup自体は、Win7 でも、サポートされています。以下は、他のサイトから、持ってきたものですが、言い出した本人の責任上、こちらで確認しました。
ただ、以下のコードを使いたくなかったので、ある人が作ったタイプライブラリがあるはずだ、と思ったのですが、本日は見つからずじまいでした。もちろん、他の方のコードで出来るなら、私のはお勧めしません。最初からですと、もう10年ぐらい前のもので、当時は、WScript関連では成功しなかったでした。もちろん、VBAではなくて、VB6でしたが。
http://yaplog.jp/orator/archive/5 より引用
'//
Public Type UUID
Data1 As Long
Data2 As Integer
Data3 As Integer
Data4(0 To 7) As Byte
End Type
Private Const CLSCTX_INPROC = &H1& Or &H2&
Private Const CC_STDCALL = 4
Private Declare Function CoCreateInstance Lib "OLE32" _
(ByRef rclsid As UUID, _
ByVal pUnkOuter As Long, _
ByVal dwClsContext As Long, _
ByRef riid As UUID, _
ByRef ppv As Long) As Long
Private Declare Function DispCallFunc Lib "OLEAUT32" _
(ByVal pvInstance As Long, _
ByVal oVft As Long, _
ByVal CallConv As Long, _
ByVal vtReturn As VbVarType, _
ByVal cActuals As Long, _
ByRef prgvt As Integer, _
ByRef prgpvarg As Long, _
ByRef pvargResult As Variant) As Long
'Vtbl
Public Enum eVtblFunctionOffsetCUrlHistory
' IUrlHistoryStg2 Interface
vtblOffsetAddUrlAndNotify = 32
vtblOffsetClearHistory = 36
' IUrlHistoryStg Interface
vtblOffsetAddUrl = 12
vtblOffsetDeleteUrl = 16
vtblOffsetQueryUrl = 20
vtblOffsetBindToObject = 24
vtblOffsetEnumUrls = 28
' IUnknwon Interface
vtblOffsetQueryInterface = 0
vtblOffsetAddRef = 4
vtblOffsetRelease = 8
End Enum
Private Function CLSID_CUrlHistory() As UUID
'Object[Microsoft Url History Service]
'HKCR\CLSID\{3C374A40-BAE4-11CF-BF7D-00AA006946EE}
With CLSID_CUrlHistory
.Data1 = &H3C374A40
.Data2 = &HBAE4
.Data3 = &H11CF
.Data4(0) = &HBF
.Data4(1) = &H7D
.Data4(2) = &H0
.Data4(3) = &HAA
.Data4(4) = &H0
.Data4(5) = &H69
.Data4(6) = &H46
.Data4(7) = &HEE
End With
End Function
Private Function IID_IUrlHistoryStg() As UUID
'Interface[IID_IUrlHistoryStg]
'HKCR\Interface\{3C374A41-BAE4-11CF-BF7D-00AA006946EE}
With IID_IUrlHistoryStg2
.Data1 = &HAFA0DC11
.Data2 = &HC313
.Data3 = &H11D0
.Data4(0) = &H83
.Data4(1) = &H1A
.Data4(2) = &H0
.Data4(3) = &HC0
.Data4(4) = &H4F
.Data4(5) = &HD5
.Data4(6) = &HAE
.Data4(7) = &H38
End With
End Function
Private Function IID_IUrlHistoryStg2() As UUID
'Interface[IUrlHistoryStg2]
'HKCR\Interface\{AFA0DC11-C313-11D0-831A-00C04FD5AE38}
With IID_IUrlHistoryStg2
.Data1 = &HAFA0DC11
.Data2 = &HC313
.Data3 = &H11D0
.Data4(0) = &H83
.Data4(1) = &H1A
.Data4(2) = &H0
.Data4(3) = &HC0
.Data4(4) = &H4F
.Data4(5) = &HD5
.Data4(6) = &HAE
.Data4(7) = &H38
End With
End Function
'実行プロシージャ
Public Sub DelHistory()
Dim hr As Long
Dim udtCUrlHistory As UUID
Dim udtIUrlHistoryStg2 As UUID
Dim lngPUrlHistoryStg2 As Long
Dim lngPArgs() As Long
Dim intVtArgs() As Integer
Dim varResult As Variant
udtCUrlHistory = CLSID_CUrlHistory
udtIUrlHistoryStg2 = IID_IUrlHistoryStg2
hr = CoCreateInstance _
(udtCUrlHistory, _
0&, _
CLSCTX_INPROC, _
udtIUrlHistoryStg2, _
lngPUrlHistoryStg2)
If hr <> 0& Then
Debug.Print Err.LastDllError
Err.Raise hr
Else
ReDim lngPArgs(0)
ReDim intVtArgs(0)
hr = DispCallFunc _
(lngPUrlHistoryStg2, _
vtblOffsetClearHistory, _
CC_STDCALL, _
vbLong, _
0, _
intVtArgs(0), _
lngPArgs(0), _
varResult)
ReDim lngPArgs(0)
ReDim intVtArgs(0)
hr = DispCallFunc _
(lngPUrlHistoryStg2, _
vtblOffsetRelease, _
CC_STDCALL, _
vbLong, _
0, _
intVtArgs(0), _
lngPArgs(0), _
varResult)
End If
End Sub
再度ご回答ありがとうございます。
私が提示したコードではキャッシュは削除できないようですね。
早速ご提示いただいたコードを実行してみましたが、エラーにもなりませんがキャッシュも削除されませんでした・・・
XPでもwin7でも同じです。
折角ご回答いただいたのにすいません。
No.3
- 回答日時:
同様の箇所でつまった質問を見つけたので書き込んでおきます。
http://oshiete.goo.ne.jp/qa/6774408.html
↑によると管理者権限がないとエラーが出てしまうみたいですね。
もし管理者権限で実行できないのであれば言ってください。
一応VBAを管理者権限に昇格して実行する方法と、
VB.NETをVBAで実行する二つの方法があったので
そのプログラムが動作するかどうか試してみます。
前回の質問にも答えてくれた方ですね。
リンク先のコード実行してみました。
私は問題なく動きました。(XP)
管理者権限かどうかによって動作しない場合もあるのですね。
ありがとうございました。
No.2
- 回答日時:
こちら(Windows7 Pro + Excel2010 + Administratorのアカウント)では
消えてくれましたけど?
IEが立ち上がったままとか・・?
(VirtualBoxの試験環境で試しました。本番環境だと怖いので。。)
Win Vista だと UAC関連かも?
当方はwin7、office2007です。
Administratorのアカウントかどうかってどうやったらわかるのでしょうか?
このPCは自分しか使ってなくパソコンを起動した時から同じユーザー名を使ってます。
てことは、Administratorのアカウントなのでしょうか?
No.1
- 回答日時:
こんばんは。
>IUrlHistoryStg2の変数の宣言の仕方
そのコードでは、仮に、現IEのVersionに変えても、フォルダそのものが取得できないはずです。
http://www.vbforums.com/showthread.php?440508-Cl …
ここに同じ話が出ています。どこかに、IE CacheをClearするタイプライブラリがあるような気がしますが、VBの専門サイトに聞いたほうが早いです。いずれにしても、VBAには荷が重すぎるような気がしますね。もともとは、それはVBの話でしたし、私はVBAではやった覚えがありません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA This Workbookモジュールを別ファイルにコピーする方法 1 2022/09/14 01:51
- Visual Basic(VBA) このVBAでExcelアプリケーションを作成は必要ですか? 3 2023/07/19 21:13
- Excel(エクセル) VBA フォルダ見える化のコードについて 2 2023/06/19 15:04
- Visual Basic(VBA) vbaの構文の修正相談(xmlファイルを順に開いてコピペ作業) 1 2023/04/22 01:18
- Visual Basic(VBA) vbaのエラー対応(実行時エラー7:メモリが不足しています) 4 2023/04/24 00:20
- Visual Basic(VBA) エクセルVBA(実行時エラー438)の対処法を教えてもらえないでしょうか 3 2023/04/22 13:43
- Visual Basic(VBA) VBAが止まります。 2 2022/09/02 14:02
- Visual Basic(VBA) 【VBAエラー】Nextに対するForがありません 対策について 5 2022/11/21 21:26
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Visual Basic(VBA) outlook マクロが終了しません。 1 2022/09/02 11:14
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
VBAからキャッシュを削除する方法について
Visual Basic(VBA)
-
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
エクセル キャッシュメモリーの解放
Visual Basic(VBA)
-
-
4
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
5
EXCEL VBA マクロ 実行する度に処理速度がどんどん遅くなる原因が知りたい
Excel(エクセル)
-
6
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
7
VBAを何回も作り直して、容量が増えた
Excel(エクセル)
-
8
ユーザーフォームをホイールでスクロールする方法(Excel2000VBA)
Excel(エクセル)
-
9
メッセージボックスのOKボタンをVBAでクリックさせたい
Visual Basic(VBA)
-
10
VBAのコマンドボタンの文字列の改行方法は?
Visual Basic(VBA)
-
11
VBAでユーザーフォームの表示を確認
Visual Basic(VBA)
-
12
VBAでブックを非表示で開いて処理して閉じる方法
Excel(エクセル)
-
13
VBA 変数名に変数を使用したい。
Visual Basic(VBA)
-
14
VBAでファイルを開くときにファイル名でワイルドカードを使用したいです
その他(プログラミング・Web制作)
-
15
コマンドボタンやイメージにマウスをのせるとボタン名を表示したい
Excel(エクセル)
-
16
Excel VBAで同じフォルダ内のファイルを開くには?
Excel(エクセル)
-
17
メモリの解放の仕方
Visual Basic(VBA)
-
18
DoEvents関数って何?
Visual Basic(VBA)
-
19
VBAで英数字入力チェックしたい。
Visual Basic(VBA)
-
20
VBA 数式を残して値をクリアについて
Excel(エクセル)
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C:\\Windows\\SoftwareDistribu...
-
フォルダの削除について
-
ダブルクリックすると勝手に削...
-
J2SE Runtime Environment とは?
-
Word 2007 Officeボタン...
-
USB のファルダが削除できない
-
アクセス許可がなく、削除でき...
-
デスクトップ上のインターネッ...
-
スタートアップ
-
Vista「最近の変更」「検索」の...
-
VBAでキャッシュを削除するには
-
ディスクトップ背景の削除について
-
イラストレーター使用時にIM...
-
コンテキストメニューのcmdを消...
-
PCからnasneのファイル削除がで...
-
iTunesにてプレイリストの削除...
-
内蔵HDDを認識させない方法...
-
PC起動時のOSの選択画面を消したい
-
インターネトエクスプロラーの...
-
リカバリー とは
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
フォルダの削除について
-
C:\\Windows\\SoftwareDistribu...
-
USBメモリの中のデータが削除で...
-
沢山の写真を一度にPCから消す...
-
内蔵HDDを認識させない方法...
-
デスクトップ上のインターネッ...
-
VBAでキャッシュを削除するには
-
(windows10)steamのファイルが...
-
ダブルクリックすると勝手に削...
-
PCからnasneのファイル削除がで...
-
PC起動時のOSの選択画面を消したい
-
$RECYCLE.BIN内の古いアカウン...
-
USB のファルダが削除できない
-
エクセルで赤文字が入力されて...
-
実在しないFドライブにフォル...
-
outlookの検索履歴の削除
-
ファイルの削除ができない
-
画像を削除したいのに勝手にコ...
-
windowsのアクセス許可について
-
謎のフォルダが出現。削除もで...
おすすめ情報