Archive

Posts Tagged ‘ListBox’

Escuchar música desde Excel con el control WindowsMediaPlayer1

October 21, 2012 1 comment

El objetivo principal de este Post no es mostrar un reproductor de música en Excel, cosa que sería algo extensa de desarrollar por todo lo que implicaría los diferentes tipos de archivos de música y listas de reprodución.

El objetivo de este Post es mostrar como Excel puede manipular archivos de sonido mediante el control WindowsMediaPlayer, disponible en la librería de controles de Windows.

Al momento de insertar el control de Windows Media Player, ya podemos disponer de todas sus propiedades y métodos, como se muestra en la imagen.

image

Cómo funciona

El formulario contiene un ListBox donde se contendrá todos los archivos de audio en formato MP3 y WMA de la carpeta y sucarpetas que se elijan.

Posteriormente los botones de Anterior, Reproducir/Pausa, Parar y Siguiente se activarán para cumplir con las funciones de un reproductor de música.

En la parte inferior se mostrará el Título, artista, álbum, ubicación del archivo, género y duración de la canción. Aunque se podrán mostrar más etiquetas dependiendo de lo que se desee ver, tales como:

Sub Test()
    With frmAudio
        .WindowsMediaPlayer1.currentMedia.getItemInfo ("Name")
        .WindowsMediaPlayer1.currentMedia.getItemInfo ("author")
        .WindowsMediaPlayer1.currentMedia.getItemInfo ("Title")
        .WindowsMediaPlayer1.currentMedia.getItemInfo ("Album")
        .WindowsMediaPlayer1.currentMedia.getItemInfo ("copyright")
        .WindowsMediaPlayer1.currentMedia.getItemInfo ("Artist")
        .WindowsMediaPlayer1.currentMedia.getItemInfo ("Genre")
        .WindowsMediaPlayer1.currentMedia.getItemInfo ("Bitrate") / 1000 & " kbps"
        .WindowsMediaPlayer1.currentMedia.getItemInfo ("Abstract")
        .WindowsMediaPlayer1.currentMedia.getItemInfo ("bitRate")
        .WindowsMediaPlayer1.currentMedia.getItemInfo ("duration")
    End With
End Sub

Formulario en ejecución

image

Código del formulario

Private Sub btnAnterior_Click()
    On Error Resume Next
    Me.ListBox1.ListIndex = Me.ListBox1.ListIndex - 1
    Call Reproducir
    On Error GoTo 0
End Sub
'
Private Sub btnParar_Click()
    Me.WindowsMediaPlayer1.Controls.stop
    Me.btnReproducir.Caption = "Reproducir"
End Sub
'
Private Sub btnReproducir_Click()
    Items = Me.ListBox1.ListCount
    Cuenta = 0
    For i = 0 To Items - 1
        If Me.ListBox1.Selected(i) Then
            Cuenta = Cuenta + 1
        End If
    Next i
'
    If Cuenta = 0 Then
        Me.ListBox1.ListIndex = Me.ListBox1.ListIndex + 1
        Call Reproducir
    Else
        If Me.WindowsMediaPlayer1.playState = wmppsPaused Then
            Me.WindowsMediaPlayer1.Controls.Play
            Me.btnReproducir.Caption = "Pausa"
        Else
            If Me.WindowsMediaPlayer1.playState = wmppsPlaying Then
                Me.WindowsMediaPlayer1.Controls.pause
                Me.btnReproducir.Caption = "Reproducir"
            Else
                Call Reproducir
            End If
        End If
    End If
End Sub
'
Private Sub btnSiguiente_Click()
    On Error Resume Next
    Me.ListBox1.ListIndex = Me.ListBox1.ListIndex + 1
    Call Reproducir
    On Error GoTo 0
End Sub
'
Private Sub CommandButton1_Click()
    With Application.FileDialog(msoFileDialogFolderPicker)
        .InitialFileName = Application.DefaultFilePath & " \ "
        .Title = "EXCELeINFO - Seleccionar carpeta"
        .Show
        If .SelectedItems.Count = 0 Then
        Else
            Me.txtRuta.Value = .SelectedItems(1)
            frmAudio.ListBox1.Clear
            Call Listar
        End If
    End With
    Call EstadoBotones
End Sub

Sub Listar()
    If Me.txtRuta.Value = "" Then
        MsgBox "Debe seleccionar una ruta.", vbExclamation, AddIn
    Else
        Call ListFiles
    End If
End Sub
'
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    Call Reproducir
    Me.btnReproducir.Caption = "Pausa"
End Sub
'
Private Sub UserForm_Initialize()
    Call EstadoBotones
    With Me
        .WindowsMediaPlayer1.Visible = False
        .lblTrack.Visible = False
        .lblTipo.Visible = False
        .lblUbicacion.Visible = False
        .ListBox1.ColumnWidths = "0 pt;170 pt;100 pt;200 pt"
    End With
End Sub

El código completo se podrá consultar dentro del mismo archivo.

:: Descargar EXCELeINFO – escuchar música en Excel con WindowsMediaPlayer1.xlsm

Actualización: modificar tabla de Excel mediante ListBox con datos filtrados

September 30, 2012 17 comments

El 7-jul-12 había publicado un ejemplo que te permite pasar datos de una tabla de Excel a un objeto ListBox para después hacer modificaciones a los registros, así como poder eliminar los mismos.

En esta actualización añado un TextBox donde se podrá ingresar un texto para que los datos mostrados sean filtrados por ese texto.

Sugerencia: el ejemplo puede ser modificado para que tenga más prestaciones, lo cual podría convertirse es una aplicación en forma. Yo sólo dejo el ejemplo básico con el afán de que alguien lo pueda modificar a sus necesidades.

Formulario

image

Código del botón filtrar

Private Sub CommandButton5_Click()
On Error GoTo Errores
If Me.txtFiltro1.Value = "" Then Exit Sub
    Me.ListBox1.Clear
    j = 1
    For i = 1 To 18
        If Cells(i, j).Offset(0, 2).Value = CInt(Me.txtFiltro1.Value) Then
        Me.ListBox1.AddItem Cells(i, j)
        Me.ListBox1.List(Me.ListBox1.ListCount - 1, 1) = Cells(i, j).Offset(0, 1)
        Me.ListBox1.List(Me.ListBox1.ListCount - 1, 2) = Cells(i, j).Offset(0, 2)
        Me.ListBox1.List(Me.ListBox1.ListCount - 1, 3) = Cells(i, j).Offset(0, 3)
Else
End If
Next i
Exit Sub
Errores:
MsgBox "No se encuentra.", vbExclamation, "EXCELeINFO"
End Sub

:: Descargar el ejemplo

Modificar datos de una tabla con un ListBox en Excel

Este tema ya lo venía pensando a raíz de varias consultas en el Blog, y bueno, me di a la tarea de preparar un ejemplo sencillo, pero que puede servir de base para proyectos más ambiciosos.

El ejemplo tiene una tabla la cual se mostrará en un ListBox que está en un formulario. Para efecto de modificar los datos de cada registro, basta con elegir uno de ellos y presionar el botón Modificar y lanzará otro formulario donde se podrán actualizar los datos.

Al igual también cuenta con un botón de Eliminar para eliminar la fila donde está el registro,

Imagen del formulario

image

Código del formulario para mostrar datos

'Cerrar formulario
Private Sub CommandButton2_Click()
Unload Me
End Sub
'
'Abrir el formulario para modificar
Private Sub CommandButton3_Click()
If Me.ListBox1.ListIndex < 0 Then
    MsgBox "No se ha elegido ningún registro", vbExclamation, "EXCELeINFO"
Else
Modificar.Show
End If
End Sub
'
'Eliminar el registro
Private Sub CommandButton4_Click()
Pregunta = MsgBox("Está seguro de eliminar el registro?", vbYesNo + vbQuestion, "EXCELeINFO")
If Pregunta <> vbNo Then
    Fila = Me.ListBox1.ListIndex + 2
    Rows(Fila).Delete
Application.ScreenUpdating = True
End If
End Sub
'
'Activar la celda del registro elegido
Private Sub ListBox1_Click()
Fila = Me.ListBox1.ListIndex + 2
For i = 1 To 4
    Cells(Fila, 1).Activate
Next i
End Sub
'Dar formato al ListBox y traer datos de la tabla
Private Sub UserForm_Initialize()
With ListBox1
    .ColumnCount = 4
    .ColumnWidths = "60 pt;60 pt;70 pt"
    .ColumnHeads = True
End With
ListBox1.RowSource = "Tabla1"
End Sub

Código del formulario para modificar

'Actualizar el registro
Private Sub CommandButton1_Click()
For i = 1 To 4
    ActiveCell.Offset(0, i - 1).Value = Me.Controls("TextBox" & i).Value
Next i
Unload Me
End Sub
'
'Cerrar formulario
Private Sub CommandButton2_Click()
Unload Me
End Sub
'
'Llenar los cuadro de texto con los datos del registro elegido
Private Sub UserForm_Initialize()
For i = 1 To 4
    Me.Controls("TextBox" & i).Value = ActiveCell.Offset(0, i - 1).Value
Next i
End Sub

:: Descargar el ejemplo

EXCELeINFO add-in 2.2.8 – proteger varias hojas a la vez con contraseña

Tenía pendiente la herramienta para protegar varias hojas a la vez. Ahora la presento con la misma modalidad que las otras herramientas, con un ListBox donde aparecen todas las hojas del libro, además de indicarnos si la hoja ya está protegida o se encuentra visible.

Cómo funciona ??

Dentro del mismo formulario están las opciones para proteger y desproteger. Al momento de iniciar el formulario, queda activada la pestaña de protección con las opciones adicionales dependiendo del grado de protección. Cuando se elige el apartado de desprotección, se ocultan las opciones, ya que no son necesarias; con esto modificamos las dimensiones del Form en tiempo de ejecución.

Nota: la actual herramienta reemplaza las dos macros que hacían lo mismo, pero no tenían opción de asignarles contraseña.

Imágenes de ejemplo

image

Protección

image

Desprotección

:: Descargar EXCELeINFO add-in 2.2.8

Cerrar varios archivos a la vez en Excel

Se añade una nueva funcionalidad al Add-in, llamada Cerrar varios archivos a la vez, que nos permite elegir los archivos a cerrar.

Comportamiento:

Se muestra un formulario con un ListBox donde se enlistan todos los archivos abiertos, así como la propiedad Visible de cada uno. Cuenta con dos CheckBoxes, uno que nos permite elegir todos los elementos de la lista, y otro que da la opción de elegir si queremos que Excel nos advierta sobre los archivos que no han sido guardados.

Formulario en acciòn:

image

También comparto el código vba del formulario para que nos demos cuenta del uso y manipulación de LisBoxes, ventanas y archivos de Excel:

'---------------------------------------------------------------------------------------
' Module    : frmCerrarMultiplesArchivos
' Author    : Sergio A Campos H
' Date      : 21/05/2011
' Purpose   : Cerrar varios archivos a la vez
'---------------------------------------------------------------------------------------
'
Private Sub CheckBox2_Click()
'Elegir todas las opciones de todos los archivos
On Error Resume Next
If CheckBox2.Value = True Then
    For i = 0 To ListBox2.ListCount
        ListBox2.Selected(i) = True
    Next i
Else
    For i = 0 To ListBox2.ListCount
        ListBox2.Selected(i) = False
    Next i
