Hojas de cálculo en Excel - página principal

Espacio libre y espacio total en disco

Algunas veces, nos interesa obtener información sobre el espacio libre que tiene un disco (ya sea un disco duro, un disco externo, una llave USB, etc.). Desde VBA, y a través de un macro, esta operación es tan sencilla como aquella en la que vimos como determinar la fecha de creación, la fecha de modificación, la fecha del último acceso, y el peso de kbytes de un fichero.

Para ello, volveremos una vez más a utilizar el siempre socorrido objeto FileSystemObject. Tan solo tendremos que llamar a la propiedad AvailableSpace, y que será la que nos aportará la información que estamos buscando.

Vamos a ilustrar esto con un ejemplo, como suele ser habitual. Vamos a redondearlo un poquito más, y montaremos un desplegable en el que se nos cargarán las unidades disponibles (C:, D:, F:, etc.). Seleccionaremos una de ellas, pulsaremos sobre un botón habilitado a tal efecto, y nos determinará el espacio libre que hay en esa unidad que hemos elegido. Lo primero que haremos será precisamente el desplegable (un combobox) que incluiremos en un UserForm, y al que le asociaremos este código cada vez que se cargue:


Private Sub UserForm_Initialize()
'Creamos el objeto fso
Set fso = CreateObject("Scripting.FileSystemObject")
'vamos a mirar las unidades que hay
Set unidades = fso.Drives
For Each Unidad In unidades
'Recorremos la colección
ComboBox1.AddItem Unidad.DriveLetter
Next
'limpiamos los objetos
Set unidades = Nothing
Set fso = Nothing
End Sub

Ese código hará que cada vez que se cargue el UserForm, se rellene automáticamente el ComboBox1 con las unidades disponibles en el sistema.

Ahora asociaremos este otro código a un botón que hay en el UserFrom:

Private Sub CommandButton1_Click()
'Si hay errores, que continúe
On Error Resume Next
'Miramos qué elemento se ha seleccionado
'del Combobox1, y lo pasamos a una variable

unidad_elegida = ComboBox1.List(ComboBox1.ListIndex)
'creamos el objeto fso
Set fso = CreateObject("Scripting.FileSystemObject")
Set driveObject = fso.GetDrive(unidad_elegida)
'pasamos los datos que nos interesan, a variables
espacio_total = FormatNumber(driveObject.TotalSize / 1024 / 1024 / 1024, 2, , , -1)
espacio_libre = FormatNumber(driveObject.AvailableSpace / 1024 / 1024 / 1024, 2, , , -1)
porcentaje_libre = FormatNumber(espacio_libre * 100 / espacio_total, 2, , , -1)
'si no hay errores, mostramos un MsgBox
If Err = 0 Then
MsgBox (Chr(13) + "Espacio total: " _
+ espacio_total & " Gb" _
+ Chr(13) _
+ "Espacio disponible (libre): " _
+ espacio_libre & " Gb" _
+ " (" & porcentaje_libre & "% libre)" _
+ Chr(13) + Chr(13)), vbOKOnly, " Espacio libre"
End If
'limpiamos los objetos
Set driveObject = Nothing
Set fso = Nothing
End Sub

El formulario que tendremos que diseñar, deberá tener un aspecto parecido a este:


Si os fijáis bien, en el segundo código que he puesto (el del CommandButton1), aparte de mostrar el espacio disponible de cada unidad, también mostraremos el espacio total que tiene. Aquí tenéis un ejemplo de lo que sale si ejecuto la consulta de una unidad F (una llave USB), de 2 Gb de capacidad (en la imagen, he desplazado el Msgbox, para que se vea el UserForm al fondo):


Si nos encontramos con alguna unidad de tipo CD-ROM o DVD, evidentemente, no obtendremos los datos del espacio libre y del espacio disponible, pues esas unidades no nos pueden aportan esos datos, ya que no son ellas las que físicamente almacenan los datos, sino los soportes, es decir, los discos que introducimos en esas unidades (los CD's o los DVD's).

Desde aquí podéis descargar el fichero, con el ejemplo que hemos visto en este artículo.



0 comentarios: