¿Cómo hacer una rockola actualizable en Excel?

Estoy con ganas de hacer lo siguiente:
En la hoja1 de excel con 2 columnas poner, en A1 "CÓDIGO DE ALBUM)" y debajo de esta códigos numéricos (p/ej 0008549)
Por otra parte en B1 quiero poner "ALBUM" y debajo de esta, archivos de video correspondientes a cada código... Quedaría algo así...

  CODIGO               ALBUM
00001000         elton_john_the_one.mp4
00001001         rolling_stones_start_me_up.mp4
00001002         pink_floyd_The_dark_side_of_the_moon.mp4

Teniendo ese listado, quiero que en un formulario en el que tengo un textBox y un reproductor de windowsMedia, ingresar el código del album que quiero reproducir, que lo busque en la columna "A" de la hoja1 dicho código y reproduzca el archivo que figura en la misma línea pero en la columna "B".
Todos los archivos de la columna "B" los guardo en una carpeta local.

1 respuesta

Respuesta
2

¿Qué pasó con los niños ;)

Este sería el código. Tu combobox tendrá asignado el rango de la col A (en propiedad RowSource)

Private Sub ComboBox1_Change()
'x Elsamatilde
'si el control queda vacío no se ejecuta
If ComboBox1 = "" Then Exit Sub
'carpeta donde estarán los videos
videos = "C:\Users\elsam\Downloads\jardin\"
'se busca el cod en col A de la hoja activa
Set busco = ActiveSheet.Range("A:A").Find(ComboBox1, LookIn:=xlValues, lookat:=xlWhole)
'si no encuentra el código cancela
If busco Is Nothing Then Exit Sub
elvideo = busco.Offset(0, 1)
'contempla posible error
On Error Resume Next
    WindowsMediaPlayer1.URL = videos & elvideo
End Sub

Ajusta la ruta de los videos y en la línea del Set busco indico que se mire en la hoja activa.... podés indicar otra hoja reemplazando la palabra ActiveSheet por Sheets("Hoja1") o la que fuese.

Si los códigos están como números en la col A quizás tengas que evaluarlo como:

Set busco = ActiveSheet.Range("A:A").Find(Val(ComboBox1), LookIn:=xlValues, lookat:=xlWhole)

Sdos!

Jajajaj que genia EM! Quedó genial la de las vocales, ahora (porque una cosa me lleva a otra...) 
Estoy a full queriendo terminar esta rockola, y luego de manipular un poco el código tengo esto...
-----

Private Sub ComboBox1_Change()
'x Elsamatilde

'si el control queda vacío no se ejecuta

If ComboBox1 = "" Then Exit Sub

'carpeta donde estarán los videos

videos = "C:\Users\LOSBOA\Desktop\Ideas y Proyectos\rockola\videos\"

'se busca el cod en col A de la hoja activa

Set busco = ActiveSheet.Range("A:A").Find(Val(ComboBox1), LookIn:=xlValues, lookat:=xlWhole)

'si no encuentra el código cancela

If busco Is Nothing Then Exit Sub

Set ext = ActiveSheet.Range("D1")

elvideo = busco.Offset(0, 1)

'contempla posible error

On Error Resume Next

WindowsMediaPlayer1.URL = videos & elvideo & ext

ComboBox1 = ""
End Sub

Private Sub UserForm_Click()

End Sub

Private Sub WindowsMediaPlayer1_OpenStateChange(ByVal NewState As Long)
On Error Resume Next
WindowsMediaPlayer1.fullScreen = True
End Sub

Private Sub UserForm_Initialize()
ComboBox1.SetFocus 
End Sub
-----

Funciona, pero me está faltando lo siguiente...

- Ante un código desconocido, o vacío, el cursor vuelva a titilar en el combobox

- Luego de reproducir el video necesito que vuelva a  titilar el cursor en el combobox. (Pero como la idea es introducir el código con un scanner de cód. de barras, luego del código, el scanner envía un "ENTER", y si el código se ingresa a mano, en el momento que coincide con uno existente ya se reproduce el video)

Para que vuelva a posicionarse en el combobox si la búsqueda no devuelve resultados, agregá estas instrucciones en el evento Change:

