¿Qué es la Realidad aumentada?

Share this Post Share to Facebook Share to Twitter Email This Pin This
Hola espero que estén bien, en estos días tomé un curso gratuito de Google Activate de Desarrollo de aplicaciones móviles, el curso es nivel básico pero es muy bueno el contenido dura 40 hrs es gratuito y te dan un certificado si pasas los exámenes de cada modulo y un examen final, no hay que programar nada, pero te enseñan muchos conceptos y como se deben desarrollar aplicaciones móviles y que debes tener en cuenta. 
En el curso hay un  módulo que es acerca de realidad aumentada.
Después de ver ese tema, entendí el concepto porque explican que la realidad aumentada es poder tener más información de la que tenemos con nuestros 5 sentidos, por medio de imágenes con información, coordenadas de localización, vínculos a páginas WEB por medio de dispositivos móviles con cámara, GPS, giroscopio, acelero metro o lentes de realidad virtual. 

Les comparto el vídeo de la Universidad Complutense de Madrid

Dentro de ese tema en el curso platicaba acerca de las herramientas para poder incorporar realidad aumentada y mencionan una que es gratuita que es ArtoolWorks 
  • En el apartado de productos nos brinda una versión para desarrollos en computadora como videojuegos, simulaciones medicas
  • Tiene las opciones para dispositivos Mobiles para IOS y Android.
  • Un Open Sofware que es una plataforma para desarrollar software.

Existen otras herramientas por ejemplo en Photoshop de Areo


Hay varios ejemplos de uso de esta tecnología por ejemplo en CDMX existe una exposición de realidad aumentada
La tienda de IKEA

Xataka movil tiene una lista de las mejores APP's para utilizar realidad aumentada

Un ejemplo en la industria automotriz en específico BMW lo utiliza para crear prototipos. 



Es una tecnología en la que debamos comenzar a impulsar, sobretodo en tiempos donde mantener la distancia, no tocar las cosas es necesario por la contingencia del COVID-19.

¿Las interfaces de las páginas WEB y APP son amigables para todos?

Share this Post Share to Facebook Share to Twitter Email This Pin This

 Hace unos semanas después de escuchar varias historias de familiares, amigos y conocidos acerca de como ha sido su experiencia con las páginas WEB y con las APP en sus celulares, muchas personas les ha pasado de todo por ejemplo: 

  • No saber como poder conectarse a una llamada
  • Como poder hacer un pedido
  • Como instalar algo en su celular
  • Como compartir pantalla. 
  • No poder hacer un tramite de gobierno
  • Perder dinero por paginas fraudulentas
También hay el otro lado donde se les ha facilitado sus tareas diarias como poder: 
  • Compras por Internet sin salir de casa 
  • Trabajar desde casa
  • Comprar medicina
  • Ver amigos que no visitaban antes
  • Hay quienes si han podido hacer tramites de gobierno en linea 

Por lo que me pareció un tema muy interesante de analizar si tenía algo que ver con el tema de edades, para lo que necesitaba recopilar datos, por lo que cree una encuesta en Google Formularios  si quieren ver cuales fueron las preguntas de la encuesta la liga es https://forms.gle/6J4SSm3MkmhSTzNr fueron 10 preguntas divididas de la siguiente forma:



  • 6 Preguntas que divide por los sectores principales de uso de las Páginas WEB y APP preguntando si les habían sido fáciles de utilizar y coloque 3 respuestas: SI, NO y No las he utilizado
  • 2 Preguntas abiertas para saber cual era la mejor y la pero Aplicación o Pagina WEB que habían utilizado
  • El rango de edad al que pertenecían

Resultados de la Encuesta de Facilidad de uso de Interfaces

Les muestro los datos recopilados, 92 personas contestaron la encuesta y les comparto los siguientes datos a observar :

  • Las que consideraron como difíciles de utilizar o con malas experiencias de uso
  • También les comparto unas gráficas generales, si quieren que les comparta el análisis completo con gráficas por rango de edades pueden suscribirse al blog y se los haremos llegar, o dejar un comentario en esta publicación con su correo, o hacer un comentario en la publicación de Facebook.




Creo que estos datos hablan de como si mejoramos en cualquier sector la  usabilidad de las aplicaciones tendremos crecimiento y de lo contrario, si no se desarrollan alternativas tecnológicas o comercio electrónico nos quedamos atrás y comienzan las perdidas en venta o ganancias.

También desde el enfoque de desarrolladores de software podemos ver que si hay en General un sector amplio de usuarios que dicen que si son fáciles de utilizar las aplicaciones o páginas WEB, pero aun podemos  mejorar nuestra Usabilidad en nuestros proyectos para que en todos los sectores sea de un 90% de facilidad de uso. 

Por ejemplo https://www.institutointernet.com/ nos dice que hay que cumplir con características de una buena interfaz, nos sirve de guía de que debemos de cumplir para que nuestros desarrollos sean intuitivos (fáciles de utilizar):

  • Simpleza
  • Claridad
  • Coherencia
  • Familiaridad
  • Rapidez

Apple por ejemplo tiene definido un estándar para desarrollar sus aplicaciones https://developer.apple.com/design/human-interface-guidelines/ que le ha funcionado con un sector que le sigue siendo fiel. 

Mi propuesta sería cuando hagamos pruebas probar la aplicación con un sector variado de usuarios y de diferentes rangos, quizá el usuario más joven y el más veterano, el usuario que menos utiliza las computadoras y él que más dentro del entorno de nuestros desarrollos, ya sea en una empresa, institución, o un negocio propio con mayor razón probarlo antes de lanzarlo. Podemos hacer después uso de Inteligencia Artificial para generar clasificaciones de usuarios y en base a cada clasificación presentar la interfaz que más se adecue a cada uno, puede ser por ejemplo el tamaño de letra más grandes o palabras diferentes. Por ejemplo tome los datos de la encuesta y realice una clasificación en base a: 

  • Si un usuario contesto que le es fácil utilizar todas las categorías lo marque como Experto o que tuviera un solo NO es fácil o la he utilizado
  • Si tuvo máximo 3 No la he utilizado o 2 No me es fácil lo catalogue como medio
  • Si tenía mas de 3 No en fácil de utilizar lo marque como básico
En base a los resultados de clasificación así quedaron divididos, podría decirse que 50% de usuarios aun pueden mejorar su experiencia de usabilidad.


