Option Explicit
Private Declare Function GetLogicalDriveStrings Lib "kernel32" Alias "GetLogicalDriveStringsA" (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long
Private Declare Function GetDriveType Lib "kernel32" Alias "GetDriveTypeA" (ByVal nDrive As String) As LongPrivate Sub Form_Click()
    Dim StrDrive As String           '盘符串(A:\ C:\ D:\...)
    Dim DriveID As String            '盘符(如:A:\)
    StrDrive = String(100, Chr$(0))  '初始化盘符串
    Call GetLogicalDriveStrings(100, StrDrive) '返回盘符串
    Dim i As Integer
   '返回光盘盘符到数组
    For i = 1 To 100 Step 4             '注意这里是4
      DriveID = Mid(StrDrive, i, 3)  '枚举盘符
      If DriveID = Chr$(0) & Chr(0) & Chr(0) Then Exit For '没有盘符,即时退出循环
      'Debug.Print DriveID
      If GetDriveType(DriveID) = 5 Then Call ShellPro(DriveID)
      '如果枚举到的盘是CD-ROM,转到 ShellPro 子程序
    Next i
End Sub'子程序:::::打开文件
Sub ShellPro(DrivePro As String) On Error GoTo Err_File:
    If Not IsEmptyCDROM(DrivePro) Then
        Shell (DrivePro & "Hello.exe")   '打开文件路径
        Unload Me
        End  '并结束本程序
    Else
        Debug.Print "cdrom empty"
    End If
Err_File:
   If Err.Description = "错语的文件名或号码" Then Exit Sub
End Sub    Function IsEmptyCDROM(sDrive As String)
     Dim s
     
     On Error GoTo ErrHandle
     s = Dir(sDrive + "*.*")
     IsEmptyCDROM = False
     Exit Function
ErrHandle:
     IsEmptyCDROM = True
    End Function