HSPとExcel VBAで情報取得 (その4)
1.概要
HSP3やExcel VBAによるCOMオブジェクトの活用事例としての第四弾です。
今回は、前回記事に引き続き、FileSystemObjectによるドライブ情報の取得、ファイルのサイズや属性等の詳細情報を取得して見ます。
また、ファイル関連の情報ばかりでは、つまらないので、少し変わった所として、XMLHTTPによるサーバーからGMT(グリニッジ標準時)を取得
するを取り上げて見ました。COMオブジェクトについては、まだまだ紹介しきれない部分も多々あるのですが、
今回の記事で終わりです。
2.サンプル 2-1.ドライブ情報を取得する
ドライブの情報の取得には、FileSystemObjectを使います。Driveオブジェクトはドライブを表すオブジェクトで GetDriveメソッド、Drivesプロパティ、FileオブジェクトとFolderオブジェクトのDriveプロパティから取得でき ます。Driveオブジェクトには以下の12種類のプロパティがります。 ドライブ名、ドライブの種類、ディスクの空きスペースの大きさなどが取得できます。
ファイルの詳細情報の取得には、FileSystemObjectを使います。HSPでは、 ファイル選択ダイアログで任意のファイルを選 択して、ファイル名を引数とするGetFileメソッドに渡し、 objFInfoオブジェクト変数に ファイル情報を代入します。そして、各プロパティを引数として詳細情報を参照します。 FileSystemObjectのファイル情報関連のプロパティは、次のようになっていますが、利用 環境によっては、 全ての情報を取得することができません。
https://www.yahoo.co.jpのサーバーからGMT(グリニッジ標準時)を取得します。 XMLHTTP コントロールにより、指定したURLを引数として、HTTPリクエストを送信します。 getResponseHeaderで 指定したレスポンスヘッダの内容を取得します。 statusは、HTTPレ スポンスステータスコードで、200ならOK、 404ならNot Foundとなります。 先程のgetResponseHeaderで"Date"を指定して、サーバーから GMT(グリニッジ標準時)を取得しています。結果は、sDate変数に返されます。
3.ソースコードについて 掲載ソースコードのライセンスは、CC0 (クレジット表示不要、改変可、商用可) とします。自由に利用して頂いてかまいません。 尚、データの取得やプログラム実行において損害等が生じた場合は、筆者は一切の責任も負いません。全て自己責任でお願いします。
■関連記事
・HSPとExcel VBAで情報取得 (COMオブジェクトの活用)
・HSPとExcel VBAで情報取得 (その1)
・HSPとExcel VBAで情報取得 (その2)
・HSPとExcel VBAで情報取得 (その3)
2.サンプル 2-1.ドライブ情報を取得する
ドライブの情報の取得には、FileSystemObjectを使います。Driveオブジェクトはドライブを表すオブジェクトで GetDriveメソッド、Drivesプロパティ、FileオブジェクトとFolderオブジェクトのDriveプロパティから取得でき ます。Driveオブジェクトには以下の12種類のプロパティがります。 ドライブ名、ドライブの種類、ディスクの空きスペースの大きさなどが取得できます。
ドライブ情報取得プロパティ |
プロパティ | 機 能 |
AvailableSpace | 利用可能な空きスペースの大きさを取得する |
DriveLetter | ドライブ名(「C」など)を取得する |
DriveType | ドライブの種類を取得する |
FileSystem | ドライブのファイルシステムを取得する |
FreeSpace | 利用可能な空きスペースの大きさを取得する |
AvailableSpace | ディスクの空きスペースの大きさを取得する |
IsRead | ドライブが準備できているかどうかを取得する |
Path | コロン付きのドライブ名を取得する |
RootFolder | プロパティルートフォルダを表すFolderオブジェクトを取得する |
SerialNumber | ディスクのシリアルナンバーを取得する |
ShareName | ネットワーク・ドライブの共有名を取得する |
TotalSize | ディスクの総容量を取得する |
VolumeName | ドライブのボリューム名を取得する |
;***** ドライブ情報の取得 ***** onexit *owari newcom objFS, "Scripting.FileSystemObject" ;ドライブ情報の取得 Drive = "D" objDrive=objFS("GetDrive", Drive) mes "AvailableSpace : " + strf("%3.0f", objDrive("AvailableSpace")) mes "DriveLetter : " + objDrive("DriveLetter") mes "DriveType : " + objDrive("DriveType") mes "FileSystem : " + objDrive("FileSystem") mes "FreeSpace : " + strf("%3.0f", objDrive("FreeSpace")) mes "IsReady : " + objDrive("IsReady") mes "Path : " + objDrive("Path") ;mes objDrive("RootFolder") ※取得できない mes "RootFolder : " mes "SerialNumber : " + objDrive("SerialNumber") mes "ShareName : " + objDrive("ShareName") mes "VolumeName : " + objDrive("VolumeName") mes " " mes "処理が終了しました。" stop *owari ;COMオブジェクト型で、有効なCOMオブジェクトを保持しているか if vartype(objFS)==6 { if varuse(objFS)==1 : delcom objFS } if vartype(objDrive)==6 { if varuse(objDrive)==1 : delcom objDrive } end
Sub GetDriveInfo() '***** ドライブ情報の取得 ***** Dim objFS, objDrive As Object Set objFS = CreateObject("Scripting.FileSystemObject") Set objDrive = objFS.GetDrive("D") '***** 表示処理 ***** Cells(1, 1).Value = "AvailableSpace : " & objDrive.AvailableSpace Cells(2, 1).Value = "DriveLetter : " & objDrive.DriveLetter Cells(3, 1).Value = "DriveType : " & objDrive.DriveType Cells(4, 1).Value = "FileSystem : " & objDrive.FileSystem Cells(5, 1).Value = "FreeSpace : " & objDrive.FreeSpace Cells(6, 1).Value = "IsReady : " & objDrive.IsReady Cells(7, 1).Value = "Path : " & objDrive.Path Cells(8, 1).Value = "RootFolder : " & objDrive.RootFolder Cells(9, 1).Value = "SerialNumber : " & objDrive.SerialNumber Cells(10, 1).Value = "ShareName : " & objDrive.ShareName Cells(11, 1).Value = "TotalSize : " & objDrive.TotalSize Cells(12, 1).Value = "VolumeName : " & objDrive.VolumeName Set objFS = Nothing Set objDrive = Nothing End Sub2-2.ファイルのサイズや属性等の詳細情報を取得する
ファイルの詳細情報の取得には、FileSystemObjectを使います。HSPでは、 ファイル選択ダイアログで任意のファイルを選 択して、ファイル名を引数とするGetFileメソッドに渡し、 objFInfoオブジェクト変数に ファイル情報を代入します。そして、各プロパティを引数として詳細情報を参照します。 FileSystemObjectのファイル情報関連のプロパティは、次のようになっていますが、利用 環境によっては、 全ての情報を取得することができません。
ファイル詳細情報取得関連プロパティ |
プロパティ | 意 味 |
Attributes | ファイルの属性の設定や値の取得を行なう |
DateCreated | ファイルの作成日時を返す。変更不可 |
DateLastAccessed | ファイルが最後にアクセスされたときの日付を返す。変更不可 |
DateLastModified | ファイルが最後に変更されたときの日時を返す。変更不可 |
Drive | ファイルが格納されているドライブ名を返す |
Name | ファイル名を返す。変更可能 |
ParentFolder | ファイルが格納されているフォルダ名を返す。変更不可 |
Path | ファイルのパスを返す |
ShortName | DOSの8.3形式のファイル名を返す。 |
ShortPath | ファイルの属性の設定や値の取得を行なう |
Size | ファイルのサイズ(バイト)を返す。 |
Type | ファイルの種類 ( 拡張子から判定 ) を返す。 |
;***** ファイル詳細情報の取得 ***** onexit *owari newcom objFS, "Scripting.FileSystemObject" sdim sFile,260,16 ;ファイルの指定 dialog "",16 : if stat==0 : stop ;ファイル存在の確認 (objexFile=0 : なし,objexFile=-1 : あり) objexFile=objFS("FileExists", refstr) if objexFile==0 { dialog "ファイルは存在しません。 結果="+objexFile stop } ;ファイル情報の取得 objFInfo=objFS("GetFile", refstr) sFile(0)=objFInfo("Name") sFile(1)=objFInfo("ShortName") sFile(2)=objFInfo("Path") sFile(3)=objFInfo("ShortPath") ;※取得できない ;sFile(4)=objFInfo("ParentFolder.Path") ;sFile(5)=objFInfo("Drive.Path") size=objFInfo("Size") sFile(7)=objFInfo("Type") att=objFInfo("Attributes") if (att&1)==1 : sFile(8)="読み取り専用" if (att&2)==2 : sFile(8)="隠しファイル" if (att&4)==4 : sFile(8)="システム" if (att&16)==16 : sFile(8)="フォルダ" if (att&32)==32 : sFile(8)="アーカイブ" ;※取得できない ;sFile(9)=objFInfo("DateCreated") ;sFile(10)=objFInfo("DateLastAccessed") ;sFile(11)=objFInfo("DateLastModified") ;ファイル情報の表示 font "Meiryo UI",14 : objmode 2 pos 10,10 mes "Name : "+sFile(0) mes "ShortName : "+sFile(1) mes "Path : "+sFile(2) mes "ShortPath : "+sFile(3) mes "ParentFolder.Path : "+sFile(4) mes "Drive.Path : "+sFile(5) mes "Size : "+size+" (byte)" mes "Type : "+sFile(7) mes "属性 : "+sFile(8) mes "DateCreated : "+sFile(9) mes "DateLastAccessed : "+sFile(10) mes "DateLastModified : "+sFile(11) mes " " mes "処理が終了しました。" stop *owari ;COMオブジェクト型で、有効なCOMオブジェクトを保持しているか if vartype(objFS)==6 { if varuse(objFS)==1 : delcom objFS } if vartype(objFInfo)==6 { if varuse(objFInfo)==1 : delcom objFInfo } end
Sub GetFileInfo() '***** ファイル詳細情報の取得 ***** Dim objFS, objFile As Object Dim SelFile As Variant Dim att As String Set objFS = CreateObject("Scripting.FileSystemObject") '***** ファイル選択 ***** SelFile = Application.GetOpenFilename("ファイル(*.*),*.*") If VarType(SelFile) = vbBoolean Then MsgBox "キャンセルされました" Exit Sub End If Set objFile = objFS.GetFile(SelFile) '***** 表示処理 ***** If objFile.Attributes = 1 Then att = "読み取り専用" If objFile.Attributes = 2 Then att = "隠しファイル" If objFile.Attributes = 4 Then att = "システム" If objFile.Attributes = 16 Then att = "フォルダ" If objFile.Attributes = 32 Then att = "アーカイブ" Cells(1, 1).Value = "Attributes : " & att & "(" & objFile.Attributes & ")" 'ファイルの属性 Cells(2, 1).Value = "DateCreated : " & objFile.DateCreated 'ファイルの作成日時 Cells(3, 1).Value = "DateLastAccessed : " & objFile.DateLastAccessed 'ファイルが最後にアクセスされたときの日付 Cells(4, 1).Value = "DateLastModified : " & objFile.DateLastModified 'ファイルが最後に変更されたときの日時 Cells(5, 1).Value = "Drive : " & objFile.Drive.Path 'ファイルが格納されているドライブ名 Cells(6, 1).Value = "Name : " & objFile.Name 'ファイル名 Cells(7, 1).Value = "ParentFolder : " & objFile.ParentFolder.Path 'ファイルが格納されているフォルダ名 Cells(8, 1).Value = "Path : " & objFile.Path 'ファイルのパス Cells(9, 1).Value = "ShortName : " & objFile.ShortName 'DOSの8.3形式のファイル名 Cells(10, 1).Value = "ShortPath : " & objFile.ShortPath 'DOSの8.3形式のフォルダ名 Cells(11, 1).Value = "Size : " & objFile.Size & "(byte)" 'ファイルのサイズ(バイト) Cells(12, 1).Value = "Type : " & objFile.Type 'ファイルの種類 ( 拡張子から判定 ) Set objFile = Nothing Set objFS = Nothing End Sub2-3.サーバーからGMT(グリニッジ標準時)を取得する
https://www.yahoo.co.jpのサーバーからGMT(グリニッジ標準時)を取得します。 XMLHTTP コントロールにより、指定したURLを引数として、HTTPリクエストを送信します。 getResponseHeaderで 指定したレスポンスヘッダの内容を取得します。 statusは、HTTPレ スポンスステータスコードで、200ならOK、 404ならNot Foundとなります。 先程のgetResponseHeaderで"Date"を指定して、サーバーから GMT(グリニッジ標準時)を取得しています。結果は、sDate変数に返されます。
;***** サーバからGMT(グリニッジ標準時)を取得 ***** pos 10,10 : mes "ネット接続環境によっては取得に時間がかかる場合があります。" newcom objXMLHTTP, "Microsoft.XMLHTTP" sURL = "https://www.yahoo.co.jp/" objXMLHTTP->"Open" "HEAD", sURL, 0 objXMLHTTP->"send" if objXMLHTTP("status") = 200 { sDate=objXMLHTTP("getResponseHeader", "Date") mes sDate }else{ dialog "接続に失敗致しました。",0,"エラー" } delcom objXMLHTTP stop
Sub GetGMT() '***** サーバからGMT(グリニッジ標準時)を取得 ***** Dim objXMLHTTP As Object Dim sURL As String Set objXMLHTTP = CreateObject("MSXML2.XMLHTTP") sURL = "https://www.yahoo.co.jp/" objXMLHTTP.Open "GET", sURL, False objXMLHTTP.send If objXMLHTTP.Status = 200 Then resData = objXMLHTTP.getResponseHeader("Date") MsgBox resData Else MsgBox "接続に失敗致しました。" End If Set oXMLHTTP = Nothing End Sub
3.ソースコードについて 掲載ソースコードのライセンスは、CC0 (クレジット表示不要、改変可、商用可) とします。自由に利用して頂いてかまいません。 尚、データの取得やプログラム実行において損害等が生じた場合は、筆者は一切の責任も負いません。全て自己責任でお願いします。
■関連記事
・HSPとExcel VBAで情報取得 (COMオブジェクトの活用)
・HSPとExcel VBAで情報取得 (その1)
・HSPとExcel VBAで情報取得 (その2)
・HSPとExcel VBAで情報取得 (その3)
コメント
コメントを投稿