Aunque también por ejemplo en mi caso que es Progress 4gl mi lenguaje en el que programo diario, en cuanto a Interfaz casi no mucho que se pueda mejorar, pero debo pensar quizá en el tiempo de ejecución de mis programas y la presentación de los datos de salida, que sean fáciles de trabajar para los usuarios, aunque en la interfaz no hay mucho que pueda mejorar porque es muy estática, pero quizá adaptando los reportes para que sean en el formato que puedan leer o interpretar de manera más fácil y si hacer más pruebas con diferentes usuarios o mejorar los manuales de usuario o hacer capacitaciones, esa sería una forma de contribuir.  

Se que en el sector Gobierno no es tan fácil modificar los procesos que hay, a nivel nacional en lo personal las páginas de Gobierno como para imprimir tu CURP o Infonavit, se me hacen muy buenos portales, fáciles de navegar. Creo que donde más falta mejorar las aplicaciones es nivel municipios, porque he visto gobiernos en los que si se puede hacer pagos por Internet por ejemplo de agua y basura y al siguiente Presidente Municipal dejan de hacerlo, creo que lo que ya se hace bien, funciona o ya se inicio de manera virtual, hay que mejorarlo NO quitarlo. 

Somos una comunidad muy diferente y variada, necesitamos como apoyarnos entre todos y necesitamos acercarnos al mundo de la tecnología, si no eres desarrollador me vas a decir y yo que hago para ayudar, te contestaría puedes ser de las personas que le ayude al papas , al amigo, al vecino que no sabe como utilizar las páginas WEB o descargar una APP, o se de las personas en tu trabajo que ayuden a probar y mejorar las aplicaciones o software que tienen, o se el que deja comentarios en las encuestas de aplicaciones para mejorarlas. 

Por todo lo que hemos comentado antes existe un puesto de trabajo o subarea de Desarrollo que se llama UX que quiere decir User eXperience o en español Experiencia de Usuario aunque no solo ve usabilidad , si no que el usuario se sienta super bien utilizando las aplicaciones, si quieren conocer más les comparto unas ligas para que puedan leerlo:

Si eres desarrollador, tester o te interesa el tema de interfaces les comparto algunas otras ligas donde pueden apoyarse para ver que podemos aplicar para mejorar el uso de nuestras aplicaciones.










Espero les haya gustado este blog y nos compartan y pueden seguirnos en el blog o en Facebook

Encuesta Interfases en Páginas WEB y APP durante contigencia

Share this Post Share to Facebook Share to Twitter Email This Pin This

 Hola:

Me ayudan contestando una encuesta acerca de como ha sido su experiencia en el uso de Páginas WEB y APP en esta continencia.

El objetivo es tener estos datos por poder escribir mi próxima publicación que datos obtenemos, porque he escuchado a personas que indican que han tenido muy mala experiencia utilizando alguna Pagina o APP , o que han requerido apoyo de más de una persona para utilizarlas. También he visto algunos otros casos en donde se les ha hecho fácil y les ha mejorado la forma que lo hacían antes. 

Esto con el fin de poder conocer por rango de edades quienes si han podido utilizarlas porque creo que nuestras interfaces cuando las desarrollamos creemos que son fáciles de utilizar pero es bueno tener una retroalimentación.

Otro factor que quiero obtener es saber que sector es el que esta mejor la interfaz porque creo que de ahí se puede tomar ejemplos de como desarrollar nuestras aplicaciones.

Además de presentar los datos, presentarles algunos consejos para consideremos en nuestros desarrollos y sean mas amigables. 

Gracias por su apoyo en contestarla y compartirla

Pueden hacerlo directamente aquí o desde la liga https://forms.gle/dBWKiVVNjwLWA28p6

Python como utilizarlo para hacer análisis OCR

Share this Post Share to Facebook Share to Twitter Email This Pin This
En este post les quiero platicar acerca de un concepto conocido como OCR sus siglas son Optical Character Recognition o al español Reconocimiento óptico de caracteres. La primera vez que vi este termino fue hace unos 23 años cuando tuvimos en casa un scanner, él cual tenía la opción para tratar de obtener el texto de las imágenes escaneadas el resultado obtenido al utilizar esta función era un 50% de lectura de datos a un archivo de texto, la verdad no recuerdo que marca era, pero era como la siguiente imagen  

Bueno la ventaja de tener esto es que no es necesario realizar la digitación del texto, y no solo la edición o en la actualidad trabajar con los datos en formato XML o almacenar datos en una base de datos. Es decir reconocimiento de caracteres.

Existen empresas enfocadas a recopilar información de documentos en papel, obtener los datos y almacenarlos 
  • Por ejemplo SAFEDATA











Este tipo de software que utiliza se llaman EDM que quiere decir Electronic Document Management o en Español Sistema de Gestión Documental pueden leer un poco más de estos sistemas en https://es.wikipedia.org/wiki/Software_de_gesti%C3%B3n_documental. 

Programa en Python para utilizar OCR

Como tratamos en este blog  quiero que veamos un ejemplo de como poder hacer algún programa que nos permita utilizar el tema del post y en esta ocasión vamos hacer un programa con Python y la librería tesseract https://github.com/tesseract-ocr.

Instalar Librería  tesseract en Windows

Lo primero que tenemos que hacer es instalar la librería en Python para mi caso en Windows 

Agregar leyenda
Solo como comentario esta librería normalmente se utiliza en Linux o Mac, por lo que en esta ocasión no utilizaremos el comando PIP si no un instalador que hay que descargar de https://github.com/UB-Mannheim/tesseract/wiki

Empezando con la instalación es un instalador donde nos pregunta que componentes


Después de instalarlo lo que vamos hacer es probarlo

Tengo una imagen para probar de la liga de Tesseract

Luego desde un CMD vamos a probar el comando que lea la imagen y envie la información a un archivo tesseract example_03.png out


Hice una prueba con un archivo más complejo en cuanto a tamaño de letra, cantidad de texto, la calidad de la imagen borrosa

Aun así la librería obtiene la información bastante bien. Como pueden ver en la imagen de arriba.


Una ventaja de esta librería es que también hace la traducción a otro idioma.

Instalar paquete pytesseract en python

Ahora vamos instalar la librería pytesseract en Python



Desde una consola de Windows ponemos el comando  python -m pip install pytesseract


El programa en Python 3.7


try:
    from PIL import Image
except ImportError:
    import Image
import pytesseract

# If you don't have tesseract executable in your PATH, include the following: esta linea es para poder el path donde esta instalado Tesseract y deben poner el comando
pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract'
print(pytesseract.image_to_string(Image.open('example_03.png')))


La ejecución del programa


De la imagen con los números

De la imagen con el texto


Alternativas de uso de OCR

La verdad es que con esta librería pueden hacer muchos proyectos interesantes a mi se me ocurre:

  • Leer los datos de una factura y poder crear un XML o CSV para integrar a un ERP, por ejemplo tome una factura en imagen png y me llevo los datos.
  • Probar como funciona el programa para leer datos por ejemplo de tarjetas de crédito o de acceso, yo intente con una tarjeta de circulación y no me regreso texto, pero con la función image_to_boxes si me indico que encontró texto.
  • Si una persona con problemas visuales, creo que con esta herramienta se puede desarrollar un buen proyecto, quizá utilizando Arduino, una cámara de celular.
  • En caso de ser estudiantes y quieren realizar notas o apuntes más rápido de algún texto.
  • En mi caso por ejemplo utilizo esta librería para apoyarme en escribir en otro blog https://www.lecturasbibliacatolica.com/
A ustedes ¿que ideas se les ocurre? intenten hacerlo cualquier proyecto primero empieza con una idea o un objetivo.

No olvides compartirnos y seguirnos en este blog o en Facebook.

Macro de Excel para aprobaciones y otras opciones de aprobaciones digitales

Share this Post Share to Facebook Share to Twitter Email This Pin This
Hola, en estos días que estamos viviendo cambios en nuestra forma de trabajar, ya se trabajando desde casa, entrando a la oficina de forma escalonada, utilizando tecnología que no habías utilizado antes, conferencias, correos, grabar vídeos para clases, etc.

Algunas opciones para firmar documentos de manera electrónica

  • Con un flujo en Sharepoint
  • Un formato de Infopath de Microsoft
  • Creando llaves certificadas 
  • Abode Reader
  • Crear un WorkFlow o flujo de aprobación en sus sistemas de ERP
En Adobe Reader por ejemplo pueden exportar cualquier archivo de Microsoft a PDF y asignarle la firma, seleccionando en la barra el icono de Firma, puedes colocar una imagen, tus iniciales, un texto


Viendo esto recordé una macro con la que trabaje hace algún tiempo para poder adicionar firmas electrónicas y envíar el archivo por correo a un siguiente aprobador y validando el aprobador, esto puede funcionar si hay personas fuera de la oficina y necesitas que se firmen documentos para autorizar procesos.

El formato en Excel  es como la siguiente imagen 




La macro tiene el siguiente código

Public correo1, correo2, correo3, correo4, correo5 As String
Private Sub Workbook_open()
 correo1 = "programacionparatodos@prog.com"  'Nive11
End Sub

Private Sub CommandButton2_Click() 'boton de enviar_formato
Dim fila As Integer
Dim nombre As String
CommandButton1.Enabled = False  'llenado
  CommandButton3.Enabled = True 'approve
  CommandButton4.Enabled = True 'reject
correo1 = "programacionparatodos@prog.com"  'Nive11
correo2 = "zelideth27@gmail.com"  'Nivel2
'copy format in one file
If Range("C20").Interior.Color = RGB(255, 255, 255) Then Do 'primer envio
   fila = 0
   'nombre del archivo
   nombre = "Aprobar_Venta" + Sheet5.Range("B4") + Trim(Str(Year(Date))) + Trim(Str(Month(Date))) + Trim(Str(Day(Date)))
   mio = ActiveWorkbook.Name
   Workbooks.Add
   otro = ActiveWorkbook.Name
   Workbooks(mio).Activate
   Sheets(4).Copy after:=Workbooks(otro).ActiveSheet
   Application.DisplayAlerts = False
   Workbooks(otro).Sheets(1).Delete
   ActiveWorkbook.SaveAs filename:=ThisWorkbook.Path & "\" & Replace(nombre, "/", ""), FileFormat:=xlOpenXMLWorkbookMacroEnabled
   'xlOpenXMLWorkbook
   Application.DisplayAlerts = False
   ActiveWorkbook.Close False
   nombre = ThisWorkbook.Path & "\" & Replace(nombre, "/", "") & ".xlsm"

   Call Send_File(nombre)
   CommandButton3.Enabled = False 'approve
   CommandButton4.Enabled = False 'reject
   CommandButton1.Enabled = True
End If

End Sub

Private Sub Send_File(filename As String)
 
  Dim stFileName As String
  Dim vaRecipients As Variant
  Dim noSession As Object
  Dim noDatabase As Object
  Dim noDocument As Object
  Dim noEmbedObject As Object
  Dim Body As Object
  Dim stAttachment As String
  Dim stSubject    As String
  Dim vaMsg        As String
  Dim nombre       As String
  Dim strTo        As String

 'send mail to supervidor
   'If Abs(Cells(23, 5)) >= 1 And Abs(Cells(23, 5)) <= 99 And Range("C37").Interior.Color = RGB(255, 255, 255) Then
 If Range("C37").Interior.Color = RGB(255, 255, 255) Then
      strTo = correo1
 End If
 If Abs(Cells(23, 5)) >= 100 And Abs(Cells(23, 5)) <= 499 And Range("C37").Interior.Color = RGB(51, 204, 51) Then
    strTo = correo2
 End If

 If Abs(Cells(23, 5)) >= 500 And Abs(Cells(23, 5)) <= 999 And Range("C38").Interior.Color = RGB(51, 204, 51) Then
     strTo = correo3
 End If
 
 If Abs(Cells(23, 5)) >= 1000 And Abs(Cells(23, 5)) <= 4999 And Range("C39").Interior.Color = RGB(51, 204, 51) Then
strTo = correo4
 End If
 
 If Abs(Cells(23, 5)) >= 5000 And Abs(Cells(23, 5)) <= 14999 And Range("C40").Interior.Color = RGB(51, 204, 51) Then
strTo = correo5
 End If
  
 If Abs(Cells(23, 5)) >= 15000 Then
