Integración de emoticonos en la pestaña de la hoja de Excel

supergilou Mensajes publicados 71 Fecha de registro   Estado Miembro Última intervención   -  
Nain_Porte_Quoi Mensajes publicados 152 Fecha de registro   Estado Miembro Última intervención   -

Hola, deseo integrar un emoticono (no de Windows, aclaro) al nombre de una hoja de Excel (candado abierto o cerrado). He revisado tutoriales, pero no he encontrado nada que permita realizar esta inserción. Aclaro que no tengo problemas para insertar un emoticono que esté en Windows, ¡pero no puedo hacerlo con otro.

11 respuestas

  1. brucine Mensajes publicados 24751 Fecha de registro   Estado Miembro Última intervención   4 154
     

    Hola,

    Un emoji es un carácter Unicode, por lo que hay que encontrar su número, y Excel fuera de 365 solo lo mostrará en blanco y negro en cualquier caso.

    Los valores hexadecimales para el candado abierto y cerrado son U+1F513 y U+1F512 respectivamente y se pueden encontrar buscando "Unicode candado".

    El emoji se renderiza con =UNICAR(HEXDEC("1F513"))

    0
  2. supergilou Mensajes publicados 71 Fecha de registro   Estado Miembro Última intervención  
     

    ¡Muchas gracias a ti; BRUCINE!!!

    Pero mi problema, como se explicó en mi pregunta, no es hacer aparecer un emoticono en una celda; sino lograr colocarlo en la pestaña de una hoja?????

    Existen numerosos tutoriales donde se ve al demostrador realizar esta acción, pero lamentablemente como esta acción no es el tema en cuestión, no hay explicación.

    He preguntado a varios, pero desafortunadamente no he recibido respuesta hasta hoy!

    Así que, el sentido de mi pregunta es lograr colocar un emoticono en la pestaña (el nombre de la hoja para mí) o enriquecer el panel de Windows, ya que la inserción desde el panel de Windows está bien.

    0
    1. brucine Mensajes publicados 24751 Fecha de registro   Estado Miembro Última intervención   4 154
       

      No funciona, de hecho, en los nombres de las hojas donde no se puede escribir ninguna fórmula ni copiar nada (porque la solución sería sencilla, en Word ya que Excel no quiere oír hablar de 1F513ALT+C y copiar-pegar).

      No parece haber otra solución que a través de macro VBA buscando el carácter por Chr o ChrW en el modo:

      Worksheets(1).Name = Chr(50)

      El problema, porque tiene que haber uno, es que la sintaxis no admite ciertos caracteres.

      Entonces, cito, hay que copiar el carácter deseado en cualquier celda de Excel y luego leer su valor en VBA y concatenar los valores:

      https://www.reddit.com/r/excel/comments/6pq1r1/vba_how_can_i_write_emojis_using_chrw/

      Pero en cuanto al procedimiento específico, eso supera mis capacidades más que limitadas en VBA.

      0
  3. danielc0 Mensajes publicados 2175 Fecha de registro   Estado Miembro Última intervención   286
     

    Hola,

    Siguiendo la idea de Brucine, he escrito en una celda:

    ="aaa"&UNICAR(HEXDEC("1F513"))&"bbb"

    Obtuve en la celda:

    Hice un copiar / pegar especial valores de la celda sobre sí misma y pegué el resultado en la pestaña:

    Gracias a Brucine.

    Daniel


    0
    1. brucine Mensajes publicados 24751 Fecha de registro   Estado Miembro Última intervención   4 154
       

      Hola,

      Se obtiene el mismo resultado sin que el emoticono esté ingresado en ninguna celda, colocándolo en el destino (aquí D4), mediante VBA:

      Range("D4").Value = ChrW(&HD83D) & ChrW(&HDD12)

      La descomposición ChrW se debe a que el Unicode buscado es más alto que el límite de 16 bits.

      Los valores de ChrW se obtienen en VBA leyendo el número de caracteres de la cadena que representa el Unicode (aquí 2) y luego aplicando AscW a cada uno de esos caracteres, no me preguntes cómo, pero tú que eres sabio...

      En cualquier caso, la misma sintaxis no funciona para ActiveSheet.Name, lo que no resuelve directamente el problema.

      0
  4. Nain_Porte_Quoi Mensajes publicados 152 Fecha de registro   Estado Miembro Última intervención   30
     

    Hola,

    partiendo de la idea de danielc0 y de la solicitud inicial, creo que el objetivo sería mostrar este candado cerrado o abierto según ??? el estado de la protección de la hoja/del libro/otro? Todo ello en VBA, seguramente.

    0
  5. supergilou Mensajes publicados 71 Fecha de registro   Estado Miembro Última intervención  
     

    ¡Muchas gracias a todos!

    Simplemente voy a ocultar las hojas; después de haberlas bloqueado.

    Creo que será lo más sencillo; porque el VBA y yo somos dos cosas que son incompatibles.

    Otra vez, gracias a ustedes

    0
  6. supergilou Mensajes publicados 71 Fecha de registro   Estado Miembro Última intervención  
     

    ¡Muchas gracias a todos!

    0
  7. danielc0 Mensajes publicados 2175 Fecha de registro   Estado Miembro Última intervención   286
     

    Hola a todos,

    Hasta donde sé, VBA no puede detectar el cambio del estado protegido a desprotegido o viceversa. Así que no es una posibilidad.

    Daniel


    0
    1. brucine Mensajes publicados 24751 Fecha de registro   Estado Miembro Última intervención   4 154
       

      Hola,

      Pasar de uno a otro sin ejecutar de nuevo la macro, sin duda no, pero detectar el estado por If ActiveSheet.ProtectContents = False (o True), ¿por qué no?

      0
      1. danielc0 Mensajes publicados 2175 Fecha de registro   Estado Miembro Última intervención   286 > brucine Mensajes publicados 24751 Fecha de registro   Estado Miembro Última intervención  
         

        Hola,

        Sí, pero ¿para qué sirve? Una macro puede cambiar el nombre de la hoja, pero si esta está protegida manualmente, no hay ningún evento que permita a VBA cambiar el nombre de la hoja. Por lo tanto, no es la solución.

        Daniel

        0
  8. supergilou Mensajes publicados 71 Fecha de registro   Estado Miembro Última intervención  
     

    ¡Entonces, para todos, solo un pequeño recordatorio! Mi solicitud original era cómo colocar un candado cerrado (????) en una pestaña de una hoja de Excel.

    Solo para informar al usuario de la hoja de cálculo que no debía intervenir en esa hoja, después de muchos visionados de tutoriales, hay personas que logran colocar un emoticono en la pestaña de una hoja de Excel ?????????????????.

    Eso es lo que deseaba realizar de manera simple; pero después de toda la información recibida de su parte, he decidido bloquear y ocultar todas las celdas de las hojas correspondientes y luego he ocultado dichas hojas; por lo tanto, si las hojas no son visibles, los errores son imposibles, y los intentos de modificaciones también se eliminan!

    (en principio??)

    ¡Eso es todo lo que buscaba hacer!; pero bueno, mi solución no es quizás tan mala, ya que las hojas no son visibles!!

    ¿No????

    ¡Nuevamente, muchas gracias a todos ustedes!

    GILLES

    0
    1. brucine Mensajes publicados 24751 Fecha de registro   Estado Miembro Última intervención   4 154
       

      Hola,

      Eureka.

      La macro siguiente da el resultado para el candado cerrado:

      Sub change()

      ActiveSheet.Name = ChrW(-10179) & ChrW(-8942)

      End Sub

      Lo mismo con -8941 para abierto.



      0
    2. Didi64_549 Mensajes publicados 2810 Fecha de registro   Estado Miembro Última intervención  
       

      Hola,

      No es fácil todo esto, pero gracias por su respuesta con su solución, así ayuda mucho a quienes están en el mismo caso que usted en el foro.

      Usted es un supergilou.

      Cordialmente.

      0
      1. brucine Mensajes publicados 24751 Fecha de registro   Estado Miembro Última intervención   4 154 > Didi64_549 Mensajes publicados 2810 Fecha de registro   Estado Miembro Última intervención  
         

        Hola,

        Para seguir luchando por poco, la cocina ilustrada en <13> resulta de que VBA no puede leer un carácter de más de 16 bits.

        El truco consiste entonces en determinar la longitud de la cadena de caracteres (2 o más), determinar el valor de cada fragmento y reensamblar.

        En el ejemplo que nos interesa (candado cerrado) me limité a copiar servilmente estos valores (-10179 y -8942), pero suponiendo que quisiéramos aplicar el procedimiento a otro Unicode de más de 16 bits, habría que recalcular.

        Se encuentran diferentes técnicas, algunas enrevesadas, las más simples aquí respectivamente en 10 y en 3.

        https://stackoverflow.com/questions/55418398/how-do-i-remove-emojis-from-an-excel-sheet-using-vba/55418901#55418901

        https://stackoverflow.com/questions/73853790/how-to-check-the-value-of-%CE%A3-character-in-an-excel-cell-vba

        El problema es que soy un verdadero desastre con VBA, no encuentro dónde y cómo escribir estos códigos para que funcionen (y que tal vez en al menos uno de los casos puedan aplicarse no a ActiveCell sino a la celda que contiene el Unicode, por ejemplo D4).

        Gracias.

        0
  9. Nain_Porte_Quoi Mensajes publicados 152 Fecha de registro   Estado Miembro Última intervención   30
     

    Hola Brucine,

    No entiendo mucho sobre Unicode y aún menos sobre cómo llegas de un valor hexadecimal a un valor decimal negativo...

    Además, según algunas pruebas e investigaciones, he encontrado que los valores negativos pueden ser reemplazados por valores positivos y dar los mismos resultados (yo no entiendo)

    ejemplo

    ChrW(-10179) puede ser reemplazado por ChrW(55357)

    Es cierto que estamos luchando por "poco", pero sigue siendo interesante entender.

    0
    1. brucine Mensajes publicados 24751 Fecha de registro   Estado Miembro Última intervención   4 154
       

      Hola,

      55357 es la diferencia entre 65536 (límite de 16 bits) y 10179, lo que explica por qué su hija es muda.

      ChrW (en realidad AscW para el propósito buscado) devolvería un valor negativo (que equivale a lo mismo) cuando el número entero fuente no está firmado.

      https://www.vbforums.com/showthread.php?797751-RESOLVED-AscW-returns-negative-value

      Pero lo que yo sigo sin entender, no importa si el valor es positivo o negativo ya que llevará al mismo resultado, es cómo obtener los valores en cuestión al partir un Unicode que es superior al límite de 16 bits y que, por tanto, contiene al menos dos cadenas sobre las que realizar estos cálculos.

      0
  10. Nain_Porte_Quoi Mensajes publicados 152 Fecha de registro   Estado Miembro Última intervención   30
     

    Re Brucine,

    gracias por la explicación de la diferencia entre lo positivo y lo negativo, aunque la frase me parece extraña "explicando por qué tu hija es muda."

    Si he entendido bien tu "incomprensión", este pequeño código simplificado debería aclararte.

    Option Explicit Sub test() Dim Car_Debut As String Dim Car_Fin As String Dim Val_Debut As Integer Dim Val_Fin As Integer Const Cell_Source As String = "D4" Car_Debut = Left(Range(Cell_Source), 1) Car_Fin = Right(Range(Cell_Source), 1) Val_Debut = AscW(Car_Debut) Val_Fin = AscW(Car_Fin) ActiveSheet.Name = ChrW(Val_Debut) & ChrW(Val_Fin) End Sub 

    Introduce tu carácter unicode en la celda D4 (puedes cambiarlo en el código) y ejecuta el procedimiento "test".

    0
    1. brucine Mensajes publicados 24751 Fecha de registro   Estado Miembro Última intervención   4 154
       

      Quise decir que importa el artefacto que conduce a valores negativos, en el caso de que existan, es probable que AscW realice la operación por sí mismo restando 65536.

      Como D4 está ocupado por uno de los candados, he puesto en D6 una rosa (1F339, ¿por qué no?) y tu script conduce efectivamente al resultado deseado sin descomponer 1F339.

      Supongo (nuevamente no entiendo nada) que tu sintaxis Option Explicit permitió la ejecución de la macro donde otras que he probado con el mismo efecto no funcionan.

      También supongo, no he intentado mostrarlas, que Car_Debut y Car_Fin realizan esa famosa descomposición?

      0
  11. Nain_Porte_Quoi Mensajes publicados 152 Fecha de registro   Estado Miembro Última intervención   30
     

    Options explicit es una instrucción que obliga a declarar las variables, nada más.

    https://learn.microsoft.com/es-es/office/vba/language/reference/user-interface-help/option-explicit-statement

    El unicode está compuesto en realidad de 2 caracteres, Car_Debut el primero y Car_Fin el segundo, luego recupero el valor de cada carácter para recomponerlo y ponerlo en el nombre de la hoja.

    Lo cual es bastante complicado ya que el nombre de la hoja ahora contiene 2 caracteres

    0