Saltar al contenido

Teclado virtual


Antoni

Recommended Posts

publicado

Hola:

Este aporte, básicamente, es solo para viciosos de Excel, ya que no tiene demasiada utilidad salvo la de analizar el código y ver como se pueden crear controles y tratarlos todos con el mismo evento.

Se trata de informar un textbox a través de un teclado virtual creado con labels.

Es capaz de evaluar expresiones aritméticas utilizando el signo igual del teclado numérico. (Ultima tecla inferior derecha)

Podeis adaptar el tamaño con la propiedad Zoom del formulario.

Saludos.

Teclado alfa.zipFetching info...

publicado

Como me considero un vicioso de Excel "por no" hacer otra cosa, entro al capote que me brinda Macro Antonio y, después de analizar sus macros, he osado trastocarlas en el teclado beta adjunto.

Ahora el teclado virtual ya no está creado con Labels sino con CommandButtons porque el interface gráfico de las teclas se parece más a botones para el común de los usuarios.

Además he añadido algunas características más:

  • El zoom del teclado se controla desde el propio teclado
  • La tecla C del teclado numérico para borrar los cálculos.
  • En la tecla 1 el símbolo | pulsando Alt Gr
  • En la tecla 4 el símbolo ~ pulsando Alt Gr
  • Cambiar ( que está 2 veces por )
  • Multilínea y barra de scroll vertical en el texto
  • Cambio del tamaño y de las Fuentes del texto (es muy aburrido ver solo letras y números Ariales)
  • Botón para venir a este foro

A mí no me escribe las vocales con diéresis: äëïöüÄËÏÖÜ

Hecho en falta algunas teclas más: Insert, Inicio, Fin, Tab, Ctrl, Alt, Win, F1-F12, Esc y Retorno de carro.

Me gustaría que se repitiera una tecla al mantenerla pulsada.

Por el momento no se me escurre nada más, ¡cuánto lo siento!

Un saludo de este forofo vicioso a tod@s que son como yo.

Teclado beta.zipFetching info...

publicado

Hola:

Con esto conseguirás que la lista de fuentes sea la de cada usuario:

Sheets("Fuentes").Unprotect
Sheets("Fuentes").Cells.ClearContents
Set FontList = Application.CommandBars("Formatting").FindControl(ID:=1728)
Fuentes.Max = FontList.ListCount
For X = 0 To FontList.ListCount - 1
Sheets("Fuentes").Cells(X + 2, 1) = FontList.List(X + 1)
Next X
Sheets("Fuentes").Cells(1, 1) = "Fuentes"
Sheets("Fuentes").Protect
[/CODE]

Y con esto, que el formulario se adapte al zoom.

[CODE]Private Sub cambiaZoom_Change()
'Zoom del teclado
Me.Zoom = cambiaZoom.Value
valZoom.Caption = "Zoom: " & cambiaZoom.Value
Me.Width = 534 * (Me.Zoom / 100) '<=======
Me.Height = 280 * (Me.Zoom / 100) '<=========

End Sub
[/CODE]

Ahora me miro lo de la tecla "ametralladora" , pero,........no se, no se......

Saludos

publicado

Wao! como siempre, tenemos que arrodillarnos ante estos dioses (Macro Antonio y pegones1), y comienzo a pensar/creer que estos dos estan aliados (espero que no me hagan represalias jeje), para atacarnos jaja

Saludos amigos y sigan asi

publicado

Hola,

Antoni, me ha gustado mucho, es muy útil el archivo para los que aun sabemos poco por no decir casi nada sobre crear controles o tratarlos con el mismo evento.

Le he añadido la ametralladora que pedíais, va en el adjunto el archivo Beta2 cogido a partir del Beta1, no porque me guste mas el Beta1, (los dos son geniales), sino por seguir la línea de mejoras.