strTo = correo6
 End If

   
  'Create the list of recipients.
  stSubject = "Authorization_cycle_acount" + Sheet5.Range("B4") + Trim(Str(Year(Date))) + Trim(Str(Month(Date))) + Trim(Str(Day(Date)))
  vaMsg = "Please review and Approve o Reject the inventory asjusment"
  'Instantiate the Lotus Notes COM's Objects.
  Set noSession = CreateObject("Notes.NotesSession")
  Set noDatabase = noSession.GETDATABASE("", "")
 
  'If Lotus Notes is not open then open the mail-part of it.
  If noDatabase.IsOpen = False Then noDatabase.OPENMAIL
 
  'Create the e-mail
  Set noDocument = noDatabase.CreateDocument
  'Example to create an attachment (optional)
  
  Set Body = noDocument.CreateRichTextItem("Body")
  Call Body.APPENDTEXT(vaMsg)
  Call Body.ADDNEWLINE(2)
  Call Body.EMBEDOBJECT(1454, "", filename, "Attachment")
 ' MsgBox filename
  noDocument.SAVEMESSAGEONSEND = True
  'Example to set return receipt (optional)
  noDocument.DeliveryReport = "B"
  'Example to set high priority (optional)
  ' MailDoc.DeliveryPriority = "H"
  Call noDocument.ReplaceItemValue("SendTo", strTo)
  Call noDocument.ReplaceItemValue("Subject", stSubject)
  Call noDocument.ReplaceItemValue("PostedDate", Now())
  Call noDocument.Send(False)
  'Add values to the created e-mail main properties.
 ' With noDocument
 '   .Form = "Memo"
 '   .SendTo = vaRecipients
 '   .Subject = stSubject
 '   .SaveMessageOnSend = True
 '   .PostedDate = Now()
 '   .Send 0, vaRecipients
 ' End With
 
  'Delete the temporarily workbook.
  'Kill stAttachment
 
  'Release objects from memory.
  Set Body = Nothing
  Set noDocument = Nothing
  Set noDatabase = Nothing
  Set noSession = Nothing

  MsgBox "The e-mail has successfully been created and distributed" + strTo, vbInformation
  
End Sub

Private Sub CommandButton3_Click()
'Aprove

 If Abs(Cells(23, 5)) >= 1 And Abs(Cells(23, 5)) <= 99 Then
    Call approve_1("C37")
 End If
 If Abs(Cells(23, 5)) >= 100 And Abs(Cells(23, 5)) <= 499 Then
    Call approve_1("C37")
    Call approve_2("C38", "C37")
 End If

 If Abs(Cells(23, 5)) >= 500 And Abs(Cells(23, 5)) <= 999 Then
     Call approve_1("C37")
     Call approve_2("C38", "C37")
     Call approve_3("C39", "C38")
 End If
 
 If Abs(Cells(23, 5)) >= 1000 And Abs(Cells(23, 5)) <= 4999 Then
      Call approve_1("C37")
     Call approve_2("C38", "C37")
     Call approve_3("C39", "C38")
     Call approve_4("C40", "C39")
 End If
 
 If Abs(Cells(23, 5)) >= 5000 And Abs(Cells(23, 5)) <= 14999 Then
 Call approve_5("C41")
 End If
  
 If Abs(Cells(23, 5)) >= 15000 Then
 Call approve_6("C42")
 End If

End Sub


Private Sub CommandButton4_Click()
'Reject

 If Abs(Cells(23, 5)) >= 1 And Abs(Cells(23, 5)) <= 99 Then
    Call reject_1("C37")
 End If
 If Abs(Cells(23, 5)) >= 100 And Abs(Cells(23, 5)) <= 499 Then
    Call reject_1("C37")
    Call reject_2("C38", "C37")
 End If

 If Abs(Cells(23, 5)) >= 500 And Abs(Cells(23, 5)) <= 999 Then
     Call reject_1("C37")
     Call reject_2("C38", "C37")
     Call reject_3("C39", "C38")
 End If
 
 If Abs(Cells(23, 5)) >= 1000 And Abs(Cells(23, 5)) <= 4999 Then
      Call reject_1("C37")
     Call reject_2("C38", "C37")
     Call reject_3("C39", "C38")
     Call reject_4("C40", "C39")
 End If
 
 If Abs(Cells(23, 5)) >= 5000 And Abs(Cells(23, 5)) <= 14999 Then
 Call reject_5("C41")
 End If
  
 If Abs(Cells(23, 5)) >= 15000 Then
 Call reject_6("C42")
 End If
End Sub
Private Sub approve_1(Celda As String)
  Dim noSession As Object
  Dim noDatabase As Object
  Dim MailServer As String 'this is the users mail server
  Dim MailDB As Object 'this is the users mail database
  Dim MailDBName As String
  Dim pos_mail As Integer
  Dim pos_mail2 As Integer
  Dim vc_mail As String
  Dim vc_mail2 As String
  'Instantiate the Lotus Notes COM's Objects.
  Set noSession = CreateObject("Notes.NotesSession")
  Set noDatabase = noSession.GETDATABASE("", "")
  MailServer = noSession.GetEnvironmentString("MailServer", True)
  'If Lotus Notes is not open then open the mail-part of it.
  If noDatabase.IsOpen = False Then noDatabase.OPENMAIL
  
 correo1 = "rtes@test.com" 'jefe

  MailDBName = noSession.GetEnvironmentString("KeyFileName_Owner", True)
  'MsgBox MailDBName
  pos_mail = InStr(MailDBName, "/")
  vc_mail = Mid(MailDBName, 4, pos_mail - 4)
  pos_mail2 = InStr(correo1, "@")
  vc_mail2 = Left(correo1, pos_mail2 - 1)
  vc_mail2 = Replace(vc_mail2, ".", " ")
  If LCase(vc_mail) = LCase(vc_mail2) Then
    'Approve first level
    If Not (Dir("C:\Users\Ana Zamora\Documents\sig1.jpg") > "") Then
        If Range(Celda).Value = "" Then
            ActiveSheet.Unprotect Password:="testpass"
            Range(Celda).Value = "APPROVE"
            Range(Celda).Interior.Color = RGB(51, 204, 51)
        Else
          MsgBox ("This signature has already been applied!")
        End If
    Else
       ActiveSheet.Unprotect Password:="testpass"
       Range(Celda).Select
    
    
       Dim Sh As Shape
       With Worksheets("Formato 2018")
           For Each Sh In .Shapes
              If Not Application.Intersect(Sh.TopLeftCell, .Range(Celda)) Is Nothing Then
                 MsgBox ("This signature has already been applied!")
                 ActiveSheet.Protect Password:="testpass", DrawingObjects:=True, Contents:=True, Scenarios:=True
                 ActiveWorkbook.Save
                Exit Sub
               End If
               
               
           Next Sh
        End With
        
        ActiveSheet.Pictures.Insert("C:\Users\Ana Zamora\Documents\sig1.jpg").Select
        ActiveSheet.Shapes(ActiveSheet.Shapes.Count).Select
        Range(Celda).Interior.Color = RGB(51, 204, 51)
        With Selection
          .ShapeRange.LockAspectRatio = msoFalse
          .ShapeRange.Height = ActiveCell.RowHeight
          .ShapeRange.Width = ActiveCell.Width
          .Placement = xlMoveAndSize
        End With
    
      End If
    Else
    MsgBox ("Usuario not valid to Approve")
    End If
    CommandButton4.Enabled = False
    CommandButton1.Enabled = False
    ActiveSheet.Protect Password:="testpass", DrawingObjects:=True, Contents:=True, Scenarios:=True
    ActiveWorkbook.Save
    
    Set noDatabase = Nothing
    Set noSession = Nothing
    
