Registro de modificaciones en una fila

Tengo una matriz que es modificada a través de un userform, necesito agregar un código que registre en una celda de la fila que está siendo modificada el username de quienes lo han modificado.

1 Respuesta

Respuesta

Suponiendo que x = fila donde se está realizando el pase y J sea la columna donde debe ir el username, esta sería la instrucción:

Range("J" & x) = Range("J" & x) & " " & Application.UserName

Estoy adicionando el nombre del usuario a cualquier texto que ya contenga esa celda siguiendo tu imagen. Si solo debe ser colocado el nombre del último usuario quedaría como:

Range("J" & x) = Application.UserName

Private Sub CommandButton3_Click()
'---------
'Modificar
'---------
With ListBox1
  Pasar_a_la_hoja 0 + .List(.ListIndex, 0)
End With
CommandButton1_Click
End Sub
Private Sub CommandButton4_Click()
'--------
'Eliminar
'--------
Dim LR&
With ListBox1
  LR = 0 + .List(.ListIndex, 0)
End With
If MsgBox("¿Confirma eliminación?...", vbYesNo) = vbNo Then Exit Sub
ws1.Cells(LR, "a").Resize(, 10).Delete xlShiftUp
If ws1.[b3] <> "" Then
  With ws1.Range(ws1.[b3], ws1.[b2].End(xlDown)).Offset(, -1)
    .Formula = "=row()"
    .Value = .Value
  End With
End If
CommandButton1_Click
End Sub
Private Sub Pasar_a_la_hoja(LR&)
Dim iFase
Dim iEntrega
Dim iAccion
Dim iTurno
With ws1.Cells(LR, "a")
  .Value = .Row
  .Cells(1, 2) = TextBox1 ' Lote
  .Cells(1, 3) = CDate(TextBox8) ' Fecha
  .Cells(1, 4) = TextBox9 ' Hora
  .Cells(1, 8) = Environ("Username") 'Firma de usuario
  .Cells(1, 6) = 0 + ComboBox1.List(ComboBox1.ListIndex, 1) ' Producto1
  .Cells(1, 27) = ComboBox1.Value 'Producto2
  .Cells(1, 16) = TextBox2.Value 'Observaciones
  .Cells(1, 18) = TextBox15.Value 'Fecha devolución
  .Cells(1, 19) = TextBox14.Value 'Hora devolución
  .Cells(1, 20) = TextBox10.Value 'Fecha recepción corrección
  .Cells(1, 21) = TextBox11.Value 'Hora recepcion corrección
  .Cells(1, 22) = TextBox16.Value 'Transito corrección
  .Cells(1, 23) = TextBox12.Value 'Fecha entrega GC
  .Cells(1, 24) = TextBox13.Value 'Hora entrega GC
  .Cells(1, 25) = TextBox17.Value 'Trancito total
  For Each iFase In FaseS
    If Controls(iFase) Then
      .Cells(1, 7) = Controls(iFase).Name
      Exit For
    End If
  Next
For Each iEntrega In Entregas
    If Controls(iEntrega) Then
       .Cells(1, 5) = Controls(iEntrega).Name
       Exit For
    End If
    Next
For Each iTurno In TurnoS
    If Controls(iTurno) Then
       .Cells(1, 17) = Controls(iTurno).Name
       Exit For
    End If
    Next
ws1.Range(.Cells(1, 9), .Cells(1, 15)).ClearContents
  If Textbox3 <> "" Then .Cells(1, 9) = 0 + Textbox3 ' Desv 01
  If TextBox4 <> "" Then .Cells(1, 10) = 0 + TextBox4 ' Desv 02
  If TextBox5 <> "" Then .Cells(1, 11) = 0 + TextBox5 ' Desv 03
  If TextBox6 <> "" Then .Cells(1, 12) = 0 + TextBox6 'Desv 04
  If TextBox7 <> "" Then .Cells(1, 13) = 0 + TextBox7 'Desv 05
  If Devuelto.Value = True Then .Cells(1, 14) = "1" 'Accion devolucion
  If RNC.Value = True Then .Cells(1, 15) = "1"   'Accion RNC
  If CommandButton2.Enabled = True Then .Cells(1, 26) = "1"
  End With
End Sub
Private Sub Limpio_El_Formulario()
Dim i%, iFase, iEntrega, iTurno
ListBox1.RowSource = ""
For i = 2 To 15: Controls("Textbox" & i) = "": Next
For Each iFase In FaseS
  Controls(iFase).Value = False
Next
For Each iEntrega In Entregas
  Controls(iEntrega).Value = False
  Next
For Each iTurno In TurnoS
  Controls(iTurno).Value = False
  Next
 Devuelto = False
 RNC = False
 ComboBox1.ListIndex = -1
 TextBox8 = Date
 TextBox9 = Format(Time, "hh:mm:ss am/pm")
 TextBox15 = Date
 TextBox15.Enabled = False
 TextBox14 = Format(Time, "hh:mm:ss am/pm")
 TextBox14.Enabled = False
 TextBox12 = Date
 TextBox12.Enabled = False
 TextBox13 = Format(Time, "hh:mm:ss am/pm")
 TextBox13.Enabled = False
 ToggleButton1.Value = False
 TextBox10 = Date
 TextBox10.Enabled = False
 TextBox11 = Format(Time, "hh:mm:ss am/pm")
 TextBox11.Enabled = False
 ToggleButton2.Value = False
End Sub
Private Sub CommandButton5_Click()
'=======
'LIMPIAR
'=======
Limpio_El_Formulario
TextBox1.Value = ""
End Sub
Private Sub Devuelto_Click()
If Devuelto.Value = True Then
TextBox15.Enabled = True
Else: TextBox15.Enabled = False
End If
If Devuelto.Value = True Then
TextBox14.Enabled = True
Else: TextBox14.Enabled = False
End If
End Sub

Gracias pero ¿como lo adapto a este código que es el que tengo para agregar y modificar datos desde un userform con  listbox? la idea es que al hacer click en guardar se grabe el usuario al hacer click en botón agregar ya esto lo hice y faltaría al hacer click en modificar se ejecute el codigo que me esta explicando usted.

Del mismo modo en que pasas cada dato 'modificado' debes guardar en su columna el username.

Por ejemplo, si fuese la col J:

.Cells(1, 10) = .Cells(1, 10) & Application. Username

** Veo que en tu macro pasas otra información a partir de col 9 hasta la 15... seguramente entonces el usuario va en otra col... ajusta el nro 10 por el que corresponda.

Sdos!

Perfecto lo probé en el botón agregar y funciona pero como lo condiciono a que solo ocurra con el evento click del botón modificar

Private Sub CommandButton3_Click()
'---------
'Modificar
'---------
With ListBox1
  Pasar_a_la_hoja 0 + .List(.ListIndex, 0)
 End With
CommandButton1_Click
End Sub

¿Y por qué lo has probado en el botón Agregar si me pediste la instrucción para el botón Modificar y así te la envié?

Private Sub Pasar_a_la_hoja(LR&)
Dim iFase
Dim iEntrega
Dim iAccion
Dim iTurno
With ws1.Cells(LR, "a")
  .Value = .Row
  .Cells(1, 2) = TextBox1 ' Lote
  .Cells(1, 3) = CDate(TextBox8) ' Fecha
  .Cells(1, 4) = TextBox9 ' Hora
  .Cells(1, 8) = Environ("Username") 'Firma de usuario   .... si esta es la col ver (*)

(*) reemplazar la última instrucción por esta otra:

.Cells(1, 8) = .Cells(1, 8) & " " & Application. Username

Si no deseas el espacio lo quitas.

Sdos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas