Domingo, diciembre 18 2022
  2 Respuestas
  4.4K visitas
0
Votos
deshacer
Copié el VBA para copiar datos de la celda en la misma fila en una columna diferente y lo cambié para poder cambiar una celda en la Columna F y guardar el valor en la columna E, pero cuando lo intento, no pasa nada. ¿Alguien puede decirme qué estoy haciendo mal? También me gustaría colocar una marca de fecha en la columna G cuando realice el cambio.

Esperaba poder hacer lo mismo cuando cambio una celda en la Columna I para guardarla en la Columna H y marcar la fecha de ese cambio en la Columna J.

Cualquier ayuda sería muy apreciada.


Dim xRg como rango
Dim xChangeRg como rango
Dim xDependRg como rango
Dim xDic como nuevo diccionario
Sub hoja de trabajo privada_Cambio (según el rango de destino ByVal)
Dim I tan largo
Dim xCell como rango
Dim xDCell como rango
Dim xHeader como cadena
Dim xCommText como cadena
On Error Resume Next
Application.ScreenUpdating = False
Application.EnableEvents = False
xHeader = "Valor anterior:"
x = xDic.Teclas
Para I = 0 a UBound(xDic.Keys)
Establecer xCell = Rango (xDic.Keys (I))
Establecer xDCell = Cells(xCell.Row, 5)
xDCell.Valor = ""
xDCell.Value = xDic.Items(I)
Siguiente
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
Sub hoja de trabajo privada_Cambio de selección (rango de destino ByVal)
Dim I, J como siempre
Dim xRgArea como rango
En caso de error Ir a etiqueta1
Si Target.Count > 1, entonces salga de Sub
Application.EnableEvents = False
Establezca xDependRg = Target.Dependents
Si xDependRg no es nada, vaya a Label1
Si no xDependRg no es nada, entonces
Establecer xDependRg = Intersect(xDependRg, Range("F:F"))
Si terminar
Etiqueta1:
Establecer xRg = Intersecar(Objetivo, Rango("F:F"))
Si (No xRg no es nada) y (No xDependRg no es nada) Entonces
Establecer xChangeRg = Unión (xRg, xDependRg)
De lo contrario, si (xRg no es nada) y (no xDependRg no es nada), entonces
Establecer xChangeRg = xDependRg
ElseIf (No xRg no es nada) y (xDependRg no es nada) Entonces
Establecer xChangeRg = xRg
otro
Application.EnableEvents = True
Exit Sub
Si terminar
xDic.RemoveAll
Para I = 1 Para xChangeRg.Areas.Count
Establecer xRgArea = xChangeRg.Areas(I)
Para J = 1 Para xRgArea.Count
xDic.Add xRgArea(J).Dirección, xRgArea(J).Fórmula
Siguiente
Siguiente
Establecer xChangeRg = Nada
Establecer xRg = Nada
Establecer xDependRg = Nada
Application.EnableEvents = True
End Sub
Hace años 1
·
#3309
0
Votos
deshacer
ACTUALIZAR

¡El VBA está funcionando! Por favor, vea el código a continuación. Solo necesito ayuda para modificarlo de modo que cuando cambie una celda en la Columna I guarde el valor en la Columna H.


Dim xRg como rango
Dim xChangeRg como rango
Dim xDependRg como rango
Dim xDic como nuevo diccionario
Sub hoja de trabajo privada_Cambio (según el rango de destino ByVal)
Dim I tan largo
Dim xCell como rango
Dim xDCell como rango
Dim xHeader como cadena
Dim xCommText como cadena
On Error Resume Next
Application.ScreenUpdating = False
Application.EnableEvents = False
xHeader = "Valor anterior:"
x = xDic.Teclas
Para I = 0 a UBound(xDic.Keys)
Establecer xCell = Rango (xDic.Keys (I))
Establecer xDCell = Cells(xCell.Row, 5)
xDCell.Valor = ""
xDCell.Value = xDic.Items(I)
Siguiente

Si Target.Column = 6 Then
Application.EnableEvents = False
Celdas (Objetivo. Fila, 7). Valor = Fecha
Application.EnableEvents = True
Si terminar

Si Target.Column = 9 Then
Application.EnableEvents = False
Celdas (Objetivo. Fila, 10). Valor = Fecha
Application.EnableEvents = True
Si terminar
Application.EnableEvents = True
End Sub
Sub hoja de trabajo privada_Cambio de selección (rango de destino ByVal)
Dim I, J como siempre
Dim xRgArea como rango
En caso de error Ir a etiqueta1
Si Target.Count > 1, entonces salga de Sub
Application.EnableEvents = False
Establezca xDependRg = Target.Dependents
Si xDependRg no es nada, vaya a Label1
Si no xDependRg no es nada, entonces
Establecer xDependRg = Intersect(xDependRg, Range("F:F"))
Si terminar
Etiqueta1:
Establecer xRg = Intersecar(Objetivo, Rango("F:F"))
Si (No xRg no es nada) y (No xDependRg no es nada) Entonces
Establecer xChangeRg = Unión (xRg, xDependRg)
De lo contrario, si (xRg no es nada) y (no xDependRg no es nada), entonces
Establecer xChangeRg = xDependRg
ElseIf (No xRg no es nada) y (xDependRg no es nada) Entonces
Establecer xChangeRg = xRg
otro
Application.EnableEvents = True
Exit Sub
Si terminar
xDic.RemoveAll
Para I = 1 Para xChangeRg.Areas.Count
Establecer xRgArea = xChangeRg.Areas(I)
Para J = 1 Para xRgArea.Count
xDic.Add xRgArea(J).Dirección, xRgArea(J).Fórmula
Siguiente
Siguiente
Establecer xChangeRg = Nada
Establecer xRg = Nada
Establecer xDependRg = Nada

Application.EnableEvents = True
End Sub
Hace años 1
·
#3310
0
Votos
deshacer
Solo para aclarar, esto sería adicional a lo que ya está haciendo. Quiero poder realizar un seguimiento de los cambios realizados tanto en la columna F como en la columna I. Disculpe la confusión.
  • De la página:
  • 1
Aún no hay respuestas para esta publicación.