
http://officetanaka.net/excel/vba/tips/tips95.htm
を参考に、
フォルダの一覧を取得するコードを作ってるのですが
Sample4ならエラーにならずにフォルダの一覧を取得できるのですが、
フォルダ名にドットがある場合も取得されてしまうので、Sample6を使いたいのですが、
If GetAttr(buf) And vbDirectory Then
の部分で、
「53ファイルが見つかりません。」
のエラーになります。
なぜでしょうか?
No.3ベストアンサー
- 回答日時:
参照ページのSample6を修正なくそのまま使ってる場合は
>「53ファイルが見つかりません。」
このエラーは出ないはずです。
例えば
Sub Sample6()
Dim buf As String, msg As String
buf = Dir("C:\TEST\*.*", vbDirectory)
Do While buf <> ""
If GetAttr(buf) And vbDirectory Then
If buf <> "." And buf <> ".." Then msg = msg & buf & vbCrLf
End If
buf = Dir()
Loop
MsgBox msg
End Sub
このようにDir関数で、カレントフォルダではなく、特定フォルダを指定するように修正してあると
ご提示のエラーになります。
変数bufにはDir関数の結果、ファイル名が入ります。
これに対して「GetAttr(buf)」この箇所を修正していないと、
ファイル名しか指定していない事になりますから、
カレントフォルダ&ファイル名になって、「53ファイルが見つかりません。」となります。
参照ページの冒頭に
>なお、カレントフォルダはC:\Workにしてあります。
とありますね。
フォルダ指定を省略してありますから、Dir関数もGetAttr関数もカレントフォルダ
つまり「C:\Work」に対する処理とみなされます。
修正するなら両方必要。
buf = Dir("C:\TEST\*.*", vbDirectory)
If GetAttr("C:\TEST\" & buf) And vbDirectory Then
ただ、対象フォルダにUnicode文字を使ったファイル名があると、
GetAttr関数のところで今度は「52 ファイル名または番号が不正です」のエラーになります。
直下のフォルダだけ取得するようなケースなら「FileSystemObject」を使ったほうが楽かもしれません。
Sub try()
Const p = "C:\TEST\"
Dim f As Object
Dim s As String
For Each f In CreateObject("scripting.filesystemobject").GetFolder(p).SubFolders
s = s & f.Name & vbLf
Next
MsgBox s
End Sub
No.2
- 回答日時:
No.1
- 回答日時:
こんにちは。
フォルダ内に、読み取り専用フォルダがあるとエラーがおきますので、
Sub Sample6()
Dim buf As String, msg As String
Dim zokusei As Integer, enzan As Integer
Dim Path_Str as String
Path_Str = "C:\Documents and Settings\" '最後のフォルダが読み取り専用フォルダの場合は、\をつけないとエラーがおきます
buf = Dir(Path_Str, vbDirectory + vbHidden) '←読み取り専用追加
Do While buf <> ""
zokusei = Getattr(Path_str & buf)
enzan = zokusei And 16
If enzan = 16 Then
If buf <> "." And buf <> ".." Then msg = msg & buf & vbCrLf
End If
buf = Dir()
Loop
MsgBox msg
End Sub
読み取り専用フォルダがあるとエラーになるのですか。
知りませんでした。
vbHiddenを追加したらうまく行きました。ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
弁護士が解説!あなたの声を行政に届ける「パブリックコメント」制度のすべて
社会に対する意見や不満、疑問。それを発信する場所は、SNSやブログ、そしてニュースサイトのコメント欄など多岐にわたる。教えて!gooでも「ヤフコメ民について」というタイトルのトピックがあり、この投稿の通り、...
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
会社のネットワーク上のファイ...
-
フォルダAから1つのファイルだ...
-
C ファイル出力で、フォルダが...
-
パス名に2バイト文字(マルチバ...
-
ExcelのVBAでフォルダ指定がで...
-
C言語でのフォルダ作成
-
サーバ内のフォルダ名と各フォ...
-
デスクトップの画像をhtmlに表...
-
SHBrowseforfolderについて質問...
-
フォルダ内のファイルの作成日...
-
Windows10でコマンドプロンプト...
-
【VC++6.0(MFC)】適切なSHBrows...
-
バックアップ(世代管理)機能...
-
VBA フォルダの複数選択ができない
-
VBA 最新のフォルダ取得
-
【マクロ】ファイル名の日付に...
-
ファイル名と同名のフォルダを...
-
VBA フォルダ名に特定の文字を...
-
VBプロジェクトでのフォルダ構...
-
Access VBA で フォルダ権限...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ファイル名と同名のフォルダを...
-
Windows10でコマンドプロンプト...
-
会社のネットワーク上のファイ...
-
パス名に2バイト文字(マルチバ...
-
デスクトップの画像をhtmlに表...
-
ExcelのVBAでフォルダ指定がで...
-
C ファイル出力で、フォルダが...
-
Excelのハイパーリンクについて...
-
VBA 最新のフォルダ取得
-
【マクロ】フォルダにファイル...
-
エクセルマクロで指定フォルダ...
-
【ExcelVBA】一覧表の記載に従...
-
【マクロ】ファイル名の日付に...
-
フォルダにリンクを貼りたい
-
サーバ内のフォルダ名と各フォ...
-
Excelvbaでブックをコピー名前...
-
ThisWorkbookがあるフォルダ更...
-
Downloaded Program Filesはど...
-
VBA フォルダ名に特定の文字を...
-
excelマクロ 冒頭3文字が一致す...
おすすめ情報