Set busco = ActiveSheet.Range("A:A").Find(Val(ComboBox1), LookIn:=xlValues, lookat:=xlWhole)
'si no encuentra el código cancela
If busco Is Nothing Then
    ComboBox1 = "": ComboBox1.SetFocus: Exit Sub
End If
'sigue el código

Y lo mismo debieras agregar al finalizar el video, en esta línea antes del End Sub:

ComboBox1 = "" : ComboBox1.setfocus

Sdos!

Muchas gracias E.M por tu amable respuesta, pero ninguna de las 2 soluciones me ha funcionado.
En el caso de que no encuentra el código, falla porque al ingresar el primer caracter, el sistema busca el código en la columna "A" y al no encontrarlo ya genera el error (Aclaro que los códigos son de 12 dígitos).
Por otra parte en el caso de regresar el cursor al combobox luego de la reproducción del video, sucede que el scanner de código de barras (es casi un emulador de teclado) luego de "LEER" e "IMPRIMIR" el código en el combobox, genera un "Enter" y arruina el código.
Si es posible que el combobox espere un "Enter" para buscar el código ingresado, se solucionarían ambas cosas.

Armar un formulario no es solamente dibujar controles y listo... tienen propiedades, eventos ... y si está bien configurado las instrucciones que te pasé hacen justamente lo que necesitas: que si no encuentra el valor en la col A limpia el combo y lo pone en foco.

Si preferís que se ejecute recién cuando se haya 'salido' del combo, podés colocar las instrucciones en el evento Exit de ese control o colocar un botón de comando (commandbutton) y pasas allí todo el código que ahora tiene el combo. Esto sería lo más recomendable para que tengas tiempo de ver y confirmar lo que seleccionaste en el combo.

Sdos!

Muchas muchas gracias nuevamente Estimada Elsa Matilde!
Cada día tengo más que claro lo que me dices de los formularios. Programando en Kotliin no me pasa eso! Todo se soluciona dentro del código.
Respecto al botón, el mismo no me serviría, ya que el lector de código de barras, "LEE" y luego "ESCRIBE" lo leído + una presión de la tecla "ENTER". De todas formas ya he solucionado ambos puntos.


Para terminar este desarrollo me gustaría darle un toque estético.
Tengo un video, a modo de presentación que me gustaría que se repita en bucle todo el tiempo, hasta que se ingrese algún código y se reproduzca el video correspondiente, luego del cual debería volver a reproducirse el video de presentación...
Al iniciar la aplicación, el video arranca automáticamente, ya que está cargado en propiedades/URL del Windowsmediaplayer
Cuando se introduce un código, se reproduce el video, se vacía el combobox y se deja el cursor en el mismo, pero no logro que vuelva a reproducirse el video de presentación.
He probado poniéndolo luego de la instrucción de reproducción del video seleccionado, para que se ejecute tras finalizar el elegido, pero haciendo esto, sólo se reproduce éste último. Gracias nuevamente!

Lamento que hayas tenido que crearte otro usuario para realizar una nueva consulta... podías haber cerrado ésta antes y nada más.

No comprendo en tu código cuál es el video que mencionas como de arranque (Al iniciar la aplicación, el video arranca automáticamente, ya que está cargado en propiedades/URL del Windowsmediaplayer=

Con respecto a tu pedido: Si es posible que el combobox espere un "Enter" para buscar el código ingresado, se solucionarían ambas cosas. ... Ya te respondí de que coloques un botón y allí las instrucciones en lugar de dejarlas en el combo:

Private Sub CommandButton1_Click()    'en lugar de ComboBox1_Change(), AJUSTAR el nombre del control
'x Elsamatilde
'si el control queda vacío no se ejecuta
      'If ComboBox1 = "" Then Exit Sub    
'podes darle el foco al combo antes del exit sub 
If ComboBox1 = "" Then Combobox1.SetFocus:Exit Sub 
'carpeta donde estarán los videos
videos = "C:\Users\LOSBOA\Desktop\Ideas y Proyectos\rockola\videos\"
'se busca el cod en col A de la hoja activa
'.... el resto de las instrucciones

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas