He recibido varios comentarios sobre la nota de ayer sobre el control de cambios personalizado. Entre ellos me piden dos modificaciones que encuentro muy apropiadas:
1 – que el último cambio aparezca en primer lugar en el cuadro de texto, de manera que siempre veamos los últimos cambios;
2 – que los cambios queden registrados en una hoja del cuaderno.
Ambas modificaciones son bastante sencillas y en esta nota mostraremos cómo hacerlas.
Para que el último cambio aparezca siempre en primer lugar en el cuadro de texto modificamos levemente el código de la macro "track_change"
Sub track_change()
Dim strPrevious As String
With ActiveCell
If .Comment Is Nothing Then
.AddComment Text:=Format(Now, "dd/mm/yy hh:mm") & " - " & .Value
Else
strPrevious = .Comment.Text
.Comment.Text Text:=Format(Now, "dd/mm/yy hh:mm") & " - " & .Value _
& Chr(10) & strPrevious
End If
End With
Call record_in_sheet
End Sub
Todo lo que hacemos es cambiar el orden de construcción del texto del comentario poniendo la variable "strPrevious" al final de la cadena de texto.
Para registrar los cambios en una hoja, empezamos, obviamente, por agregar la hoja al cuaderno
Como ven, hemos agregado la hoja "control" con cuatro campos (columnas): celda, fecha y hora, valor e introducido por.
El código para introducir los datos en esta hoja es el siguiente
Sub record_in_sheet()
Dim lngFirstFreeRow As Long
With Sheets("control")
lngFirstFreeRow = WorksheetFunction.CountA(.Range("A:A")) + 1
.Cells(lngFirstFreeRow, 1).Value = ActiveCell.Address
.Cells(lngFirstFreeRow, 2).Value = Format(Now, "dd/mm/yy hh:mm")
.Cells(lngFirstFreeRow, 3).Value = ActiveCell.Value
.Cells(lngFirstFreeRow, 4).Value = Environ("username")
End With
End Sub
Como ven, sencillo y sin muchas vueltas. Para activar el código hemos agregado la línea "Call record_in_sheet" en el código anterior. De esta manera, el evento de la hoja hace correr el código que crea el comentario con los cambios y este código a su vez, hace correr la macro que registra el cambio en la hoja "control".
Después de introducir y cambiar algunos valores en la lista de precios
La hoja de control los refleja de esta manera
Hola, en primer lugar decirte que soy un fan tuyo y de tu página.
ResponderBorrarHe probado esta macro en 2003 y cuando un valor en una celda no me registra el cambio, sin embargo si me registra los cambios en las celdas avinculadas mediante formulas a la primera. Es como si al realizar el cambia lanzara la macro pero para todo aquel cambio que se produce a posteriori del primer cambio.
Muchas gracias
Saludos
Hola de nuevo, estoy viendo que quizá el problema venga porque trabajamos con ActiveCell y si yo introduzco por ejemplo el cambio en C3 el evento se produce al presionar enter, y Excel me mueve a la siguiente celda (C4) entonces graba el valor que hay en C4 y no el que realmente he cambiado en C3.
ResponderBorrarGracias
Efectivamente
ResponderBorrarEstimado, agradecería si pudieras explicarme mejor el problema con "ActiveCell" y como corregir el error
ResponderBorrarEstimado Anónimo,
ResponderBorrar¿cuál es el problema o el error?
Disculpa, me refiero a que en el primer post un lector publicó que cuando escribía el código propuesto, el control de cambios no se realizaba en la celda sobre la cual se tiene que relizar sino que se realiza en la celda inmediatamente inferior (o en la celda a la que se desplace una vez ingresado el valor en la celda de interés).
ResponderBorrarHe abierto el archivo en Excel 2003 y veo que funciona sin inconvenientes.
ResponderBorrarNo tengo claro si te refieres a el registro de los cambios en el comentario de la celda o en la hoja "Control". En esta hoja, obviamente, los cambios se van registrando en celdas separdas (el último cambio siempre ocupa la última celda de la columna).
Te sugiero que me mandes tu archvio con una nota indicando donde está el problema.
Ok, como hago para publicar el archivo?
ResponderBorrar¿A qué te refieres con publicar el archivo?
ResponderBorrarCuando me pidió que envíe el archivo entendí que se refería a que lo suba junto con el post.
ResponderBorrarTienes que enviarlo al mail que figura en el enlace Ayuda.
ResponderBorrarQue tal Jorge.
ResponderBorrarComentarte que estan magnificos los ejemplos que tienes en tu Web y agredecerte el tiempo que le dedicas en ayudar a los demas.
Te comento que estoy tratando de ejecutar este ejemplo:Control de cambios personalizados en Excel. Pero no lo he logrado del todo aun me esta saltando una linea con error al querer escribir o borrar algun dato este es el error:Se ha producido el error '1004' en tiempo ejecución: Error en el metodo 'Range' de objeto_ WorkSheet'.
Entiendo que sera al asignar los rango pero no le encuentro el error si pudieras ayudarme por favor.
Estoy usando Excel 2010.
Te agradezco la ayuda.
DS.
DS, el problema puede deberse a vaarias causas (la definición del rango con el nombre definido, el nombre de la hoja donde registras el control, etc.)
ResponderBorrarLo más práctico es que me envíes el cuaderno para que pueda ver donde está el problema. Fijate en el enlace Ayuda (en la parte superior de la plantilla).
Hola Jorge
ResponderBorrar¿Dónde debería introducir el código en VB?
Me gustaría que en la hoja nueva se guardaran algunas celdas de la fila donde se encuentra la celda cambiada aparte de sus valores viejo y nuevo/s. ¿Cómo debería hacer?
Muchas gracias y muy buena esta explicación.
Saludos.
Fijate en la nota anterior (el enlace en el primer párrafo de esta nota).
ResponderBorrarHola Jorge
ResponderBorrarPerdón, pero no entiendo.
Yo tengo una columna con datos y quiero poder registrar en una nueva hoja los cambios que sucedan en las celdas de esas columnas. Para ello quiero que esa hoja de seguimiento nueva me muestre todos los valores que recibió cada una de las celdas de esa columna y algunos valores (que son fijos) de la misma fila que la celda modificada (para poder identificar cuál se cambió).
No comprendo cómo escribir esto en VB. ¿Tendrás algún instructivo o video explicativo?
Muchas gracias.
Saludos.
Está todo explicado en la primer nota (el enlace en la primer frase de esta nota).
ResponderBorrarDisculpame Jorge, pero no está o por lo menos no lo encuentro.
ResponderBorrarYo necesito saber exactamente cómo colocar los códigos
A su vez, yo no quiero que me copie la ubicación de la celda modificada sino el valor de otra celda en esa fila, Por ejemplo, si modifiqué la celda A2, quiero que me copie el valor viejo, el valor nuevo de la celda A2 y el valor de la celda B2 (que no cambió).
¿Cómo debería hacer esto?
Muchas gracias por tu ayuda y espero haber sido clar.
Saludos.
En la primer nota (ver el enalce al principio de esta nota) explico donde y como colocar los códigos.
ResponderBorrarEn cuanto a registrar el valor de otra celda, tendrías que modficar el código. La idea de controlar los cambios es registrar las celdas que fueron cambiadas.
Si necesitas algún otro tipo de tarea puedes consultarme por mail privado (ver el enlace Ayuda, en la parte superior de la plantilla).
Buenas Tardes Jorge,
ResponderBorrarTu pagina es lo máximo, muchas gracias por compartir tus conocimientos con todos nosotros;
Con respecto a este comentario:
Anónimo, 30 noviembre, 2010 13:02
A mí sucedía lo mismo, dejo aquí una modificación que me funciono a mí en lo personal y esperando le pueda ayudar a otros, escribi estas líneas antes del With ActiveCell / End With:
Fila = ActiveCell.Row
Columna = ActiveCell.Column
Cells(Fila - 1, Columna).Select
Y eso fue todo, me funciono a la perfección (Con Office 2007).
Atte. Servando Guardado
Hola. Muchas gracias por tu post!.
ResponderBorrarTengo una duda que ya la ví en los comentarios pero no se como la solucionaron.
La macro funciona bien cuando le doy OK haciendo click con el mouse. Si aprieto la tecla enter, el comentario se agregar en la celda de abajo con el txt de la celda de abajo. gracias
Prueba lo siguiente: en las opciones de Excel (Archivo-Opciones) abre Avanzadas y en la sección Opciones de Edición quita la marca de "Después de presionar Entrar, mover selección".
ResponderBorrarEstimado Jorge, es posible descargar la planilla con el ejemplo ?
ResponderBorrarMuchas gracias. Saludos
Ricardo, lamentablemente no tengo el archivo disponible para descargar.
ResponderBorrar