'***************************************************************************************************
' ファイルの属性の取得サンプル Module1(Module)
'
' 作成者:井上治 URL:https://www.ne.jp/asahi/excel/inoue/ [Excelでお仕事!]
'***************************************************************************************************
'変更日付 Rev 変更履歴内容------------------------------------------------------------------------>
'03/06/27(1.00)新規作成
'12/01/28(1.10)修正等
'20/02/29(1.11)*.xlsm化、他
'***************************************************************************************************
Option Explicit
'===================================================================================================
Private Const g_cnsTitle As String = "ファイルの属性の取得"
Private Const g_cnsAttr As String = "このファイルの属性は"
'***************************************************************************************************
' ■■■ サンプルコード ■■■
'***************************************************************************************************
'* 処理名 :GetFileAttribute
'* 機能 :ファイルの属性の取得サンプル
'---------------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数 :(なし)
'---------------------------------------------------------------------------------------------------
'* 作成日 :2003年06月27日
'* 作成者 :井上 治
'* 更新日 :2020年02月29日
'* 更新者 :井上 治
'* 機能説明:
'* 注意事項:
'***************************************************************************************************
Sub GetFileAttribute()
'-----------------------------------------------------------------------------------------------
Dim intAttr As Integer ' ファイル属性
Dim strMSG As String ' メッセージWORK
Dim strFileName As String ' OPENするファイル名(フルパス)
Dim vntFileName As Variant ' ファイル名受取用
'-----------------------------------------------------------------
' ファイル名の指定
vntFileName = Application.GetOpenFilename("全てのファイル (*.*),*.*", , g_cnsTitle)
' キャンセルされた場合はFalseが返るので以降の処理は行なわない
If VarType(vntFileName) = vbBoolean Then Exit Sub
strFileName = vntFileName
'-----------------------------------------------------------------
' ファイル属性の取得
intAttr = GetAttr(strFileName) ' ①
strMSG = g_cnsAttr
' ファイル属性の判定
If (intAttr And vbReadOnly) <> 0 Then ' ②
strMSG = strMSG & vbCr & "読み取り専用"
End If
If (intAttr And vbHidden) <> 0 Then
strMSG = strMSG & vbCr & "隠しファイル"
End If
If (intAttr And vbSystem) <> 0 Then
strMSG = strMSG & vbCr & "システムファイル"
End If
If (intAttr And vbDirectory) <> 0 Then
strMSG = strMSG & vbCr & "フォルダ"
End If
If (intAttr And vbArchive) <> 0 Then
strMSG = strMSG & vbCr & "アーカイブ"
End If
If (intAttr And vbNormal) <> 0 Then
strMSG = strMSG & vbCr & "通常ファイル"
End If
If strMSG = g_cnsAttr Then
strMSG = strMSG & vbCr & "属性=" & intAttr
End If
strMSG = strMSG & vbCr & "です。"
'-----------------------------------------------------------------
' 更新日時
strMSG = strMSG & vbCr & "更新日時は" & _
FileDateTime(strFileName) ' ③
' ファイルサイズ
strMSG = strMSG & vbCr & "サイズは" & _
FileLen(strFileName) & "バイトです。" ' ④
'-----------------------------------------------------------------
' 処理結果を表示
MsgBox strMSG, vbInformation, g_cnsTitle
End Sub
'----------------------------------------<< End of Source >>----------------------------------------
№ | 概略説明 |
---|---|
① |
GetAttr関数では、ファイルの属性が取得できます。実際の値は複数の属性を表意していることがあります。 |
② |
このようにAnd演算子を使ってビット単位比較の必要があります。例えば「読み取り専用」と「アーカイブ」を合わせた値等になります。 |
③ |
FileDateTime関数ではファイルの最終更新日時が取得できます。 |
④ |
FileLen関数ではファイルのサイズが取得できます。但し、Open中のファイルや、更新直後のファイルでは正しい値が取得できない場合があります。これはディスク装置の遅延書き込みに起因しているようです。正しい値を取得したい場合は、実際にそのファイルを入力用でOpenし、LOF関数で取得するべきでしょう。 |
'***************************************************************************************************
' ファイルの属性の取得サンプル(FSO) Module2(Module)
'
' 作成者:井上治 URL:https://www.ne.jp/asahi/excel/inoue/ [Excelでお仕事!]
'***************************************************************************************************
'変更日付 Rev 変更履歴内容------------------------------------------------------------------------>
'03/06/27(1.00)新規作成
'12/01/28(1.10)修正等
'20/02/29(1.11)*.xlsm化、他
'***************************************************************************************************
Option Explicit
'===================================================================================================
Private Const g_cnsTitle As String = "ファイルの属性の取得"
Private Const g_cnsAttr As String = "このファイルの属性は"
'***************************************************************************************************
' ■■■ サンプルコード ■■■
'***************************************************************************************************
'* 処理名 :GetFileAttribute2
'* 機能 :ファイルの属性の取得サンプル(FSO)
'---------------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数 :(なし)
'---------------------------------------------------------------------------------------------------
'* 作成日 :2003年06月27日
'* 作成者 :井上 治
'* 更新日 :2020年02月29日
'* 更新者 :井上 治
'* 機能説明:
'* 注意事項:
'***************************************************************************************************
Sub GetFileAttribute2()
'-----------------------------------------------------------------------------------------------
Dim objFso As FileSystemObject ' FileSystemObject
Dim objFile As File ' File
Dim intAttr As Integer ' ファイル属性
Dim strMSG As String ' メッセージWORK
Dim strFileName As String ' OPENするファイル名(フルパス)
Dim vntFileName As Variant ' ファイル名受取用
'-----------------------------------------------------------------
' ファイル名の指定
vntFileName = Application.GetOpenFilename("全てのファイル (*.*),*.*", , g_cnsTitle)
' キャンセルされた場合はFalseが返るので以降の処理は行なわない
If VarType(vntFileName) = vbBoolean Then Exit Sub
strFileName = vntFileName
'-----------------------------------------------------------------
Set objFso = New FileSystemObject
' ファイル、ファイル属性の取得
Set objFile = objFso.GetFile(strFileName)
intAttr = objFile.Attributes
strMSG = g_cnsAttr
'-----------------------------------------------------------------
' ファイル属性の判定
If (intAttr And vbReadOnly) <> 0 Then
strMSG = strMSG & vbCr & "読み取り専用"
End If
If (intAttr And vbHidden) <> 0 Then
strMSG = strMSG & vbCr & "隠しファイル"
End If
If (intAttr And vbSystem) <> 0 Then
strMSG = strMSG & vbCr & "システムファイル"
End If
If (intAttr And vbDirectory) <> 0 Then
strMSG = strMSG & vbCr & "フォルダ"
End If
If (intAttr And vbArchive) <> 0 Then
strMSG = strMSG & vbCr & "アーカイブ"
End If
If (intAttr And vbNormal) <> 0 Then
strMSG = strMSG & vbCr & "通常ファイル"
End If
If strMSG = g_cnsAttr Then
strMSG = strMSG & vbCr & "属性=" & intAttr
End If
strMSG = strMSG & vbCr & "です。"
'-----------------------------------------------------------------
' 更新日時
strMSG = strMSG & vbCr & "更新日時は" & _
objFile.DateLastModified
' ファイルサイズ
strMSG = strMSG & vbCr & "サイズは" & _
objFile.Size & "バイトです。"
'-----------------------------------------------------------------
Set objFile = Nothing
Set objFso = Nothing
' 処理結果を表示
MsgBox strMSG, vbInformation, g_cnsTitle
End Sub
'----------------------------------------<< End of Source >>----------------------------------------