End Sub
Private Sub approve_2(Celda As String, Celda2 As String)
'Approve second level
  Dim noSession As Object
  Dim noDatabase As Object
  Dim MailServer As String 'this is the users mail server
  Dim MailDB As Object 'this is the users mail database
  Dim MailDBName As String
  Dim pos_mail As Integer
  Dim pos_mail2 As Integer
  Dim vc_mail As String
  Dim vc_mail2 As String

 correo2 = "ana.zamora@test.com"  

    Set noSession = CreateObject("Notes.NotesSession")
  Set noDatabase = noSession.GETDATABASE("", "")
  MailDBName = noSession.GetEnvironmentString("KeyFileName_Owner", True)
  'MsgBox MailDBName
  pos_mail = InStr(MailDBName, "/")
  vc_mail = Mid(MailDBName, 4, pos_mail - 4)
  pos_mail2 = InStr(correo2, "@")
  vc_mail2 = Left(correo2, pos_mail2 - 1)
  vc_mail2 = Replace(vc_mail2, ".", " ")
  
  If LCase(vc_mail) = LCase(vc_mail2) Then
        If Range(Celda).Value = "" Then
            ActiveSheet.Unprotect Password:="testpass"
            Range(Celda).Value = "APPROVE"
            Range(Celda).Interior.Color = RGB(51, 204, 51)
        Else
          MsgBox ("This signature has already been applied!")
        End If
    
            If Range(Celda2).Interior.Color <> RGB(51, 204, 51) Then
                 MsgBox ("Missing previous authorization!")
                 ActiveSheet.Protect Password:="testpass", DrawingObjects:=True, Contents:=True, Scenarios:=True
                 ActiveWorkbook.Save
                Exit Sub
            End If
   Else
    MsgBox ("Usuario not valid to Approve")
   End If
    CommandButton4.Enabled = False
    CommandButton1.Enabled = False
    ActiveSheet.Protect Password:="testpass", DrawingObjects:=True, Contents:=True, Scenarios:=True
    ActiveWorkbook.Save
End Sub
Private Sub approve_3(Celda As String, Celda2 As String)
  Dim noSession As Object
  Dim noDatabase As Object
  Dim MailServer As String 'this is the users mail server
  Dim MailDB As Object 'this is the users mail database
  Dim MailDBName As String
  Dim pos_mail As Integer
  Dim pos_mail2 As Integer
  Dim vc_mail As String
  Dim vc_mail2 As String
  
 correo3 = "mail3@test.com"  
  Set noSession = CreateObject("Notes.NotesSession")
  Set noDatabase = noSession.GETDATABASE("", "")
MailDBName = noSession.GetEnvironmentString("KeyFileName_Owner", True)
  'MsgBox MailDBName
  pos_mail = InStr(MailDBName, "/")
  vc_mail = Mid(MailDBName, 4, pos_mail - 4)
  pos_mail2 = InStr(correo3, "@")
  vc_mail2 = Left(correo3, pos_mail2 - 1)
  vc_mail2 = Replace(vc_mail2, ".", " ")
  
  If LCase(vc_mail) = LCase(vc_mail2) Then
      If Range(Celda).Value = "" Then
            ActiveSheet.Unprotect Password:="testpass"
            Range(Celda).Value = "APPROVE"
            Range(Celda).Interior.Color = RGB(51, 204, 51)
        Else
          MsgBox ("This signature has already been applied!")
        End If
    
            If Range(Celda2).Interior.Color <> RGB(51, 204, 51) Then
                 MsgBox ("Missing previous authorization!")
                 ActiveSheet.Protect Password:="testpass", DrawingObjects:=True, Contents:=True, Scenarios:=True
                 ActiveWorkbook.Save
                Exit Sub
            End If
   Else
    MsgBox ("Usuario not valid to Approve")
   End If
   
    CommandButton4.Enabled = False
    CommandButton1.Enabled = False
    ActiveSheet.Protect Password:="testpass", DrawingObjects:=True, Contents:=True, Scenarios:=True
    ActiveWorkbook.Save
End Sub

Private Sub approve_4(Celda As String, Celda2 As String)
  Dim noSession As Object
  Dim noDatabase As Object
  Dim MailServer As String 'this is the users mail server
  Dim MailDB As Object 'this is the users mail database
  Dim MailDBName As String
  Dim pos_mail As Integer
  Dim pos_mail2 As Integer
  Dim vc_mail As String
  Dim vc_mail2 As String
 correo4 = "mail4@test.com"  
   Set noSession = CreateObject("Notes.NotesSession")
  Set noDatabase = noSession.GETDATABASE("", "")
 MailDBName = noSession.GetEnvironmentString("KeyFileName_Owner", True)
  'MsgBox MailDBName
  pos_mail = InStr(MailDBName, "/")
  vc_mail = Mid(MailDBName, 4, pos_mail - 4)
  pos_mail2 = InStr(correo4, "@")
  vc_mail2 = Left(correo4, pos_mail2 - 1)
  vc_mail2 = Replace(vc_mail2, ".", " ")
 
 If LCase(vc_mail) = LCase(vc_mail2) Then
                  If Range(Celda).Value = "" Then
            ActiveSheet.Unprotect Password:="testpass"
            Range(Celda).Value = "APPROVE"
            Range(Celda).Interior.Color = RGB(51, 204, 51)
        Else
          MsgBox ("This signature has already been applied!")
        End If
    
            If Range(Celda2).Interior.Color <> RGB(51, 204, 51) Then
                 MsgBox ("Missing previous authorization!")
                 ActiveSheet.Protect Password:="testpass", DrawingObjects:=True, Contents:=True, Scenarios:=True
                 ActiveWorkbook.Save
                Exit Sub
            End If
   Else
    MsgBox ("Usuario not valid to Approve")
   End If
    CommandButton4.Enabled = False
    CommandButton1.Enabled = False
    ActiveSheet.Protect Password:="testpass", DrawingObjects:=True, Contents:=True, Scenarios:=True
    ActiveWorkbook.Save