End If
End Sub
'
Private Sub CommandButton1_Click()
'Cerrar formulario
Unload Me
End Sub
'
Private Sub CommandButton8_Click()
'Llama al prodedimiento para cerrar las ventanas seleccionadas
Call CerrarLibros
End Sub
'
Private Sub UserForm_Initialize()
Call LlenarListasTodosLibros
End Sub
'Procedimiento para cerrar archivos
Sub CerrarLibros()
Cuenta = ListBox2.ListCount
numero = 0
For j = 0 To Cuenta - 1
If ListBox2.Selected(j) = True Then
numero = numero + 1
End If
Next j
If numero <> 0 Then
    Resp = MsgBox("Desea cerrar los archivos seleccionados?", vbYesNo + vbQuestion, "EXCELeINFO")
    If Resp = vbNo Then Exit Sub
        Application.ScreenUpdating = False
        ACTUAL = ActiveWorkbook.Name
        primera = True
        On Error Resume Next
        Application.DisplayAlerts = CheckBox3.Value
        For i = 0 To Cuenta - 1
        If ListBox2.Selected(i) Then
            Text = ListBox2.List(i)
            Workbooks(Text).Close
            Else
            If ListBox2.Selected(i) <> True Then
        End If
    End If
    Next i
    Sheets(1).Select
    Unload Me
    Workbooks(ACTUAL).Activate
    Application.StatusBar = False
    Application.ScreenUpdating = True
End If
Exit Sub
ErrorHandler:
Workbooks(ACTUAL).Activate
Application.StatusBar = False
Application.ScreenUpdating = True
MsgBox "Ha ocurrido un error: comprueba que no hayas elegido alguna hoja oculta. " & err.Description, vbExclamation, AddIn
End Sub
'
'Enlistar el nombre de la ventana en el ListBox
Sub LlenarListasTodosLibros()
'Todos los archivos
ListBox2.Clear
suma1 = 0
For i = 1 To Application.Windows.Count
    ListBox2.AddItem Windows(i).Caption
        Select Case Windows(i).Visible
            Case Is = True
                    Ver = "Visible"
            Case Is = False
                    Ver = "No visible"
                    suma1 = suma1 + 1
            End Select
       ListBox2.List(ListBox2.ListCount - 1, 1) = Ver
Next i
Label2.Caption = "Archivos: " & ListBox2.ListCount & vbNewLine & "Archivos ocultos: " & suma1
CheckBox3.Value = True
End Sub

:: Descargar ejemplo

:: Descargar EXCELeINFO 2.2.6

Categories: vba Tags: , , , ,

EXCELeINFO add-in: Imprimir múltiples hojas a la vez

Presento la nueva versión de mi Add-in con la reciente función añadida de Imprimir varias hojas al mismo tiempo.

El comando permitirá visualizar en un ListBox todas las hojas de todos los libros abiertos en Excel, incluídos los que estén ocultos, así como también las hojas ocultas. El formulario está dentro del menú Archivos.

Sólo será necesario elegir las hojas que se deseen imprimir y presionar el botón.

Nota: las impresiones de enviará a la impresosa predeterminada y no se podrán imprimir las hojas ocultas, ya por algo el usuario les da ese privilegio.

Imagen del formulario en acción:

image

:: Descargar EXCELeINFO 2.2.5

Categories: vba Tags: , , ,

Add-in: formulario administración de hojas (mostrar, ocultar, ordenar, agrupar)

April 28, 2011 14 comments

Se añade al Add-in un formulario de administración de hojas, tanto del libro activo, como de todos los libros abiertos.

Se diseña el formulario ante la necesidad de poder mostrar u ocultar hojas mediante una lista y poder elegir las que deseemos; así como también ordenar alfabéticamente.

En cuanto a todas las hojas de los libros abiertos (incluídos los ocultos), se añade la funcionalidad de poder elegir entre todas las hojas y poder agruparlas en un sólo archivo.

Funcionalidad:

Se añade al menú Hojas del Add-in EXCELeINFO, y mostrará un formulario con un MultiPage, el cual tiene dos pestañas. La primer pestaña es la de ‘Hojas libro activo’, donde encontraremos los botones de Mostrar hojas, Ocultar hojas y Ordenar hojas, permiténdonos aplicar cualquiera de las tres opciones a las hojas elegidas, como se muestra en la imagen:

image

En la segunda pestaña llamada ‘Hojas todos los libros’ aparece una lista de todas las hojas de los libros abiertos (incluyendo los ocultos) y un botón que nos permitirá agrupar las hojas seleccionadas en un archivo nuevo, como se muestra en la imagen:

image

:: Descargar EXCELeINFO add-in 2.2.2

Categories: Excel, vba Tags: , , , , ,