Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Ejecutar Macro Automaticamente al cambiar celda

2,022 views
Skip to first unread message

Andrés

unread,
May 2, 2008, 4:45:02 PM5/2/08
to
Hola,

Necesito una ayuda con respecto a la ejecución automática de una macro. Lo
que necesito es:

Al estar trabajando en un libro en específico, necesito documentar en la
columna D la fecha y la hora exacta en la que se ingresó un dato en la
columna C.

Por lo tanto en el momento en que digite cualquier valor en la celda "C5",
necesito que quede registrada la hora exacta de esa modificación en la celda
"D5" y así con toda la columna.

Lo que pretendo es que la macro se active si y sólo si, hay algún cambio en
una celda de la columna C.

Gracias por su ayuda

Andrés O.

Héctor Miguel

unread,
May 2, 2008, 8:36:37 PM5/2/08
to
hola, Andrés !

> Al estar trabajando en un libro en especifico, necesito documentar en la columna D
> la fecha y la hora exacta en la que se ingreso un dato en la columna C.
> Por lo tanto en el momento en que digite cualquier valor en la celda "C5" necesito
> que quede registrada la hora exacta de esa modificacion en la celda "D5" y asi con toda la columna.
> Lo que pretendo es que la macro se active si y solo si, hay algun cambio en una celda de la columna C.

(pregunta): si la columna D ya tiene su dato (fecha y hora) de algun ingreso en su fila en la columna C
y se modifica (de nuevo o constantemente) el dato de la columna C... que esperas que contenga la columna D ?
- el primer dato (fecha y hora) de la primer entrada en la columna C ?
- el dato (fecha y hora) de la modificacion mas reciente en la columna C ?
- o necesitas un registro consecutivo por cada modificacion en la columna C ?
- o... que pasa si se borra el dato que contenga la columna C ?

(si tienes contemplada otra serie de -posibles- "eventualidades", aprovecha para comentarlas) ;)

saludos,
hector.


Andrés

unread,
May 2, 2008, 11:57:00 PM5/2/08
to
Hola Héctor....

Muchas gracias por tu colaboración. La idea es que siempre que se haga un
cambio en la columna C se actualice la fecha y hora en la columna D. El
programa que tenemos no permitiría que se escribiera nuevamente un dato, pero
en caso que se presentara la posibilidad, lo que debe hacer la macro es
entender que hubo un cambio en la columna C y por lo tanto, actualizar la
fecha en la columna D.

Saludos

"Héctor Miguel" escribió:

Héctor Miguel

unread,
May 3, 2008, 1:05:40 AM5/3/08
to
hola, Andrés !

> La idea es que siempre que se haga un cambio en la columna C se actualice la fecha y hora en la columna D.

> El programa que tenemos no permitiria que se escribiera nuevamente un dato, pero en caso que se presentara la posibilidad


> lo que debe hacer la macro es entender que hubo un cambio en la columna C y por lo tanto, actualizar la fecha en la columna D.

1) haz un clic-secundario (generalmente clic-derecho) sobre la etiqueta con el nombre de "esa" hoja y selecciona: "ver codigo..."

2) en el modulo de codigo (ya en el editor de vba) copia/pega las siguientes instrucciones:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 3 Then Target.Offset(, 1) = Now
End Sub

si cualquier duda (o informacion adicional)... comentas ?
saludos,
hector.

__ posts anteriores __

Juan Español 2

unread,
May 3, 2008, 4:30:46 AM5/3/08
to
Como alternativa a las respuestas dadas, te remito un código que una vez me
enviaron (a lo mejor fue Héctor, no lo recuerdo) para hacer eso que
necesitas. Una vez copiado el código tu utilizarías como una función más,
ej: en d5 escribirías =fechasi(c5<>"") hecho esto cuando algún caracter
ocupe la celda d5se te pondrá la fecha en c5.

Public Function FechaSi( _
Optional Condicion As Variant = "", _
Optional SiCumple As Variant = "", _
Optional SiNoCumple As Variant = "", _
Optional Formato As String = "dd/mmm/yy" _
) As Variant
If Condicion = "" Or Condicion = True Then
If SiCumple = "" Then
SiCumple = Format(Now, Formato)
ElseIf IsDate(SiCumple) Then
SiCumple = Format(CLng(CDate(SiCumple)), Formato)
End If
FechaSi = SiCumple
Else
If IsDate(SiNoCumple) Then SiNoCumple = _
Format(CLng(CDate(SiNoCumple)), Formato)
FechaSi = SiNoCumple
End If
End Function


Saludos

"Héctor Miguel" <NOhemio...@PLShotmail.com> escribió en el mensaje de
noticias:euFeYtNr...@TK2MSFTNGP06.phx.gbl...

csr...@gmail.com

unread,
May 15, 2018, 6:40:14 PM5/15/18
to
Hola Andres, depronto esto le pueda funcionar solo debe cambiar la hoja donde se ejecuta (2018) y las columnas de condición.

function onEdit(event)
{
var timezone = "GMT-5";
var timestamp_format = "dd-MM-yyyy HH:mm:ss"; // Timestamp Format.
var updateColName = "VALOR";
var timeStampColName = "FECHA Y HORA";
var sheet = event.source.getSheetByName('2018'); //Nome da planilha onde você vai rodar este script.

var actRng = event.source.getActiveRange();
var editColumn = actRng.getColumn();
var index = actRng.getRowIndex();
var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues();
var dateCol = headers[0].indexOf(timeStampColName);
var updateCol = headers[0].indexOf(updateColName); updateCol = updateCol+1;

if (dateCol > -1 && index > 1 && editColumn == updateCol) { // only timestamp if 'Last Updated' header exists, but not in the header row itself!
var cell = sheet.getRange(index, dateCol + 1);
var date = Utilities.formatDate(new Date(), timezone, timestamp_format);
cell.setValue(date);
}
}
0 new messages