' [336.xls] ' [Module1] のコード '★★☆ ドライブ情報をリストボックスに表示する ☆★★ Option Explicit '現在使用可能な全てのドライブを検索するAPI関数 Declare Function GetWindowsDirectory Lib "kernel32" Alias "GetWindowsDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long '2GB超ドライブに関する情報(空き容量など)を取得するAPI関数 Declare Function GetDiskFreeSpaceEx Lib "kernel32" _ Alias "GetDiskFreeSpaceExA" _ (ByVal lpDirectoryName As String, _ lpFreeBytesAvailableToCaller As ULARGE_INTEGER, _ lpTotalNumberOfBytes As ULARGE_INTEGER, _ lpTotalNumberOfFreeBytes As ULARGE_INTEGER) As Long Type ULARGE_INTEGER LowPart As Long HighPart As Long End Type Sub start() UserForm1.Show End Sub ' [UserForm1] のコード Option Explicit Private Sub ListBox1_Click() Dim drivname As String 'ディスクのルートディレクトリ Dim udtFreeBytesAvailableToCaller As ULARGE_INTEGER 'ディスクの空き容量 Dim udtTotalNumberOfBytes As ULARGE_INTEGER 'ディスクの総容量 Dim udtTotalNumberOfFreeBytes As ULARGE_INTEGER 'ディスクの空き容量 Dim rc As Long Dim vntLowPart1 As Variant '空き容量 Dim vntHighPart1 As Variant '空き容量 Dim vntTotal1 As Variant '空き容量 Dim vntLowPart2 As Variant '総容量 Dim vntHighPart2 As Variant '総容量 Dim vntTotal2 As Variant '総容量 drivname = ListBox1.Value rc = GetDiskFreeSpaceEx(drivname, _ udtFreeBytesAvailableToCaller, _ udtTotalNumberOfBytes, _ udtTotalNumberOfFreeBytes) With udtTotalNumberOfFreeBytes vntLowPart1 = CDec(.LowPart) vntHighPart1 = CDec(.HighPart) End With vntTotal1 = (vntHighPart1 * 2 ^ 32) + vntLowPart1 If vntTotal1 < 0 Then vntTotal1 = vntTotal1 + 4294967296# End If With udtTotalNumberOfBytes vntLowPart2 = CDec(.LowPart) vntHighPart2 = CDec(.HighPart) End With vntTotal2 = (vntHighPart2 * 2 ^ 32) + vntLowPart2 If vntTotal2 < 0 Then vntTotal2 = vntTotal2 + 4294967296# End If 'API関数で取得したドライブの情報をセルに表示 [E8] = drivname & " の総容量: " & Format(vntTotal2, "#,### バイト") [E9] = "  空き容量: " & Format(vntTotal1, "#,### バイト") & "です" End Sub Private Sub UserForm_Initialize() Dim I As Integer Dim ドライブ名 As String ListBox1.ColumnWidths = "1 cm" For I = 65 To 90 ドライブ名 = Chr(I) On Error Resume Next ChDrive ドライブ名 If Err.Number = 0 Then 'API関数で取得した表示可能ドライブ名をリストボックスに格納 ListBox1.AddItem (ドライブ名 & ":\") End If Next 'リストボックスの最初の行をマクロから選択 ListBox1.Selected(0) = True End Sub Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) '終了時に、セルに書き込んだ情報を消す [E8:E9] = "" End Sub