Неділя, 18 грудень 2022
  2 відповіді
  4.8 тис. Відвідувань
0
Голосів
розстібати
Я скопіював VBA для копіювання даних із клітинки в той самий рядок, інший стовпець, і змінив його, щоб я міг змінити клітинку в стовпці F і зберегти значення в стовпці E, але коли я намагаюся це зробити, нічого не відбувається. Хтось може сказати мені, що я роблю не так? Я також хотів би розмістити позначку дати в стовпці G, коли я вношу зміни.

Я сподівався, що зможу зробити те саме, коли зміню клітинку в стовпці I, щоб зберегти її в стовпці H, і позначу цю зміну в стовпці J.

Будь-яка допомога буде дуже вдячна.


Dim xRg As Range
Dim xChangeRg As Range
Dim xDependRg як діапазон
Dim xDic як новий словник
Приватний допоміжний робочий лист_Change(ByVal Target As Range)
Dim I As Long
Dim xCell As Range
Dim xDCell As Range
Розменшувати xHeader як рядок
Dim xCommText As String
On Error Resume Next
Application.ScreenUpdating = Невірний
Application.EnableEvents = False
xHeader = "Попереднє значення:"
x = xDic.Keys
Для I = 0 до UBound(xDic.Keys)
Встановити xCell = Range(xDic.Keys(I))
Встановити xDCell = Cells(xCell.Row, 5)
xDCell.Value = ""
xDCell.Value = xDic.Items(I)
МАЙБУТНІ
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
Приватний додатковий аркуш_SelectionChange(ByVal Target As Range)
Dim I, J As Long
Dim xRgArea As Range
У разі помилки GoTo Label1
Якщо Target.Count > 1, то вийдіть із Sub
Application.EnableEvents = False
Установіть xDependRg = Target.Dependents
Якщо xDependRg нічого не означає, то GoTo Label1
Якщо не xDependRg, це нічого
Встановити xDependRg = Intersect(xDependRg, Range("F:F"))
End If
Label1:
Встановити xRg = Intersect(Target, Range("F:F"))
Якщо (Not xRg Is Nothing) And (Not xDependRg Is Nothing) Then
Встановити xChangeRg = Union(xRg, xDependRg)
ElseIf (xRg — це нічого) і (Not xDependRg — це нічого) Тоді
Встановіть xChangeRg = xDependRg
ElseIf (Not xRg Is Nothing) And (xDependRg Is Nothing) Then
Встановіть xChangeRg = xRg
Ще
Application.EnableEvents = True
Exit Sub
End If
xDic.RemoveAll
Для I = 1 To xChangeRg.Areas.Count
Встановити xRgArea = xChangeRg.Areas(I)
Для J = 1 To xRgArea.Count
xDic.Add xRgArea(J).Address, xRgArea(J).Formula
МАЙБУТНІ
МАЙБУТНІ
Встановити xChangeRg = нічого
Встановіть xRg = Нічого
Встановити xDependRg = нічого
Application.EnableEvents = True
End Sub
1 рік тому
·
# 3309
0
Голосів
розстібати
ОНОВЛЕННЯ

VBA працює! Перегляньте код нижче. Мені просто потрібна допомога зі зміненням так, щоб коли я зміню комірку в стовпці I, воно зберігає значення в стовпці H.


Dim xRg As Range
Dim xChangeRg As Range
Dim xDependRg як діапазон
Dim xDic як новий словник
Приватний допоміжний робочий лист_Change(ByVal Target As Range)
Dim I As Long
Dim xCell As Range
Dim xDCell As Range
Розменшувати xHeader як рядок
Dim xCommText As String
On Error Resume Next
Application.ScreenUpdating = Невірний
Application.EnableEvents = False
xHeader = "Попереднє значення:"
x = xDic.Keys
Для I = 0 до UBound(xDic.Keys)
Встановити xCell = Range(xDic.Keys(I))
Встановити xDCell = Cells(xCell.Row, 5)
xDCell.Value = ""
xDCell.Value = xDic.Items(I)
МАЙБУТНІ

Якщо Target.Column = 6 Тоді
Application.EnableEvents = False
Cells(Target.Row, 7).Value = Date
Application.EnableEvents = True
End If

Якщо Target.Column = 9 Тоді
Application.EnableEvents = False
Cells(Target.Row, 10).Value = Date
Application.EnableEvents = True
End If
Application.EnableEvents = True
End Sub
Приватний додатковий аркуш_SelectionChange(ByVal Target As Range)
Dim I, J As Long
Dim xRgArea As Range
У разі помилки GoTo Label1
Якщо Target.Count > 1, то вийдіть із Sub
Application.EnableEvents = False
Установіть xDependRg = Target.Dependents
Якщо xDependRg нічого не означає, то GoTo Label1
Якщо не xDependRg, це нічого
Встановити xDependRg = Intersect(xDependRg, Range("F:F"))
End If
Label1:
Встановити xRg = Intersect(Target, Range("F:F"))
Якщо (Not xRg Is Nothing) And (Not xDependRg Is Nothing) Then
Встановити xChangeRg = Union(xRg, xDependRg)
ElseIf (xRg — це нічого) і (Not xDependRg — це нічого) Тоді
Встановіть xChangeRg = xDependRg
ElseIf (Not xRg Is Nothing) And (xDependRg Is Nothing) Then
Встановіть xChangeRg = xRg
Ще
Application.EnableEvents = True
Exit Sub
End If
xDic.RemoveAll
Для I = 1 To xChangeRg.Areas.Count
Встановити xRgArea = xChangeRg.Areas(I)
Для J = 1 To xRgArea.Count
xDic.Add xRgArea(J).Address, xRgArea(J).Formula
МАЙБУТНІ
МАЙБУТНІ
Встановити xChangeRg = нічого
Встановіть xRg = Нічого
Встановити xDependRg = нічого

Application.EnableEvents = True
End Sub
1 рік тому
·
# 3310
0
Голосів
розстібати
Щоб уточнити, це буде доповненням до того, що він уже робить. Я хочу мати можливість відстежувати зміни, внесені як у стовпці F, так і в стовпці I. Вибачте за плутанину.
  • Сторінки:
  • 1
На цю посаду ще немає відповідей.