End Sub

Private Sub approve_5(Celda As String)
  Dim noSession As Object
  Dim noDatabase As Object
  Dim MailServer As String 'this is the users mail server
  Dim MailDB As Object 'this is the users mail database
  Dim MailDBName As String
  Dim pos_mail As Integer
  Dim pos_mail2 As Integer
  Dim vc_mail As String
  Dim vc_mail2 As String
correo5 = "mail5@test.com" 
  Set noSession = CreateObject("Notes.NotesSession")
  Set noDatabase = noSession.GETDATABASE("", "")
 MailDBName = noSession.GetEnvironmentString("KeyFileName_Owner", True)
  'MsgBox MailDBName
  pos_mail = InStr(MailDBName, "/")
  vc_mail = Mid(MailDBName, 4, pos_mail - 4)
  pos_mail2 = InStr(correo5, "@")
  vc_mail2 = Left(correo5, pos_mail2 - 1)
  vc_mail2 = Replace(vc_mail2, ".", " ")
 
 If LCase(vc_mail) = LCase(vc_mail2) Then
        If Range(Celda).Value = "" Then
            ActiveSheet.Unprotect Password:="testpass"
            Range(Celda).Value = "APPROVE"
            Range(Celda).Interior.Color = RGB(51, 204, 51)
        Else
          MsgBox ("This signature has already been applied!")
        End If
    
            If Range(Celda2).Interior.Color <> RGB(51, 204, 51) Then
                 MsgBox ("Missing previous authorization!")
                 ActiveSheet.Protect Password:="testpass", DrawingObjects:=True, Contents:=True, Scenarios:=True
                 ActiveWorkbook.Save
                Exit Sub
            End If
   Else
    MsgBox ("Usuario not valid to Approve")
   End If
    CommandButton4.Enabled = False
    CommandButton1.Enabled = False
    ActiveSheet.Protect Password:="testpass", DrawingObjects:=True, Contents:=True, Scenarios:=True
    ActiveWorkbook.Save
End Sub

Private Sub approve_6(Celda As String)
  Dim noSession As Object
  Dim noDatabase As Object
  Dim MailServer As String 'this is the users mail server
  Dim MailDB As Object 'this is the users mail database
  Dim MailDBName As String
  Dim pos_mail As Integer
  Dim pos_mail2 As Integer
  Dim vc_mail As String
  Dim vc_mail2 As String
  Set noSession = CreateObject("Notes.NotesSession")
  Set noDatabase = noSession.GETDATABASE("", "")
 MailDBName = noSession.GetEnvironmentString("KeyFileName_Owner", True)
  'MsgBox MailDBName
  pos_mail = InStr(MailDBName, "/")
  vc_mail = Mid(MailDBName, 4, pos_mail - 4)
  pos_mail2 = InStr(correo5, "@")
  vc_mail2 = Left(correo5, pos_mail2 - 1)
  vc_mail2 = Replace(vc_mail2, ".", " ")
 
 If LCase(vc_mail) = LCase(vc_mail2) Then
           If Range(Celda).Value = "" Then
            ActiveSheet.Unprotect Password:="testpass"
            Range(Celda).Value = "APPROVE"
            Range(Celda).Interior.Color = RGB(51, 204, 51)
        Else
          MsgBox ("This signature has already been applied!")
        End If
    
            If Range(Celda2).Interior.Color <> RGB(51, 204, 51) Then
                 MsgBox ("Missing previous authorization!")
                 ActiveSheet.Protect Password:="testpass", DrawingObjects:=True, Contents:=True, Scenarios:=True
                 ActiveWorkbook.Save
                Exit Sub
            End If
   Else
    MsgBox ("Usuario not valid to Approve")
   End If
    CommandButton4.Enabled = False
    CommandButton1.Enabled = False
    ActiveSheet.Protect Password:="testpass", DrawingObjects:=True, Contents:=True, Scenarios:=True
    ActiveWorkbook.Save
End Sub

Private Sub reject_1(Celda As String)
  Dim noSession As Object
  Dim noDatabase As Object
  Dim MailServer As String 'this is the users mail server
  Dim MailDB As Object 'this is the users mail database
  Dim MailDBName As String
  Dim pos_mail As Integer
  Dim pos_mail2 As Integer
  Dim vc_mail As String
  Dim vc_mail2 As String
  'Instantiate the Lotus Notes COM's Objects.
  Set noSession = CreateObject("Notes.NotesSession")
  Set noDatabase = noSession.GETDATABASE("", "")
  MailServer = noSession.GetEnvironmentString("MailServer", True)
  'If Lotus Notes is not open then open the mail-part of it.
  If noDatabase.IsOpen = False Then noDatabase.OPENMAIL
  
 correo1 = "correo1@test.com"  'supervisor

  MailDBName = noSession.GetEnvironmentString("KeyFileName_Owner", True)
  'MsgBox MailDBName
  pos_mail = InStr(MailDBName, "/")
  vc_mail = Mid(MailDBName, 4, pos_mail - 4)
  pos_mail2 = InStr(correo1, "@")
  vc_mail2 = Left(correo1, pos_mail2 - 1)
  vc_mail2 = Replace(vc_mail2, ".", " ")
  If LCase(vc_mail) = LCase(vc_mail2) Then
    'reject first level
    If Not (Dir("C:\Users\Ana Zamora\Documents\sig1.jpg") > "") Then
        If Range(Celda).Value = "" Then
            ActiveSheet.Unprotect Password:="testpass"
            Range(Celda).Value = "Reject"
            Range(Celda).Interior.Color = RGB(255, 0, 0)
        Else
          MsgBox ("This signature has already been applied!")
        End If
    Else
       ActiveSheet.Unprotect Password:="testpass"
       Range(Celda).Select
    
    
       Dim Sh As Shape
       With Worksheets("Formato 2018")
           For Each Sh In .Shapes
              If Not Application.Intersect(Sh.TopLeftCell, .Range(Celda)) Is Nothing Then
                 MsgBox ("This signature has already been applied!")
                 ActiveSheet.Protect Password:="testpass", DrawingObjects:=True, Contents:=True, Scenarios:=True
                 ActiveWorkbook.Save
                Exit Sub
               End If
               
               
           Next Sh
        End With
        
        ActiveSheet.Pictures.Insert("C:\Users\Ana Zamora\Documents\sig1.jpg").Select
        ActiveSheet.Shapes(ActiveSheet.Shapes.Count).Select
        Range(Celda).Interior.Color = RGB(255, 0, 0)
        With Selection
          .ShapeRange.LockAspectRatio = msoFalse
          .ShapeRange.Height = ActiveCell.RowHeight
          .ShapeRange.Width = ActiveCell.Width
          .Placement = xlMoveAndSize
        End With
    
      End If
    Else
    MsgBox ("Usuario not valid to reject")
    End If
    CommandButton4.Enabled = False
    CommandButton1.Enabled = False
    ActiveSheet.Protect Password:="testpass", DrawingObjects:=True, Contents:=True, Scenarios:=True
    ActiveWorkbook.Save
    
    Set noDatabase = Nothing
    Set noSession = Nothing
    
