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 hacer esta formula auto incremental    =SI(INDIRECTO("'Casos de Prueba'!I1")="Resultados Ciclo 1"; SI(CONTAR.SI(INDIRECTO("'Casos de Prueba'!I:I"); "OK")=0; 0; CONTAR.SI(INDIRECTO("'Casos de Prueba'!I:I"); "OK")); 0)      para que cada vez que copiase y pegase la celda con la formula  se incrementara la letra en este caso la I pasara a J ,como el numero perteneciente a Resultados Ciclo pasando en este caso del 1 al 2.   Tengo también esta formula =CONCATENAR("CP";TEXTO(MAX((SI((ESNUMERO(HALLAR("CP";A$1:A1)))*(A$1:A1<>"");VALOR(EXTRAE(A$1:A1;3;3));0))+1);"000")&" - "&B2) quisiera que no tuviera los 3 ceros si no que fuera por ejemplo CP1 y se fuera incrementando. Gracias un saludo.
    • Con el diseño así como lo tiene en su libro, una fórmula de BUSCARV con COINCIDIR debería ser de utilidad =C5*BUSCARV($C$1,Tabla1[#Todo],COINCIDIR($D5,Tabla1[#Encabezados],0)) Es con lo que participaría en su consulta. Lo que resta es definir que hacer si no encuentra la OT porque así como esta le devolvería error en ese caso, o si tiene condiciones que haya podido omitir también le afectarían el resultado.
    • He cambiado mi macro a este: Sub repetir() Set a = Sheets(ActiveSheet.Name) uf = a.Range("C" & Rows.Count).End(xlUp).Row 'ultima fila con datos ActiveCell.Select ActiveCell.Offset(1, 0).Select   'Application.OnTime Now + TimeValue("00:00:10"), "repetir", , True End If End Sub   Lo que no se es como detenerlo al llegar a la ultima fila con datos de la columna C. Muchas gracias
    • Buenas tardes a todos. Tengo un problema que preciso de vuestra ayuda.  Tengo que controlar los gastos de la oficina que trabajo y he de repartir unos gastos a % según una OT y unos tipos de gastos. Envío un archivo adjunto. Lo que necesito es que lo que aparece en la columna en amarillo lo haga automáticamente, teniendo en cuenta los datos de la tabla a la derecha. Por ejemplo, el primer gasto tiene una cuota de 1477 euros y teniendo en cuenta que es un gasto de tipo Común y que la OT es la 12810234, le corresponde un gasto de 605,57 euros ya que según la tabla de la derecha su % a imputar es de un 41%. ¿alguien me puede ayudar con la formula? He de añadir muchas más líneas y más hojas con el resto de OT y en el futuro cambiar más datos, así que necesito automatizarlo con una formula Excel. Gracias. Control de gastos.xlsx
    • Hola buenas tardes: Por favor me pueden ayudar a realizar lo siguiente. ejecutar una macro después de un tiempo, que recorra una columna a partir de la celda activa hacia abajo. Es una lista extensa, que filtro desde la columna B. y solo me muestra las filas que me interesan. ejemplo: Si mi celda activa es la C23 ejecutar la macro y baje una celda y repite la macro después de 20 segundos y lo vuelve hacer(Simpre bajando una celda), y que este se detenga hasta la ultima fila que este visible en el filtro. Ya que puedo tener muchos datos mas.   Gracias   Prueba filtro y avance.xlsm
  • 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.