Saltar al contenido

Añadir licencia de uso a un archivo Excel


Antoni

Recommended Posts

Hola:

Os adjunto dos archivos:

1) LicenseGenerator:

Contiene un formulario que añade un Nº de Licencia y una Fecha de Validez a un archivo seleccionado previamente. El Nº de licencia consiste en 4 números de 4 cifras, de las cuales la cuarta cifra se obtiene a partir de un cálculo que se realiza con las otras 3. El número de tres cifras se obtiene aleatoriamente entre 101 y 999.

Cuarta cifra = [(Unidades *2) + (Decenas * 4) + (Centenas * 8)] Módulo 10

La fecha de validez consiste en una fecha a 30 días, 60, días, 90, días o indefinida.

Esta información se incrusta en la celda A1 de la hoja $$$Versión$$$, hoja que si no existe se crea y si existe se modifica.

La forma de incrustar la información es a través del objeto SmarTags. Este objeto nos permite añadir etiquetas inteligentes a un rango. Utilizamos este sistema porqué la información añadida es opaca al usuario si la etiqueta no es una de las etiquetas reconocidas por Excel. Válido solo para Excel 2007.

2) LicenseComprobator:

Contiene la macro ComprobarLicencia, que debe añadirse al evento Open del libro al que hemos añadido la licencia.

Espero haberme explicado bien, si no, no dudeis en consultar.

Saludos.

PD. No tiene ningún sentido si no se protege el proyecto VBA.

Si, si,.. ya lo se, existen métodos mas sofisticados para calcular el dígito de control, pero hoy estoy vago, a sea que el quiera lago mas bonito, ya sabe lo que hay que hacer.

16.09.2012

La forma de incrustar la información es a través del texto de una autoforma no visible.

Válido para todas las versiones de Excel.

Descargar esta versión en el post #25.

LicenseGenerator.zip

LicenseComprobator.zip

Enlace a comentario
Compartir con otras webs

excelente Macro Antonio... peronas como tú hacen que un mundo como éste cobre sentido, al mismo tiempo, nos inspira para ser diferentes, y por qué no decir ésta frase que me ha acompañado a lo largo de mi vida: SUEÑO, PIENSO, ANALIZO y EJECUTO...

saludos cordiales, y gracias por el valioso aporte...

Enlace a comentario
Compartir con otras webs

Hola MacroAntonio, he mirado tus archivos funcionan y no me da ningún error, pero como bien sabes en estos temas estoy muy pero que muy verde, por lo tanto pregunto, ¿cual sería el buen funcionamiento de ese código licencia? es decir ¿si en vez de poner en el generador el archivo que tú has puesto de prueba, pongo otro cualquiera creado por mi y al que le quiero crear esa licencia, al aceptar el código que has creado inserta en mi archivo lo necesario para que al abrirlo la próxima vez lo pida?

No sé si me explico correctamente en mi pregunta, si no la entiendes comenta he intento clarificarla.

Muy bueno tu proyecto o idea, ahora a aprender el buen funcionamiento y ponerlo en práctica en cuanto se pueda, gracias y enhorabuena por todo.

Saludos, Germán.

PD: Al final lo conseguirás.

Enlace a comentario
Compartir con otras webs

Hola:

Aclaro un poco el tema del funcionamiento.

Con el generador de licencias añadimos al libro seleccionado una hoja nueva oculta con el nombre "$$$Versión$$$".

En esa hoja en la celda A1 "incrustamos" el Nº de licencia generado y La fecha de expiración de la licencia.

Ahora al libro seleccionado debemos incorporarle el procedimiento de reconocimiento de la licencia.

Eso lo hacemos en el evento Open del objet0 Thisworkbook

Private Sub Workbook_Open()
ComprobarLicencia
End Sub
[/CODE]

Y en un [b]módulo normal[/b] añadirle la macro [b]ComprobarLicencia[/b]:

[CODE]Const strLink = "urn:schemas-microsoft-com:smarttags#StockTickerSymbol"

Sub ComprobarLicencia()
Dim Partes, Validez, Suma
On Error GoTo SinLicencia

Application.SmartTagRecognizers.Recognize = True
Partes = Split(Sheets("$$$Versión$$$").Range("A1").SmartTags.Add(strLink).Properties(1), "-")
Validez = Sheets("$$$Versión$$$").Range("A1").Range("A1").SmartTags.Add(strLink).Properties(2)
For x = 0 To UBound(Partes)
Suma = 0
For y = 1 To 3
Suma = Suma + Mid(Partes(x), 4 - y, 1) * (2 ^ y)
Next
If Suma Mod 10 <> Val(Right(Partes(x), 1)) Then GoTo SinLicencia
Next
If Date > CDate(Validez) Then GoTo SinLicencia
If CDate(Validez) - Date < 91 Then
MsgBox "Software en evaluación. Quedan " & CDate(Validez) - Date & " días para la expiración de la licencia.", _
vbInformation, "Comprobación de licencia"
End If
Exit Sub

SinLicencia:
MsgBox "La licencia del software ha expirado o es inexistente", vbCritical, "Comprobación de licencia"
Application.DisplayAlerts = False
Application.Quit
End Sub
[/CODE]

Estos códigos son los que vienen en el libro [b]LicenseComprobator[/b].

Y así con cualquier otro libro que queramos controlar su ejecución.

Ya explico en el post inicial cual es el [b]algoritmo de generación[/b] del Nº de Licencia.

El truco consiste que como la 4ª cifra de cada uno de los 4 números que componen el Nº de Licencia son resultado de un cálculo con las otras 3, no es necesario introducir el Nº de Licencia para "registrarla", ya que está "incrustada" en la celda "A1" de la hoja "$$$Versión$$$", simplemente repetimos el cálculo de la 4ª cifra de cada número y comprobamos que sean iguales, también se comprueba que esté en vigor comparando la fecha del día con la fecha de expiracíon de la licencia.

Es imposible que nadie sea capaz de generar al azar un Nº de Licencia válido (1 posibilidad entre 10.000), al margen de ser bastante experto en VBA.

Si no queda claro, dímelo y ya veremos que hacemos.

Enlace a comentario
Compartir con otras webs

Hola Antoni, no logro hacer que funcione, se genera la hoja, en la cual veo que en A1 has puesto los distintos office, y dices que ahí añada el código licencia y la fecha, pero, ¿se borra lo que hay, se añade los números seguidos, con espacios, sin espacios, la fecha también? he probado de todas formas y no lo consigo siempre me dice que la licencia ha expirado. . . ., siento mi torpeza pero necesitaría más información para ver si lo logro.

Y como sugerencia, a la hora de crearse el código licencia y fecha, en vez de en un formulario que por cierto no deja copiar el código licencia, ¿se podría generar en txt por ejemplo? y así facilitar el copiado para hacer un copiado y pegado.

Gracias por todo y saludos, Germán.

Enlace a comentario
Compartir con otras webs

Vamos a ver Germán:

Tu no tienes que tocar para nada la hoja "$$$Versión$$$".

Esta hoja esta oculta y debe permanecer siempre así.

En la celda A1 ya están el Nº de Licencia y la Fecha de Expiración, lo que sucede es que están ocultas y no las puedes ver.

El Nº de Licencia no es una contraseña, no hay que introducirlo en ningún sitio.

Lo que si hay que hacer es añadir las 2 macros del post anterior:

Una en Thisworkbook y la otra en un módulo normal.

Y ya está. No se explicarme mejor.

Leelo con atención y verás que no es tan difícil.

Sañudos.

Enlace a comentario
Compartir con otras webs

Ok, ahora con eso de decir que no hay que introducirlo está claro, por eso el tuyo funcionaba y el mío no, yo intentaba hacerlo insertando en A1 la licencia y la fecha.

Muchas gracias por todo y perdona la torpeza que puede te halla desesperado un poco, jejejejeee.

Saludos, Germán.

Enlace a comentario
Compartir con otras webs

Hola,