End Sub
Private Sub reject_2(Celda As String, Celda2 As String)
'reject second level
  Dim noSession As Object
  Dim noDatabase As Object
  Dim MailServer As String 'this is the users mail server
  Dim MailDB As Object 'this is the users mail database
  Dim MailDBName As String
  Dim pos_mail As Integer
  Dim pos_mail2 As Integer
  Dim vc_mail As String
  Dim vc_mail2 As String

 correo2 = "ana.zamora@test.com"  

    Set noSession = CreateObject("Notes.NotesSession")
  Set noDatabase = noSession.GETDATABASE("", "")
  MailDBName = noSession.GetEnvironmentString("KeyFileName_Owner", True)
  'MsgBox MailDBName
  pos_mail = InStr(MailDBName, "/")
  vc_mail = Mid(MailDBName, 4, pos_mail - 4)
  pos_mail2 = InStr(correo2, "@")
  vc_mail2 = Left(correo2, pos_mail2 - 1)
  vc_mail2 = Replace(vc_mail2, ".", " ")
  
  If LCase(vc_mail) = LCase(vc_mail2) Then
        If Range(Celda).Value = "" Then
            ActiveSheet.Unprotect Password:="testpass"
            Range(Celda).Value = "Reject"
            Range(Celda).Interior.Color = RGB(255, 0, 0)
        Else
          MsgBox ("This signature has already been applied!")
        End If
    
            If Range(Celda2).Interior.Color <> RGB(51, 204, 51) Then
                 MsgBox ("Missing previous authorization!")
                 ActiveSheet.Protect Password:="testpass", DrawingObjects:=True, Contents:=True, Scenarios:=True
                 ActiveWorkbook.Save
                Exit Sub
            End If
   Else
    MsgBox ("Usuario not valid to reject")
   End If
    CommandButton4.Enabled = False
    CommandButton1.Enabled = False
    ActiveSheet.Protect Password:="testpass", DrawingObjects:=True, Contents:=True, Scenarios:=True
    ActiveWorkbook.Save
End Sub
Private Sub reject_3(Celda As String, Celda2 As String)
  Dim noSession As Object
  Dim noDatabase As Object
  Dim MailServer As String 'this is the users mail server
  Dim MailDB As Object 'this is the users mail database
  Dim MailDBName As String
  Dim pos_mail As Integer
  Dim pos_mail2 As Integer
  Dim vc_mail As String
  Dim vc_mail2 As String
  
 correo3 = "correo2@test.com"  
  Set noSession = CreateObject("Notes.NotesSession")
  Set noDatabase = noSession.GETDATABASE("", "")
MailDBName = noSession.GetEnvironmentString("KeyFileName_Owner", True)
  'MsgBox MailDBName
  pos_mail = InStr(MailDBName, "/")
  vc_mail = Mid(MailDBName, 4, pos_mail - 4)
  pos_mail2 = InStr(correo3, "@")
  vc_mail2 = Left(correo3, pos_mail2 - 1)
  vc_mail2 = Replace(vc_mail2, ".", " ")
  
  If LCase(vc_mail) = LCase(vc_mail2) Then
      If Range(Celda).Value = "" Then
            ActiveSheet.Unprotect Password:="testpass"
            Range(Celda).Value = "reject"
            Range(Celda).Interior.Color = RGB(255, 0, 0)
        Else
          MsgBox ("This signature has already been applied!")
        End If
    
            If Range(Celda2).Interior.Color <> RGB(51, 204, 51) Then
                 MsgBox ("Missing previous authorization!")
                 ActiveSheet.Protect Password:="testpass", DrawingObjects:=True, Contents:=True, Scenarios:=True
                 ActiveWorkbook.Save
                Exit Sub
            End If
   Else
    MsgBox ("Usuario not valid to reject")
   End If
   
    CommandButton4.Enabled = False
    CommandButton1.Enabled = False
    ActiveSheet.Protect Password:="testpass", DrawingObjects:=True, Contents:=True, Scenarios:=True
    ActiveWorkbook.Save
End Sub

