- ベストアンサー
フォルダーとファイルの認識方法とは?
- フォルダーとファイルを認識するためのVBAコードとして、GetAttr関数を使用します。
- フォルダーの場合は「フォルダ」と表示され、ファイルの場合は「ファイル」と表示されます。
- フォルダー名にドットが入っても識別する方法はありますか。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (3)
- duke_kimura
- ベストアンサー率39% (53/134)
- wormhole
- ベストアンサー率28% (1622/5659)
- duke_kimura
- ベストアンサー率39% (53/134)
関連するQ&A
- フォルダー名に特殊文字?が存在する場合にエラー発生
以下のコードでフォルダー名を取得しています。 しかし、フォルダー名に特殊文字?が存在する場合に下記でエラーが発生します。 例えば「Oxygène」 でeの上に’があるなど If (GetAttr(MyPath & MyName) And vbDirectory) = vbDirectory Then 実行エラー 53: ファイルが見つかりません。 これは、excelの仕様で処理できないのでしょうか ? 他のコードで処理できれば教えて下さい。 --------------------------------------- Sub フォルダ名取得() Dim MyName Dim MyPath Dim i As Long ’仮の消込(初期化: 前回の記入文をクリアー) Range("A5:H50").Clear i = 1 ' フォルダーを自由に選べること。 参考:officeTANAKA With Application.FileDialog(msoFileDialogFolderPicker) If .Show = True Then ' MsgBox .SelectedItems(1) If Len(.SelectedItems(1)) = 3 Then ' c:\の場合とサブフォルダーの場合 MyPath = .SelectedItems(1) Else MyPath = .SelectedItems(1) & "\" End If End If End With If MyPath = Empty Then MsgBox "フォルダー名表示をキャンセルしました。": Exit Sub 'Range("b2:c2").ShrinkToFit = True ' 縮小してセル内に表示 MyName = Dir(MyPath, vbDirectory) ' 最初のフォルダ名を返します。 '親フォルダー Range("A2") = MyPath Do While MyName <> "" ' ループを開始します。 ' 現在のフォルダと親フォルダは無視します。 If MyName <> "." And MyName <> ".." Then ' ビット単位の比較を行い、MyName がフォルダかどうかを調べます。 If (GetAttr(MyPath & MyName) And vbDirectory) = vbDirectory Then Range("a" & i + 4) = MyPath & MyName ' アクティブシートA5セルから下方にフルパス表示。 Range("b" & i + 4) = MyName ' アクティブシートB5セルから下方にフォルダ名表示 i = i + 1 End If End If MyName = Dir ' 次のフォルダ名を返します。 Loop MsgBox MyPath & "の中にフォルダーは" & (i - 1) & "個のフォルダーがありました。" End Sub
- ベストアンサー
- Excel(エクセル)
- GetAttrが原因?
http://officetanaka.net/excel/vba/tips/tips95.htm を参考に、 フォルダの一覧を取得するコードを作ってるのですが Sample4ならエラーにならずにフォルダの一覧を取得できるのですが、 フォルダ名にドットがある場合も取得されてしまうので、Sample6を使いたいのですが、 If GetAttr(buf) And vbDirectory Then の部分で、 「53ファイルが見つかりません。」 のエラーになります。 なぜでしょうか?
- ベストアンサー
- Visual Basic
- フォルダの中身が空白なのかを調べたい。
こんばんは。 エクセル2003のvbaにて Sub test() If Dir("D:新しいフォルダ") = "" Then MsgBox "フォルダには何も入っていません" Else MsgBox "フォルダに何か入っています" End If End Sub で試してみたのですが フォルダに何か入っていても "フォルダには何も入っていません" と表示されてしまいます。 どうすればうまくいくのでしょうか? よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- エクセル(VBA)でファイル名(サブフォルダ含む)、更新日時を表示させたい
エクセルのVBAであるフォルダ以下の全てのファイル名と更新時間をエクセルシート上に表示させたく、以下のプログラムを作成したのですが 、サブフォルダ内のファイルを表示させることができません。何か良い方法がありましたら教えていただけないでしょうか?宜しくお願いいたします。 Sub SAMPLE() Dim serchPass As String j = 1 Mypath = "C:\My Documents\" MyName = Dir(Mypath, vbDirectory) Do While MyName <> "" ' ループを開始します。 ' 現在のフォルダと親フォルダは無視します。 If MyName <> "." And MyName <> ".." Then ' ビット単位の比較を行い、MyName がフォルダかどうかを調べます。 If (GetAttr(Mypath & MyName) And vbDirectory) = vbDirectory Then Debug.Print MyName ' フォルダであれば、それを表示します。 Else: GoTo 10 End If serchPass = Mypath & MyName With Application.FileSearch .NewSearch .LookIn = serchPass If .Execute() > 0 Then For i = 1 To .FoundFiles.Count Cells(i + j, 1).Value = .FoundFiles(i) Cells(i + j, 3) = FileDateTime(.FoundFiles(i)) Next i j = i + j End If End With 10 End If MyName = Dir ' 次のフォルダ名を返します。 Loop End Sub
- ベストアンサー
- オフィス系ソフト
- フォルダの中身がカラか調べる
vbaです。 フォルダ(新しいフォルダ)を作り、その中にサブフォルダ(Test用フォルダ)を作って --------------------------------------------------------- Sub フォルダの中身がカラか調べる() If Dir("D:\新しいフォルダ\Test用フォルダ\*.*") = "" Then MsgBox "カラです" Else MsgBox "カラではありません" End If End Sub --------------------------------------------------------- を実行すると、新しいフォルダの中にフォルダがあるのに、 「カラです」が表示されてしまいます。 新しいフォルダのファイルサイズは0です。 If Dir("D:\新しいフォルダ\Test用フォルダ\*.*") = "" Then のコードは、フォルダの中のファイル数ではなく、 フォルダのサイズを取得してしまうのでしょうか?
- ベストアンサー
- Visual Basic
- ダイアログボックスからフォルダ名を取得し、フォルダ内のCSVファイルを
ダイアログボックスからフォルダ名を取得し、フォルダ内のCSVファイルをすべてアクセスのテーブルにインポート使用と思っています。 ところがCSVファイルの数の分だけ、1つめのCSVファイルの中身が繰り返しインポートされてしまっています。 どの部分に誤りがあるのでしょうか? お知恵を拝借できますでしょうか・・・。 コードは以下になります。 Private Sub cmd06_Click() Dim MyFile As String Dim MyName As String Dim MyName02 As String Dim strFolderName As String strFolderName = GetFolderName() 'フォルダ選択ダイアログを表示 If Len(strFolderName) > 0 Then '選択結果を評価 MyFile = strFolderName & "\*.csv" '【拡張子csvのファイルのみ取得】 MyName = Dir(MyFile, vbNormal) MyName02 = "\" & MyName Do While MyName <> "" If MyName <> "." And MyName <> ".." Then If GetAttr(strFolderName & "\" & MyName) <> vbDirectory Then DoCmd.TransferText acImportFixed, "T03_インポート定義", "T03_全CSVデータ", strFolderName & MyName02, False, "" '【取得したファイルをインポート】 End If End If MyName = Dir Loop Else MsgBox "フォルダは選択されませんでした" End If MsgBox "データのインポートが終了しました" End Sub
- ベストアンサー
- その他MS Office製品
- 複数フォルダに格納されたファイル名取得VBA
お世話になっております。 あるフォルダに複数のフォルダが格納されており、更にそのフォルダの中にあるファイルの情報を取得するプログラムを書いたのですが、実行すると下記のようなエラーとなってしまいます。 ■エラー プロシージャの呼び出し、または引数が不正です 下から3行目、「buf = Dir()」が問題であることはわかるのですが、 何が問題でどのように解決したらいいかわかりません。 どなたかご教授の程よろしくお願い致します(>_<) ------------------------------------------------------------------------ Sub test() Dim buf As String Dim fName As String Dim msg As String buf = Dir("*.*", vbDirectory) Do While buf <> "" If GetAttr(buf) And vbDirectory Then If buf <> "." And buf <> ".." Then fName = Dir(CurDir & "\" & buf & "\" & "*.jpg") Do While fName <> "" cnt = cnt + 1 Cells(cnt, 1) = buf Cells(cnt, 2) = fName msg = msg & buf & "\" & fName & vbCrLf fName = Dir() Loop MsgBox msg End If End If buf = Dir() Loop End Sub ------------------------------------------------------------------------ これが実現できないと細かい作業を毎日繰り返す事となり、 かなり業務不可が高いです。。 繰り返しになってしまいますが、どなたかご回答よろしくお願い致します。
- ベストアンサー
- その他(プログラミング・開発)
- ファイルの有無を確認した際のエラーについて
VB6です。以下の様な関数を使っています。 用途としては、ファイルの有無を調べています。 で、関数の値として実際のパソコンに存在しないフォルダを指定した際、 下のエラー処理(AAA)に飛びません。 わかる方いらしたら、よろしくお願いします。 Public Function files(ByVal strPathName As String) As Boolean On Error GoTo AAA If (GetAttr(strPathName) And vbDirectory) = vbDirectory Then Stop Else Stop End If Exists2 = True Exit Function AAA: Stop End Function
- ベストアンサー
- Visual Basic
- 「D\」というフォルダに「Aaa.pdf」と言うファイルが在るかどうかの判定方法
「D\」というフォルダに「Aaa.pdf」と言うファイルが在るかどうかを調べるコードを書きたいのですが どうゆう風にしていいのかわかりません。 If ??? Then MsgBox "ファイルは存在します" Else MsgBox "ファイルは存在しません" End If と言うことは可能でしょうか? どうすればいいのかわかりません!! よろしくお願い致します。
- ベストアンサー
- オフィス系ソフト
- フォルダー内のファイルとリンクするマクロVBA
エクセルのマクロ機能を使い、エクセルのセルに管理番号入力し選択してマクロ実行すると、 自動でセルに入力した管理番号と同じフォルダー名の物を指定した場所に作成し、ハイパーリンクするVBAを 見よう見まねで作成しました。 この作成したVBAに追加機能を付けたいのですが、 WEBで検索したのですが、なかなか実行したい事が合う内容のものが見つからず、 マクロ初心者で何をどうすれば良いのか解りません。 大変申し訳ありませんが、どなたか教えて頂けませんでしょうか? 追加したい機能は、例としてA列の4と5の行を結合(結合しない場合もある)して管理番号を入力し、 自動で管理番号名のと同じフォルダーを作成しハイパーリンクした後に、 手動で、作成したフォルダーの中にファイルを入れる。 その後、行に同じファイル名を入力し、その行を選択してファイル名が同じ物があればハイパーリンクする様にしたい。 添付の画像ですと、管理番号を付けるのはA列で順番に番号を付けていきます。 1つのフォルダーの中に複数ファイルを入れる場合は、列を結合して1つの管理番号にし、 同じ行に並ぶフォルダーのE列(列の場所は変わる場合もあり)にフォルダーの中のファイル名を入力して、 フォルダー内同期リンク実行ボタンを押してファイルをハイパーリンクしたい。 ※管理番号で列に対し行は1:1の時もあれば、ファイルの数により、列を結合し1:2~1:10以上もある。 ※自動で管理番号名のと同じフォルダーを作成しハイパーリンクするVBAは下記で作ったのですが、 それをWEBで、似た様な内容のものを少し参考に編集しると、現在の機能も使えなくなってしまったりと困っています。 難しい。 Sub MakeHyLink() Dim wkStr As String If ActiveCell.Column <> 1 Then Exit Sub If ActiveCell.Value = "" Then MsgBox "アクティブセルは未入力、やり直し" Exit Sub End If wkStr = ThisWorkbook.path & "\TEST\" & ActiveCell.Value If Dir(wkStr, vbDirectory) = "" Then MsgBox "フォルダー:" & wkStr & vbLf & " を、作成します。" MkDir wkStr Else MsgBox "フォルダー:" & wkStr & vbLf & " は、存在します。" End If ActiveSheet.Hyperlinks.Add Anchor:=ActiveCell, Address:=wkStr End Sub
- ベストアンサー
- オフィス系ソフト
お礼
ご回答ありがとうございます。 私も、独学の部類ですので、もう少し勉強して修正してみます。 ありがとうございました。