Para usar un archivo con "licencia de uso" expirada, seguid cualquiera de los siguientes pasos:

imagen1sv.jpg

Algunos metodos para saltarse la proteccion de licencias de Macro Antonio:

  1. Cuando sale mensaje de advertencia, Presionar CTRL+Break(Pausa), y luego finalizar
  2. Cambiando manualmente la fecha del ordenador a por ejemplo, el año 2000
  3. Desde cualquier otro archivo excel, agregar el siguiente codigo que llama al archivo deshabilitando previamente los eventos de la hoja:
    Sub pruebas()
    With Application
    .EnableEvents = False
    Workbooks.Open "D:\Escritorio\Pruebas.xls", 1
    .EnableEvents = True
    End With
    End Sub[/CODE]


  4. Sin deshabilitar eventos, usar una macro que llame al archivo. Al preguntarte si deseas guardar cambios presionas cancelar y el archivo queda abierto.
  5. Usando el LicenseDateExpansion que va en el adjunto. Funciona de la misma manera que el encriptador de Macro Antonio, de hecho, es su misma hoja modificada (Espero que no te importe amigo mio :P)

Saludos

LicenseDateExpansion.xls

Enlace a comentario
Compartir con otras webs

  • 8 months later...

parce esto es lo que estoy buscando para mi programa en excel vba, ya añadi la macro comprobar licencia al thisworkbook mi archivo de excel, pero no se que mas sigueee... serias tan amable de explicarme el siguiente paso...es de gran importancia..muchas gracias

Enlace a comentario
Compartir con otras webs

Don macro Antonio, que capacidad tan grande de programarrrr... y lo mejor es que la pone al servicio de los que por algun motivo no somos tan buenoss...he estado tratando de introducir este codigo a un archivo pero al abrir el archivo me sale un menaje que dice la licencia del software ha expirado o es inexistente... volvi a generar un nuevo código y me sigue apareciendo lo mismo... usted que conoce su programacion.. podria ayudarme a encontrar que error estoy cometiendo???...

Enlace a comentario
Compartir con otras webs

  • 1 month later...
  • 3 months later...

el licencegenerator no me crea la hoja "$$$Versión$$$", sin embargo yo la creo manualmente y le pongo el numero de la licancia y siempre me dice que la licencia expiró.

me falla en estas líneas:

Partes = Split(Sheets("$$$Versión$$$").Range("A1").SmartTags.Add(strLink).Properties(1), "-")

Validez = Sheets("$$$Versión$$$").Range("A1").Range("A1").SmartTags.Add(strLink).Properties(2)

conoces más sitios de donde se puedan descargar generadores de licencias para archivos de excel pero que tengan vigencia de 15 días?

me puedes ayudar a solucionar esto?

de antemano gracias!!!

Cordial saludo

Enlace a comentario
Compartir con otras webs

  • 2 weeks later...
  • 2 weeks later...

Hola Macro Antonio intente utlizar tus archivos desde Excel 2010 y siempre me devuelve licencia expirada

estuve probando el codigo y esta linea me devuelve vacio

Partes = Split(Sheets("$$$Versión$$$").Range("A1").SmartTags.Add(strLink).Properties(1), "-")

asi que salta a sin licencia busque en google sobre los smart tags y me encontre con esta desagradable sorpresa

Obtiene un objeto SmartTags que representa el identificador del control NamedRange. Este tipo o miembro está diseñado para usarse exclusivamente en proyectos de 2007 Microsoft Office system. Las etiquetas inteligentes están desusadas en Office 2010.

asi que supongo es la causa del error dime a ti te ha pasado esto tienes el codigo funcional en excel 2010 me gustaria usarlo

Enlace a comentario
Compartir con otras webs

Hola Macro Antonio intente utlizar tus archivos desde Excel 2010 y siempre me devuelve licencia expirada

estuve probando el codigo y esta linea me devuelve vacio

Partes = Split(Sheets("$$$Versión$$$").Range("A1").SmartTags.Add(strLink).Properties(1), "-")