Private Sub reject_4(Celda As String, Celda2 As String)
  Dim noSession As Object
  Dim noDatabase As Object
  Dim MailServer As String 'this is the users mail server
  Dim MailDB As Object 'this is the users mail database
  Dim MailDBName As String
  Dim pos_mail As Integer
  Dim pos_mail2 As Integer
  Dim vc_mail As String
  Dim vc_mail2 As String
 correo4 = "mail4@ests.com"  
   Set noSession = CreateObject("Notes.NotesSession")
  Set noDatabase = noSession.GETDATABASE("", "")
 MailDBName = noSession.GetEnvironmentString("KeyFileName_Owner", True)
  'MsgBox MailDBName
  pos_mail = InStr(MailDBName, "/")
  vc_mail = Mid(MailDBName, 4, pos_mail - 4)
  pos_mail2 = InStr(correo4, "@")
  vc_mail2 = Left(correo4, pos_mail2 - 1)
  vc_mail2 = Replace(vc_mail2, ".", " ")
 
 If LCase(vc_mail) = LCase(vc_mail2) Then
                  If Range(Celda).Value = "" Then
            ActiveSheet.Unprotect Password:="testpass"
            Range(Celda).Value = "Reject"
            Range(Celda).Interior.Color = RGB(255, 0, 0)
        Else
          MsgBox ("This signature has already been applied!")
        End If
    
            If Range(Celda2).Interior.Color <> RGB(51, 204, 51) Then
                 MsgBox ("Missing previous authorization!")
                 ActiveSheet.Protect Password:="testpass", DrawingObjects:=True, Contents:=True, Scenarios:=True
                 ActiveWorkbook.Save
                Exit Sub
            End If
   Else
    MsgBox ("Usuario not valid to reject")
   End If
    CommandButton4.Enabled = False
    CommandButton1.Enabled = False
    ActiveSheet.Protect Password:="testpass", DrawingObjects:=True, Contents:=True, Scenarios:=True
    ActiveWorkbook.Save
End Sub

Private Sub reject_5(Celda As String)
  Dim noSession As Object
  Dim noDatabase As Object
  Dim MailServer As String 'this is the users mail server
  Dim MailDB As Object 'this is the users mail database
  Dim MailDBName As String
  Dim pos_mail As Integer
  Dim pos_mail2 As Integer
  Dim vc_mail As String
  Dim vc_mail2 As String
correo5 = "correo5@test.com"  
  Set noSession = CreateObject("Notes.NotesSession")
  Set noDatabase = noSession.GETDATABASE("", "")
 MailDBName = noSession.GetEnvironmentString("KeyFileName_Owner", True)
  'MsgBox MailDBName
  pos_mail = InStr(MailDBName, "/")
  vc_mail = Mid(MailDBName, 4, pos_mail - 4)
  pos_mail2 = InStr(correo5, "@")
  vc_mail2 = Left(correo5, pos_mail2 - 1)
  vc_mail2 = Replace(vc_mail2, ".", " ")
 
 If LCase(vc_mail) = LCase(vc_mail2) Then
        If Range(Celda).Value = "" Then
            ActiveSheet.Unprotect Password:="testpass"
            Range(Celda).Value = "Reject"
            Range(Celda).Interior.Color = RGB(255, 0, 0)
        Else
          MsgBox ("This signature has already been applied!")
        End If
    
            If Range(Celda2).Interior.Color <> RGB(51, 204, 51) Then
                 MsgBox ("Missing previous authorization!")
                 ActiveSheet.Protect Password:="testpass", DrawingObjects:=True, Contents:=True, Scenarios:=True
                 ActiveWorkbook.Save
                Exit Sub
            End If
   Else
    MsgBox ("Usuario not valid to reject")
   End If
    CommandButton4.Enabled = False
    CommandButton1.Enabled = False
    ActiveSheet.Protect Password:="testpass", DrawingObjects:=True, Contents:=True, Scenarios:=True
    ActiveWorkbook.Save
End Sub

Private Sub reject_6(Celda As String)
  Dim noSession As Object
  Dim noDatabase As Object
  Dim MailServer As String 'this is the users mail server
  Dim MailDB As Object 'this is the users mail database
  Dim MailDBName As String
  Dim pos_mail As Integer
  Dim pos_mail2 As Integer
  Dim vc_mail As String
  Dim vc_mail2 As String
  Set noSession = CreateObject("Notes.NotesSession")
  Set noDatabase = noSession.GETDATABASE("", "")
 MailDBName = noSession.GetEnvironmentString("KeyFileName_Owner", True)
  'MsgBox MailDBName
  pos_mail = InStr(MailDBName, "/")
  vc_mail = Mid(MailDBName, 4, pos_mail - 4)
  pos_mail2 = InStr(correo5, "@")
  vc_mail2 = Left(correo5, pos_mail2 - 1)
  vc_mail2 = Replace(vc_mail2, ".", " ")
 
 If LCase(vc_mail) = LCase(vc_mail2) Then
           If Range(Celda).Value = "" Then
            ActiveSheet.Unprotect Password:="testpass"
            Range(Celda).Value = "Reject"
            Range(Celda).Interior.Color = RGB(255, 0, 0)
        Else
          MsgBox ("This signature has already been applied!")
        End If
    
            If Range(Celda2).Interior.Color <> RGB(51, 204, 51) Then
                 MsgBox ("Missing previous authorization!")
                 ActiveSheet.Protect Password:="testpass", DrawingObjects:=True, Contents:=True, Scenarios:=True
                 ActiveWorkbook.Save
                Exit Sub
            End If
   Else
    MsgBox ("Usuario not valid to reject")
   End If
    CommandButton4.Enabled = False
    CommandButton1.Enabled = False
    ActiveSheet.Protect Password:="testpass", DrawingObjects:=True, Contents:=True, Scenarios:=True
    ActiveWorkbook.Save
End Sub


Private Sub CommandButton5_Click()

 ActiveSheet.Unprotect Password:="testpass"
Sheet5.Range("A8:C22") = ""
 Range("C37").Interior.Color = RGB(255, 255, 255)
 Range("C38").Interior.Color = RGB(255, 255, 255)
 Range("C39").Interior.Color = RGB(255, 255, 255)
 Range("C40").Interior.Color = RGB(255, 255, 255)
 Range("C41").Interior.Color = RGB(255, 255, 255)
 Range("C42").Interior.Color = RGB(255, 255, 255)
 Range("C43").Interior.Color = RGB(255, 255, 255)
 Range("E37").Interior.Color = RGB(255, 255, 255)
 Range("E38").Interior.Color = RGB(255, 255, 255)
 Range("E39").Interior.Color = RGB(255, 255, 255)
 Range("E40").Interior.Color = RGB(255, 255, 255)
 Range("E41").Interior.Color = RGB(255, 255, 255)
 Range("E42").Interior.Color = RGB(255, 255, 255)
 Range("E43").Interior.Color = RGB(255, 255, 255)
Sheet5.Range("C37:e43") = ""
 ActiveSheet.Protect Password:="testpass", DrawingObjects:=True, Contents:=True, Scenarios:=True
 ActiveWorkbook.Save
End Sub

No olvides compartirnos y seguirnos en este blog o en Facebook.