<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://www.vbex.ru/index.php?action=history&amp;feed=atom&amp;title=VBA%2FExcel%2FAccess%2FWord%2FFile_Path%2FDrive</id>
		<title>VBA/Excel/Access/Word/File Path/Drive - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://www.vbex.ru/index.php?action=history&amp;feed=atom&amp;title=VBA%2FExcel%2FAccess%2FWord%2FFile_Path%2FDrive"/>
		<link rel="alternate" type="text/html" href="http://www.vbex.ru/index.php?title=VBA/Excel/Access/Word/File_Path/Drive&amp;action=history"/>
		<updated>2026-04-06T02:56:27Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://www.vbex.ru/index.php?title=VBA/Excel/Access/Word/File_Path/Drive&amp;diff=1464&amp;oldid=prev</id>
		<title> в 16:33, 26 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://www.vbex.ru/index.php?title=VBA/Excel/Access/Word/File_Path/Drive&amp;diff=1464&amp;oldid=prev"/>
				<updated>2010-05-26T16:33:00Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 16:33, 26 мая 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
			</entry>

	<entry>
		<id>http://www.vbex.ru/index.php?title=VBA/Excel/Access/Word/File_Path/Drive&amp;diff=1465&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://www.vbex.ru/index.php?title=VBA/Excel/Access/Word/File_Path/Drive&amp;diff=1465&amp;oldid=prev"/>
				<updated>2010-05-26T12:47:11Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==Display Drive information==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Sub cmdDriveInfo_Click()&lt;br /&gt;
    Dim myFileSystemObject As FileSystemObject, aDrive As Drive&lt;br /&gt;
    Set myFileSystemObject = New FileSystemObject&lt;br /&gt;
    Set aDrive = myFileSystemObject.GetDrive(&amp;quot;C:\&amp;quot;)&lt;br /&gt;
    With aDrive&lt;br /&gt;
        Debug.Print &amp;quot;Volume Name: &amp;quot; &amp;amp; .VolumeName &amp;amp; vbCrLf&lt;br /&gt;
        Debug.Print &amp;quot;Free Space: &amp;quot; &amp;amp; Format(.FreeSpace / 1000000000#, &amp;quot;#0.00&amp;quot;) &amp;amp; &amp;quot;GB&amp;quot; &amp;amp; vbCrLf&lt;br /&gt;
        Debug.Print &amp;quot;Total Size: &amp;quot; &amp;amp; Format(.TotalSize / 1000000000#, &amp;quot;#0.00&amp;quot;) &amp;amp; &amp;quot;GB&amp;quot; &amp;amp; vbCrLf&lt;br /&gt;
        Debug.Print &amp;quot;Ready: &amp;quot; &amp;amp; .IsReady&lt;br /&gt;
    End With&lt;br /&gt;
    Set myFileSystemObject = Nothing&lt;br /&gt;
    Set aDrive = Nothing&lt;br /&gt;
End Sub&lt;br /&gt;
Private Sub AddFolders()&lt;br /&gt;
 &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Get Drive Information==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Declare Function abGetDriveType Lib &amp;quot;kernel32&amp;quot; Alias &amp;quot;GetDriveTypeA&amp;quot; (ByVal nDrive As String) As Long&lt;br /&gt;
Declare Function abGetDiskFreeSpace Lib &amp;quot;kernel32&amp;quot; Alias &amp;quot;GetDiskFreeSpaceA&amp;quot; (ByVal lpRootPathName As String, lpSectorsPerCluster As Long, lpBytesPerSector As Long, lpNumberOfFreeClusters As Long, lpTotalNumberOfClusters As Long) As Long&lt;br /&gt;
&amp;quot;The GetDriveInfo Procedure&lt;br /&gt;
Sub GetDriveInfo()&lt;br /&gt;
   Dim intDrive As Integer&lt;br /&gt;
   Dim strDriveLetter As String&lt;br /&gt;
   Dim strDriveType As String&lt;br /&gt;
   Dim strSpaceFree As String&lt;br /&gt;
   &amp;quot;Loop through all drives&lt;br /&gt;
   For intDrive = 65 To 90 &amp;quot;A through Z&lt;br /&gt;
     strDriveLetter = (Chr(intDrive) &amp;amp; &amp;quot;:\&amp;quot;)&lt;br /&gt;
     &amp;quot;Get Drive Type&lt;br /&gt;
     strDriveType = TypeOfDrive(strDriveLetter)&lt;br /&gt;
     &amp;quot;Get Space Free&lt;br /&gt;
     strSpaceFree = NumberOfBytesFree(strDriveLetter)&lt;br /&gt;
     Debug.Print Left(strDriveLetter, 2) &amp;amp; _&lt;br /&gt;
         &amp;quot; - &amp;quot; &amp;amp; strDriveType &amp;amp; _&lt;br /&gt;
         IIf(strDriveType &amp;lt;&amp;gt; &amp;quot;Drive Doesn&amp;quot;t Exist&amp;quot;, _&lt;br /&gt;
            strSpaceFree, &amp;quot;&amp;quot;) &amp;amp; _&lt;br /&gt;
         vbCrLf&lt;br /&gt;
   Next intDrive&lt;br /&gt;
End Sub&lt;br /&gt;
 &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Returns a string that describes the drive type==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Private Declare Function GetDriveType32 Lib &amp;quot;kernel32&amp;quot; Alias &amp;quot;GetDriveTypeA&amp;quot; (ByVal nDrive As String) As Long&lt;br /&gt;
Function DriveType(DriveLetter As String) As String&lt;br /&gt;
    DLetter = Left(DriveLetter, 1) &amp;amp; &amp;quot;:&amp;quot;&lt;br /&gt;
    DriveCode = GetDriveType32(DLetter)&lt;br /&gt;
    Select Case DriveCode&lt;br /&gt;
        Case 1: DriveType = &amp;quot;Local&amp;quot;&lt;br /&gt;
        Case 2: DriveType = &amp;quot;Removable&amp;quot;&lt;br /&gt;
        Case 3: DriveType = &amp;quot;Fixed&amp;quot;&lt;br /&gt;
        Case 4: DriveType = &amp;quot;Remote&amp;quot;&lt;br /&gt;
        Case 5: DriveType = &amp;quot;CD-ROM&amp;quot;&lt;br /&gt;
        Case 6: DriveType = &amp;quot;RAM Disk&amp;quot;&lt;br /&gt;
        Case Else: DriveType = &amp;quot;Unknown Drive Type&amp;quot;&lt;br /&gt;
    End Select&lt;br /&gt;
End Function&lt;br /&gt;
Sub Main()&lt;br /&gt;
  Debug.Print DriveType(&amp;quot;c:\&amp;quot;)&lt;br /&gt;
End Sub&lt;br /&gt;
 &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Returns the drive letter using an index==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Private Declare Function GetLogicalDriveStrings Lib &amp;quot;kernel32&amp;quot; Alias &amp;quot;GetLogicalDriveStringsA&amp;quot; (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long&lt;br /&gt;
Function DriveName(index As Integer) As String&lt;br /&gt;
    Dim Buffer As String * 255&lt;br /&gt;
    Dim BuffLen As Long&lt;br /&gt;
    Dim TheDrive As String&lt;br /&gt;
    Dim DriveCount As Integer&lt;br /&gt;
   &lt;br /&gt;
    BuffLen = GetLogicalDriveStrings(Len(Buffer), Buffer)&lt;br /&gt;
    TheDrive = &amp;quot;&amp;quot;&lt;br /&gt;
    DriveCount = 0&lt;br /&gt;
    For i = 1 To BuffLen&lt;br /&gt;
        If Asc(Mid(Buffer, i, 1)) &amp;lt;&amp;gt; 0 Then _&lt;br /&gt;
          TheDrive = TheDrive &amp;amp; Mid(Buffer, i, 1)&lt;br /&gt;
        If Asc(Mid(Buffer, i, 1)) = 0 Then &amp;quot;null separates drives&lt;br /&gt;
            DriveCount = DriveCount + 1&lt;br /&gt;
            If DriveCount = index Then&lt;br /&gt;
                DriveName = UCase(Left(TheDrive, 1))&lt;br /&gt;
                Exit Function&lt;br /&gt;
            End If&lt;br /&gt;
            TheDrive = &amp;quot;&amp;quot;&lt;br /&gt;
        End If&lt;br /&gt;
    Next i&lt;br /&gt;
End Function&lt;br /&gt;
Sub Main()&lt;br /&gt;
  Debug.Print DriveName(3)&lt;br /&gt;
End Sub&lt;br /&gt;
 &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Returns the number of drives==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Private Declare Function GetLogicalDriveStrings Lib &amp;quot;kernel32&amp;quot; Alias &amp;quot;GetLogicalDriveStringsA&amp;quot; (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long&lt;br /&gt;
Function NumberofDrives() As Integer&lt;br /&gt;
    Dim Buffer As String * 255&lt;br /&gt;
    Dim BuffLen As Long&lt;br /&gt;
    Dim DriveCount As Integer&lt;br /&gt;
   &lt;br /&gt;
    BuffLen = GetLogicalDriveStrings(Len(Buffer), Buffer)&lt;br /&gt;
    DriveCount = 0&lt;br /&gt;
    For i = 1 To BuffLen&lt;br /&gt;
        If Asc(Mid(Buffer, i, 1)) = 0 Then _&lt;br /&gt;
          DriveCount = DriveCount + 1&lt;br /&gt;
    Next i&lt;br /&gt;
    NumberofDrives = DriveCount&lt;br /&gt;
End Function&lt;br /&gt;
Sub Main()&lt;br /&gt;
  Debug.Print NumberofDrives&lt;br /&gt;
End Sub&lt;br /&gt;
 &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Returns the number of free bytes for a drive==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Private Declare Function GetDiskFreeSpace Lib &amp;quot;kernel32&amp;quot; Alias &amp;quot;GetDiskFreeSpaceA&amp;quot; (ByVal lpRootPathName As String, lpSectorsPerCluster As Long, lpBytesPerSector As Long, lpNumberOfFreeClusters As Long, lpTtoalNumberOfClusters As Long) As Long&lt;br /&gt;
Sub FreeDiskSpace()&lt;br /&gt;
    Dim SectorsPerCluster As Long&lt;br /&gt;
    Dim BytesPerSector As Long&lt;br /&gt;
    Dim NumberofFreeClusters As Long&lt;br /&gt;
    Dim TotalClusters As Long&lt;br /&gt;
    x = GetDiskFreeSpace(&amp;quot;c:\&amp;quot;, SectorsPerCluster, _&lt;br /&gt;
      BytesPerSector, NumberofFreeClusters, TotalClusters)&lt;br /&gt;
    &lt;br /&gt;
    If x = 0 Then &amp;quot;Error occurred&lt;br /&gt;
        Exit Sub&lt;br /&gt;
    End If&lt;br /&gt;
    Debug.Print SectorsPerCluster&lt;br /&gt;
    Debug.Print BytesPerSector&lt;br /&gt;
    Debug.Print NumberofFreeClusters&lt;br /&gt;
End Sub&lt;br /&gt;
 &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Returns the total storage capacity for a drive==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Private Declare Function GetDiskFreeSpace Lib &amp;quot;kernel32&amp;quot; Alias &amp;quot;GetDiskFreeSpaceA&amp;quot; (ByVal lpRootPathName As String, lpSectorsPerCluster As Long, lpBytesPerSector As Long, lpNumberOfFreeClusters As Long, lpTtoalNumberOfClusters As Long) As Long&lt;br /&gt;
Sub TotalDiskSpace()&lt;br /&gt;
    Dim SectorsPerCluster As Long&lt;br /&gt;
    Dim BytesPerSector As Long&lt;br /&gt;
    Dim NumberofFreeClusters As Long&lt;br /&gt;
    Dim TotalClusters As Long&lt;br /&gt;
    x = GetDiskFreeSpace(&amp;quot;c:\&amp;quot;, SectorsPerCluster, _&lt;br /&gt;
      BytesPerSector, NumberofFreeClusters, TotalClusters)&lt;br /&gt;
    &lt;br /&gt;
    If x = 0 Then &amp;quot;Error occurred&lt;br /&gt;
        &lt;br /&gt;
        Exit Sub&lt;br /&gt;
    End If&lt;br /&gt;
    Debug.Print SectorsPerCluster&lt;br /&gt;
    Debug.Print BytesPerSector&lt;br /&gt;
    Debug.Print TotalClusters&lt;br /&gt;
End Sub&lt;br /&gt;
 &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Returns True if a specified drive letter exists==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Private Declare Function GetLogicalDriveStrings Lib &amp;quot;kernel32&amp;quot; Alias &amp;quot;GetLogicalDriveStringsA&amp;quot; (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long&lt;br /&gt;
Function DriveExists(DriveLetter As String) As Boolean&lt;br /&gt;
    Dim Buffer As String * 255&lt;br /&gt;
    Dim BuffLen As Long&lt;br /&gt;
   &lt;br /&gt;
    DLetter = Left(DriveLetter, 1)&lt;br /&gt;
    BuffLen = GetLogicalDriveStrings(Len(Buffer), Buffer)&lt;br /&gt;
    DriveExists = False&lt;br /&gt;
    For i = 1 To BuffLen&lt;br /&gt;
        If UCase(Mid(Buffer, i, 1)) = UCase(DLetter) Then&lt;br /&gt;
            DriveExists = True&lt;br /&gt;
            Exit Function&lt;br /&gt;
        End If&lt;br /&gt;
    Next i&lt;br /&gt;
End Function&lt;br /&gt;
Sub Main()&lt;br /&gt;
  Debug.Print DriveExists(&amp;quot;c:\&amp;quot;)&lt;br /&gt;
End Sub&lt;br /&gt;
 &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==The NumberOfBytesFree Function==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Function NumberOfBytesFree(ByVal strDrive As String) As String&lt;br /&gt;
   Dim lngSectors As Long&lt;br /&gt;
   Dim lngBytes As Long&lt;br /&gt;
   Dim lngFreeClusters As Long&lt;br /&gt;
   Dim lngTotalClusters As Long&lt;br /&gt;
   Dim intErrNum As Integer&lt;br /&gt;
   intErrNum = abGetDiskFreeSpace(strDrive, lngSectors, _&lt;br /&gt;
   lngBytes, lngFreeClusters, lngTotalClusters)&lt;br /&gt;
   NumberOfBytesFree = &amp;quot; with &amp;quot; &amp;amp; _&lt;br /&gt;
         Format((CDbl(lngBytes) * CDbl(lngSectors)) * _&lt;br /&gt;
         CDbl(lngFreeClusters), &amp;quot;#,##0&amp;quot;) &amp;amp; _&lt;br /&gt;
         &amp;quot; Bytes Free&amp;quot;&lt;br /&gt;
End Function&lt;br /&gt;
 &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==The TypeOfDrive Function==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Function TypeOfDrive(ByVal strDrive As String) As String&lt;br /&gt;
   Dim intDriveType As Integer&lt;br /&gt;
   Dim strDriveType As String&lt;br /&gt;
      intDriveType = abGetDriveType(strDrive)&lt;br /&gt;
      Select Case intDriveType&lt;br /&gt;
         Case DRIVE_UNKNOWN&lt;br /&gt;
            strDriveType = &amp;quot;Type Unknown&amp;quot;&lt;br /&gt;
         Case DRIVE_UNAVAILABLE&lt;br /&gt;
             strDriveType = &amp;quot;Drive Doesn&amp;quot;t Exist&amp;quot;&lt;br /&gt;
         Case DRIVE_REMOVABLE&lt;br /&gt;
             strDriveType = &amp;quot;Removable Drive&amp;quot;&lt;br /&gt;
         Case DRIVE_FIXED&lt;br /&gt;
             strDriveType = &amp;quot;Fixed Drive&amp;quot;&lt;br /&gt;
         Case DRIVE_REMOTE&lt;br /&gt;
             strDriveType = &amp;quot;Network Drive&amp;quot;&lt;br /&gt;
         Case DRIVE_CDROM&lt;br /&gt;
             strDriveType = &amp;quot;CD-ROM&amp;quot;&lt;br /&gt;
         Case DRIVE_RAMDISK&lt;br /&gt;
             strDriveType = &amp;quot;RAM Disk&amp;quot;&lt;br /&gt;
      End Select&lt;br /&gt;
      TypeOfDrive = strDriveType&lt;br /&gt;
End Function&lt;br /&gt;
 &amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	</feed>