
ここで教えていただいたフォルダー名一覧を作成するVBAがあります。
共有ドライブやMyDocumentなどのサブフォルダーは綺麗に階層別に抜き出してくれて助かっています。
ところが、Cドライブ(ローカルディスク)に対して実行すると必ず「実行時エラー70 書き込みできません」になります。
ワークシートにそれまで記入されたフォルダー名を見ると [Config.Msi] となっています。
ただエクスプローラで見てもConfig.Msiというフォルダーは見当たりません。
おそらく隠しフォルダーなのでしょう。
Cドライブを検索する場合、隠しフォルダーは広わなくてもいいので、エラーにならないようするにはどう直せばよいのでしょうか?
エクセル2000です。
' [参照設定]・Microsoft Scripting Runtime
Option Explicit
Private g_cntPATH As Long
Sub SEARCH_FOLDER()
Dim objFSO As FileSystemObject
Dim strPATHNAME As String
Dim myObj As Object
Dim myDir As String
Set myObj = CreateObject("Shell.Application"). _
BrowseForFolder(0, "フォルダを選択してください", 0)
If myObj Is Nothing Then Exit Sub
If myObj = "デスクトップ" Then
myDir = CreateObject("WScript.Shell").SpecialFolders("Desktop")
Else
myDir = myObj.Items.Item.Path
End If
strPATHNAME = myDir
Cells.ClearContents
Set objFSO = New FileSystemObject
Call SEARCH_SUB_FOLDER(objFSO.GetFolder(strPATHNAME), 0, 0)
Set objFSO = Nothing
MsgBox "処理が完了しました。" & vbCr & vbCr & _
"フォルダ数=" & g_cntPATH & vbCr, vbInformation
End Sub
'フォルダ単位のサブ処理(再帰動作,引数はFile-Object,行,カラム)
Private Sub SEARCH_SUB_FOLDER(ByVal objPATH As Folder, ByRef GYO As Long, ByVal COL As Long)
Dim objPATH2 As Folder
g_cntPATH = g_cntPATH + 1 '参照フォルダ数を加算
GYO = GYO + 1 ' 行を加算
COL = COL + 1 ' カラムを加算
Cells(GYO, COL).Value = "[" & objPATH.Name & "]"
For Each objPATH2 In objPATH.SubFolders 'サブフォルダを探索するループ処理
Call SEARCH_SUB_FOLDER(objPATH2, GYO, COL) 'フォルダ単位のサブ処理(再帰呼び出し) ’←ここでエラー
Next objPATH2
Set objPATH = Nothing ' 参照OBJECTを破棄
End Sub
No.2ベストアンサー
- 回答日時:
お礼欄に書かれたモジュールをコピペして試したところ
すんなりと動きましたよ?
もしやと思い、管理者権限(Administrator)でないユーザで試したところ
Error 70 が発生しました。
どうも、一般ユーザでは、~<>22の処理は駄目っぽいような感じです。
質問者さんの権限はいかがですか?
エラートラップで逃げるしか手が無いかも?
On Error Goto ErrH
sub ~
処理
exit sub
ErrH:
select case err.number
case 70
resume next
case else
msgbox err.number & err.description
end select
ありがとうございました。
管理者権限の問題でしたか・・・。
わたしは管理者ではないのでだめですね。
とりあえずOn Error Resume Nextでにげます。
有難うございました。
No.1
- 回答日時:
エラーが出るのはシステムフォルダを見に行った場合です。
WSH のヘルプの記述では
ファイルまたはフォルダの属性を設定します。値の取得も可能です。属性によっては、値の取得のみ可能な場合もあります。
object.Attributes [= newattributes]
引数
object
必ず指定します。File オブジェクトまたは Folder オブジェクトの名前を指定します。
newattributes
省略可能です。object に指定したファイルまたはフォルダに与える新しい属性値を指定します。
設定値
newattributes には、次に示す値を指定できます。また、複数の定数を組み合わせて、値の和を指定することもできます。
定数 値 内容
Normal 0 標準ファイル。どの属性も設定されません。
ReadOnly 1 読み取り専用ファイル。この属性は、値の取得も設定も可能です。
Hidden 2 隠しファイル。この属性は、値の取得も設定も可能です。
System 4 システム ファイル。この属性は、値の取得も設定も可能です。
Volume 8 ディスク ドライブ ボリューム ラベル。この属性は、値の取得のみ可能です。
Directory 16 フォルダまたはディレクトリ。この属性は、値の取得のみ可能です。
Archive 32 ファイルが前回のバックアップ以降に変更されているかどうか。この属性は、値の取得も設定も可能です。
Alias 64 リンクまたはショートカット。この属性は、値の取得のみ可能です。
Compressed 128 圧縮ファイル。この属性は、値の取得のみ可能です。
とのこと。
なので、エラー回避だけでしたら、16+4=22
For Each objPATH2 In objPATH.SubFolders 'サブフォルダを探索するループ処理
If objPATH2.Attributes <> 22 Then
~省略~
Windows 7 や Vista は分かりませんがWinXpならこれで良いかと。
On Error Resume Next で逃げてしまうというのもアリ?
ありがとうございます。
システムフォルダを見に行った場合にエラーになるのですね。
以下のようにしてみましたが、やはり同じエラーが出ます。
エクセル2000(Win2000)
エクセル2003(WinXP) の両方で試しました。
なお、質問に書いたエラーの場所が1行ずれていました。すみません。
For Each objPATH2 In objPATH.SubFolders '←ここでエラーでした。
' [参照設定]・Microsoft Scripting Runtime
Option Explicit
Private g_cntPATH As Long
Sub SEARCH_FOLDER()
Dim objFSO As FileSystemObject
Dim strPATHNAME As String
Dim myObj As Object
Dim myDir As String
Set myObj = CreateObject("Shell.Application"). _
BrowseForFolder(0, "フォルダを選択してください", 0)
If myObj Is Nothing Then Exit Sub
If myObj = "デスクトップ" Then
myDir = CreateObject("WScript.Shell").SpecialFolders("Desktop")
Else
myDir = myObj.Items.Item.Path
End If
strPATHNAME = myDir
Cells.ClearContents
Set objFSO = New FileSystemObject
Call SEARCH_SUB_FOLDER(objFSO.GetFolder(strPATHNAME), 0, 0)
Set objFSO = Nothing
MsgBox "処理が完了しました。" & vbCr & vbCr & _
"フォルダ数=" & g_cntPATH & vbCr, vbInformation
End Sub
'フォルダ単位のサブ処理(再帰動作,引数はFile-Object,行,カラム)
Private Sub SEARCH_SUB_FOLDER(ByVal objPATH As Folder, ByRef GYO As Long, ByVal COL As Long)
Dim objPATH2 As Folder
g_cntPATH = g_cntPATH + 1 '参照フォルダ数を加算
GYO = GYO + 1 ' 行を加算
COL = COL + 1 ' カラムを加算
Cells(GYO, COL).Value = "[" & objPATH.Name & "]"
For Each objPATH2 In objPATH.SubFolders 'サブフォルダを探索するループ処理’←ここでエラー
If objPATH2.Attributes <> 22 Then
Call SEARCH_SUB_FOLDER(objPATH2, GYO, COL) 'フォルダ単位のサブ処理(再帰呼び出し)
End If
Next objPATH2
Set objPATH = Nothing ' 参照OBJECTを破棄
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) このVBAでExcelアプリケーションを作成は必要ですか? 3 2023/07/19 21:13
- Visual Basic(VBA) VBA This Workbookモジュールを別ファイルにコピーする方法 1 2022/09/14 01:51
- Visual Basic(VBA) VBAが止まります。 2 2022/09/02 14:02
- Visual Basic(VBA) あるフォルダーのファイルを違う親フォルダーのサブフォルダーに移したい 11 2023/02/15 19:00
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Excel(エクセル) VBA フォルダ見える化のコードについて 2 2023/06/19 15:04
- Visual Basic(VBA) VBA 別ブックからの転記の高速化について VBA 別ブックからの転記の高速化についてご教授下さい。 19 2022/07/26 13:07
- Visual Basic(VBA) EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい 1 2023/03/16 07:05
- Visual Basic(VBA) 実行時エラー´5854´ 文字列型パラメーターが長すぎます。 3 2023/06/08 21:17
- Visual Basic(VBA) excel vbaでvlooupの変数がわかりません。 7 2022/05/30 09:35
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
首吊りどこ締めるの
-
風俗店へ行く前のご飯
-
彼女のことが好きすぎて彼女の...
-
エクセルの値を元に図形の色を...
-
検便についてです。 便は取れた...
-
イタリアから帰国する際、肉製...
-
精子に血が・・・
-
精液の落とし方を教えてください
-
最近、飲酒すると手のひらが真...
-
値が入っているときだけ計算結...
-
勃起する時って痛いんですか? ...
-
MIN関数で空白セルを無視したい...
-
納豆食べた後の尿の納豆臭は何故?
-
エクセルで空白セルを含む列の...
-
精子が黄色?
-
リンク先のファイルを開かなく...
-
EXCELで条件付き書式で空白セル...
-
「Q.C. PASSED」とは?
-
足がまだら模様になります。ど...
-
鏡についてです。自分の体型を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
首吊りどこ締めるの
-
尿検査前日に自慰行為した時の...
-
至急!尿検査前日にオナニーし...
-
検便についてです。 便は取れた...
-
彼女のことが好きすぎて彼女の...
-
値が入っているときだけ計算結...
-
リンク先のファイルを開かなく...
-
EXCELで条件付き書式で空白セル...
-
2つの数値のうち、数値が小さい...
-
VLOOKUP関数を使用時、検索する...
-
尿検査の前日は自慰控えたほう...
-
MIN関数で空白セルを無視したい...
-
小数点以下を繰り上げたものを...
-
風俗店へ行く前のご飯
-
エクセルで空白セルを含む列の...
-
Excel 数値の前の「 ' 」を一括...
-
【Excelで「正弦波」のグラフを...
-
納豆食べた後の尿の納豆臭は何故?
-
EXCELで式からグラフを描くには?
-
ある範囲のセルから任意の値を...
おすすめ情報