asi que salta a sin licencia busque en google sobre los smart tags y me encontre con esta desagradable sorpresa

Obtiene un objeto SmartTags que representa el identificador del control NamedRange. Este tipo o miembro está diseñado para usarse exclusivamente en proyectos de 2007 Microsoft Office system. Las etiquetas inteligentes están desusadas en Office 2010.

asi que supongo es la causa del error dime a ti te ha pasado esto tienes el codigo funcional en excel 2010 me gustaria usarlo

Lo pruebo y os comento.

Enlace a comentario
Compartir con otras webs

Hola a todos:

Pues efectivamente solo funciona con Excel2007.

Os adjunto otras macros válidas para cualquier versión de Excel.

El funcionamiento es idéntico a la versión anterior.

Nueva funcionalidad:

Al comprobar la licencia se comprueba que no haya cambiado el nombre del archivo.

Así evitamos copias del archivo.

Saludos

Licencias.rar

Licencias.rar

Enlace a comentario
Compartir con otras webs

Archivado

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

  • 96 ¿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
      177
    • Comentarios
      90
    • Revisiones
      27

  • Crear macros Excel

  • Mensajes

    • buenas noches, quisiera saber si puedo mejorar mi macros que se encuentra en el evento change de la hoja de calculo de Excel, son códigos de cálculos básicos, además si me pudieran ayudar a reducir el código o darme algún tip para reducirlo yo mismo estaría muy agradecido.  de ante mano muchas gracias     Private Sub Worksheet_Change(ByVal Target As Range)     Application.ScreenUpdating = False     Application.Calculation = xlManual     Application.EnableEvents = False              If Not Intersect(Target, Range("$L$5:$Y$9")) Is Nothing Then             Sub todo()          Range("E22") = WorksheetFunction.Sum(Range("E4:E21"))     Range("E23") = WorksheetFunction.Sum(Range("E4:E19"))     Range("E24") = WorksheetFunction.Sum(Range("E23") - WorksheetFunction.Sum(Range("I4:I7")))     Range("i22") = WorksheetFunction.Sum(Range("I4:I21"))     Range("I4") = Range("E23") * 0.1     Range("I6") = Range("E23") * 0.0127     Range("I5") = Range("EN10") * Range("EN11")     Range("I7") = Range("E23") * 0.006     Range("I25") = Range("E22") - Range("I22")     Range("I12") = Range("E24") * 0.03     Range("C7") = WorksheetFunction.Sum(Range("EQ8") - (Range("EQ9"))) + Range("EN13") + Range("EN14") + Range("EN15") + Range("EN16")     'Range("E7") = WorksheetFunction.Sum(Range("C7") * ((Range("E4") * 0.0077777)))     Range("C9") = Range("EQ9") + Range("EN17") + Range("EN18") + Range("EN19")     'Range("E9") = WorksheetFunction.Sum(((((Range("E4") / Range("C4")) * 7) / 45) * 1.3) * 1.5) * Range("C9")     'Range("E8") = WorksheetFunction.Sum(((((Range("E4") / Range("C4")) * 7) / 45) * 0.3)) * (Range("C8"))     Range("E9") = WorksheetFunction.Sum(((((Range("E4") / Range("C4")) * 7) / 44) * 1.3) * 1.5) * Range("C9")     Range("E8") = WorksheetFunction.Sum(((((Range("E4") / Range("C4")) * 7) / 44) * 0.3)) * (Range("C8"))     Range("E7") = WorksheetFunction.Sum((((Range("E4") / Range("C4")) * 7) / 44) * 1.5) * Range("C7")          End Sub              End If                  Application.Calculation = xlAutomatic     Application.ScreenUpdating = True     Application.EnableEvents = True     End Sub
    • Buenas perdonad la espera adjunto el fichero Excel y explico mas detallado lo que me solicitan: Lo que me solicitan es que esos CP de la pestaña Casos de prueba los cuales tienen formulas para que cuando se copien y peguen junto a sus pasos el CP se va autoincrementando a 1,2,3 etc...., pero si copias ese CP bien solo con el primer paso o con todos sus  pasos y lo insertas entre dos CP no continua con la numeración, como se ve en la foto al hacer eso el CP insertado continua con la numeración CP2 y el de abajo pone también CP2 no se incrementa ni ese ni el valor de CU que hay a la derecha que también es incremental. Necesitaría que continuara con esa numeración aun insertándolo entre medio de 2 tanto el CP como el CU de la derecha. También me solicitan que el campo Ciclo 1 de la pestaña Resumen es auto incremental cuando copias y pegas va sumando 1, pero en las formulas referentes a Ok KO Y bloqueo al copiar y pegar se mantiene la misma formula , la idea es que cuando copies y pegues la fila donde están los ciclos se autoincremente Ciclo a 1,2,3,4 etc... y la formula de los campos OK,KO y Bloqueos se incremente también pasando de la columna I a la J  luego a la k etc... y que en Resultados Ciclo el numero de la formula también se incremente Resultados Ciclo 1 , 2 ,3 etc... que cambie la columna a la vez que el numero de Resultados Ciclo. Gracias por adelantado un saludo. Plantilla v3 Pruebas.xlsx  
    • Saludos amigos espero estén bien Estoy intentando hacer un formulario que me convierta unidades de masa sin embargo  en el mejor de los casos solo he podido lograr la conversión de una unidad a la vez en los TextBox 1, 3, 5, 7, 9, 11 y 13 y cuando lo logro el resultado que se copia  en la celda no se corresponde con el obtenido originalmente en el Textbox del Formulario (frmconv)  ejemplo al convertir 1900 Kg a Lb el resultado en el TextBox1 =4188,78298142 sin embargo al guardar el resultado lo que se copia en la Celda  "F11" es  418.878.298.142,00, adicionalmente el resultado de la conversión no se visualiza inmediatamente por lo que debo de hacer click en los TextBox 1, 3, 5, 7, 9, 11 y 13  para ver el resultado. Mucho les sabre agradecer la ayuda que me puedan brindar. PRUEBA.xlsm
    • Saludos a ambos. Copiar y pegar por sí solas, no tengo el conocimiento de que sirvan como "evento" para actualizar las referencias que buscas hacer, en la forma que lo quieres hacer, ó la fórmula como la quieres hacer. Te recomiendo abrir un tema similar en Macros, es posible que algún Maestro te de alguna idea. Por otro lado, si debe ser con funciones, entonces tendías que interactuar con COLUMNA() y FILA() para que al pegar el destino "sepa" donde está ubicado e intentar cambiar la referencia. =INDIRECTO(CARACTER(COLUMNA()+64)&FILA()) Algo como eso se podría usar para obtener el código ASCII de la letra de la columna (donde 65 es el código para “A”), y FILA() devuelve el número de la fila. La función CARACTER() convierte el código ASCII en una letra. Luego, INDIRECTO() toma la cadena resultante (por ejemplo, “A1”, “B2”, etc.) y la usa como una referencia de celda. En ese caso, una posible idea de editar tu ejemplo sería: =SI(INDIRECTO("'Casos de Prueba'!"&CARACTER(COLUMNA()+64)&"1")="Resultados Ciclo 1"; SI(CONTAR.SI(INDIRECTO("'Casos de Prueba'!"&CARACTER(COLUMNA()+64)&":"&CARACTER(COLUMNA()+64)); "OK")=0; 0; CONTAR.SI(INDIRECTO("'Casos de Prueba'!"&CARACTER(COLUMNA()+64)&":"&CARACTER(COLUMNA()+64)); "OK")); 0)   Enfatizo que es una idea, es muy probable que haya que editar. Así como esta su tema, la recomendación del maestro toma relevancia porque especular o deducir no es lo adecuado para intentar ayudar en este tipo de consultas. Por esta causa de mi parte por ejemplo no puedo aportar algo adicional.
    • En el ejemplo te he puesto 1 segundo para no hacer largo el gif, cámbialo a tu necesidad
  • 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.