Cada línea modificada tiene un comentario "vzs_m" en donde NO he borrado el código original, y cada línea añadida "vzs_a" para que os sea fácil ver los cambios en el documento. La "ametralladora" solo es aplicada a las teclas que devuelven un disparador, pero se puede aplicar a todas, en los comentarios se ve más claro.

=========================

Pedro, no me olvido de lo tuyo, hoy mismo te hago un bonico comentario en el blog.

Buen trabajo a los 2.

Saludos a los 3.

Teclado beta2.zipFetching info...

publicado

Hola Sr. Betis:

¡Cuanto tiempo!...

"Sinplemente, in presionante"

..............Y que estalle la tormenta cuanto antes y que el Rayo caiga lo mas rápido posible......

Gracias

PD ¿ Como va la resaca de la feria ?

  • 2 weeks later...
publicado

La gran contribución de verzulsan con teclas ametralladoras me ha inspirado para hacer una nueva variante del teclado virtual con dos pantallas colocadas arriba, para que las manos puestas en un teclado táctil no las oculten.

Macro Antonio, he añadido más teclas, como la de Windows y dos que echo en falta en todos los teclados, como tecla única: Ctrl + C y Ctrl + V

Una pantalla es de texto multilínea y la otra numérica, aunque en las dos se pueden evaluar los cálculos.

verzulsan, ya se puede repetir la ametralladora con las teclas Supr y Back.

Teclado beta3.zipFetching info...

publicado

Macro, habrás visto que he intentado limpiar el código y creo que lo he conseguido en la función CapturarTecla con un Select Case tecla que llama a la mini rutina Repetir.

Y es que los GoTo RetornoFuncion que añadió verzulsan me resultan insufribles, jejeje!!!

He modificado AñadirTexto precisamente al revés, para quitar tanto Select.

    If Agudo Or Grave Or Dieresis Or Circunflejo Then
Select Case LCase(valor)
Case "a": offsetCar = 127: incCar = 1
Case "e", "i": offsetCar = 131: incCar = 0
Case "o": offsetCar = 131: incCar = 1
Case "u": offsetCar = 132: incCar = 0
Case Else: offsetCar = 0
End Select

If offsetCar > 0 Then
If Grave Then incCar = 0
If Agudo Then incCar = 1
If Circunflejo Then incCar = 2
If Dieresis Then incCar = incCar + 3
valor = Chr(Asc(valor) + offsetCar + incCar)
End If
End If[/CODE]

Me he guiado por el lugar que ocupan las vocales acentuadas en las tablas de códigos.

publicado

Gracias Pedro:

A veces "repito" código para una mejor comprensión de la función o del procedimiento. (Incluso para mi, ya que pasado algún tiempo, me cuesta entender mis propios códigos,......jajaja)

Saludos

  • 3 years later...
  • 2 months later...
publicado

buen día rafajm

la diferencia entre 32 bits y 64 bits radica en la declaración de las librerías.

en el modulo de clase del archivo (ClsCB) en el editor de VBA (Alt+F11) vas a encontrar estas lineas

Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer  'Escucha de teclas
Private Declare Function GetTickCount Lib "kernel32" () As Long 'Tiempo en milisegundos
Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, _
ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)[/CODE]

Solo las debes cambiar para que queden así:

[CODE]Private Declare PtrSafe Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer 'Escucha de teclas
Private Declare PtrSafe Function GetTickCount Lib "kernel32" () As Long 'Tiempo en milisegundos
Private Declare PtrSafe Sub keybd_event Lib "user32" (ByVal bVk As Byte, _
ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)[/CODE]

Agregando la palabra PtrSafe y con eso ya te funciona perfectamente.

Saludos

Teclado beta3_64_bits.xlsFetching info...

  • 3 months later...
publicado
  "Macro Antonio dijo:
Hola Sr. Betis:

¡Cuanto tiempo!...

"Sinplemente, in presionante"

..............Y que estalle la tormenta cuanto antes y que el Rayo caiga lo mas rápido posible......

Gracias

PD ¿ Como va la resaca de la feria ?

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

  • 109 ¿Te parecen útiles los tips de las funciones? (ver tema completo)

    1. 1. ¿Te parecen útiles los tips de las funciones?


      • No
      • Ni me he fijado en ellos

  • Ayúdanos a mejorar la comunidad

    • Donaciones recibidas este mes: 0.00 EUR
      Objetivo: 130.00 EUR
  • Archivos

  • Estadísticas de descargas

    • Archivos
      188
    • Comentarios
      98
    • Revisiones
      29

    Más información sobre "Cambios en el Control Horario"
    Última descarga
    Por pegones1

    4    1

  • Crear macros Excel

  • Mensajes

    • Hola, veo que tienes 365, así que esta forma funcionará   Almacen.xlsx
    • Buenos días  @LeandroA espero estes bien Tengo un caso idéntico al planteado en la siguiente pregunta: Sin embargo, a diferencia de quien planteo originalmente la pregunta al correr el código no obtengo ningún resultado podrían ayudarme a resolver este inconveniente y que al hacer click en el Botón Guardar (CommandButton3) del Formulario RCS (frmrcs) el archivo pdf quede configurado con orientación vertical, márgenes superior, inferior, derecho e izquierdo = 1 y en página tamaño carta. Si acaso influye uso Microsoft Excel LTSC MSO (versión 2209 Compilación16.0.1.15629.20200) de 64 bits Mucho le sabre agradecer la ayuda que me pueda dar  RCS PRUEBA - copia.xlsm
    • @JSDJSDCon gusto mi estimado Para la opción 1: Sub Surtirhastadondealcanse() Dim ws As Worksheet Set ws = ThisWorkbook.Sheets(1) Dim filaInicio As Integer: filaInicio = 4 Dim filaFin As Integer: filaFin = 7 Dim colInventario As Integer: colInventario = 2 Dim colSolicitudesInicio As Integer: colSolicitudesInicio = 4 ' Columna C Dim colResultadoInicio As Integer: colResultadoInicio = 9 ' Columna I Dim colTotalSurtido As Integer: colTotalSurtido = 12 ' Columna L Dim colFinalInventario As Integer: colFinalInventario = 13 ' Columna M Dim numClientes As Integer: numClientes = 3 Dim fila As Integer, i As Integer For fila = filaInicio To filaFin Dim inventario As Double inventario = Val(ws.Cells(fila, colInventario).Value) Dim solicitudes(1 To 3) As Double Dim surtido(1 To 3) As Variant Dim totalSurtido As Double: totalSurtido = 0 ' Leer solicitudes For i = 1 To numClientes If IsNumeric(ws.Cells(fila, colSolicitudesInicio + i - 1).Value) Then solicitudes(i) = CDbl(ws.Cells(fila, colSolicitudesInicio + i - 1).Value) Else solicitudes(i) = 0 End If surtido(i) = "POR FALTA STOCK" Next i ' Surtir de acuerdo al inventario disponible For i = 1 To numClientes If solicitudes(i) > 0 Then If inventario >= solicitudes(i) Then surtido(i) = solicitudes(i) inventario = inventario - solicitudes(i) totalSurtido = totalSurtido + solicitudes(i) ElseIf inventario > 0 Then surtido(i) = inventario totalSurtido = totalSurtido + inventario inventario = 0 Else surtido(i) = "POR FALTA STOCK" End If End If Next i ' Escribir resultados en las columnas correspondientes para cada cliente For i = 1 To numClientes With ws.Cells(fila, colResultadoInicio + i - 1) If surtido(i) = "POR FALTA STOCK" Then .Value = surtido(i) .Font.Color = vbRed Else .Value = surtido(i) .Font.Color = vbBlack End If End With Next i ' Escribir total surtido y existencia final ws.Cells(fila, colTotalSurtido).Value = totalSurtido ws.Cells(fila, colFinalInventario).Value = inventario Next fila MsgBox "Resultado surtido cargado con éxito...", vbInformation End Sub Para la opción 2:   Sub surtirenpartesiguales() Dim ws As Worksheet Set ws = ThisWorkbook.Sheets(1) Dim filaInicio As Integer: filaInicio = 13 Dim filaFin As Integer: filaFin = 16 Dim colInventario As Integer: colInventario = 2 Dim colSolicitudesInicio As Integer: colSolicitudesInicio = 4 ' Columna C Dim colResultadoInicio As Integer: colResultadoInicio = 9 ' Columna I Dim colTotalSurtido As Integer: colTotalSurtido = 12 ' Columna L Dim colFinalInventario As Integer: colFinalInventario = 13 ' Columna M Dim numClientes As Integer: numClientes = 3 Dim fila As Integer, i As Integer For fila = filaInicio To filaFin Dim inventario As Double inventario = Val(ws.Cells(fila, colInventario).Value) Dim solicitudes(1 To 3) As Double Dim surtido(1 To 3) As Variant Dim totalSurtido As Double: totalSurtido = 0 Dim totalPedido As Double: totalPedido = 0 ' Leer solicitudes For i = 1 To numClientes If IsNumeric(ws.Cells(fila, colSolicitudesInicio + i - 1).Value) Then solicitudes(i) = CDbl(ws.Cells(fila, colSolicitudesInicio + i - 1).Value) totalPedido = totalPedido + solicitudes(i) Else solicitudes(i) = 0 End If surtido(i) = 0 Next i ' Si hay suficiente inventario, surtir lo que el cliente pide If inventario >= totalPedido Then For i = 1 To numClientes If solicitudes(i) > 0 And inventario >= solicitudes(i) Then surtido(i) = solicitudes(i) inventario = inventario - solicitudes(i) totalSurtido = totalSurtido + solicitudes(i) End If Next i Else ' Reparto base igualitario Dim baseSurtido As Long baseSurtido = Int(inventario / numClientes) For i = 1 To numClientes If solicitudes(i) > 0 Then If solicitudes(i) <= baseSurtido Then surtido(i) = solicitudes(i) inventario = inventario - solicitudes(i) totalSurtido = totalSurtido + solicitudes(i) Else surtido(i) = baseSurtido inventario = inventario - baseSurtido totalSurtido = totalSurtido + baseSurtido End If End If Next i ' Repartir sobrante restante uno por uno, respetando lo pedido Do While inventario > 0 For i = 1 To numClientes If surtido(i) < solicitudes(i) Then surtido(i) = surtido(i) + 1 totalSurtido = totalSurtido + 1 inventario = inventario - 1 If inventario = 0 Then Exit For End If Next i Loop End If ' Escribir resultados en las columnas correspondientes para cada cliente For i = 1 To numClientes With ws.Cells(fila, colResultadoInicio + i - 1) If surtido(i) = 0 Then .Value = "POR FALTA STOCK" .Font.Color = vbRed Else .Value = surtido(i) .Font.Color = vbBlack End If End With Next i ' Escribir total surtido y existencia final ws.Cells(fila, colTotalSurtido).Value = totalSurtido ws.Cells(fila, colFinalInventario).Value = inventario Next fila MsgBox "Resultado surtido cargado con éxito...", vbInformation End Sub Saludos, Diego
    • Buenos dias.  Estoy trabajando en una hoja para poder llevar un control de un pequeño almacén.  Tengo un pedido con varias líneas y "lotes" y necesito sacar las ubicaciones que coincidan con la referencia y lote que pone en el pedido. El problema viene cuando tengo la misma referencia y mismo lote en ubicaciones diferentes y necesito sacar la información en columnas diferentes. No se si  me he explicado bien, pero creo que con el ejemplo adjunto se entiende mejor. Agradecería mucho si me pudieran ayudar  Libro1.xlsx
    • Exelente solución mil gracias 
  • Visualizado recientemente

    • No hay usuarios registrado para ver esta página.
×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.