By jeffw v neděli 18. prosince 2022
Publikováno v Kutools pro Excel
Odpovědi 2
záliby 0
Zobrazení 4.8
Hlasy 0
Zkopíroval jsem VBA pro kopírování dat z buňky do stejného řádku jiného sloupce a změnil jsem jej tak, abych mohl změnit buňku ve sloupci F a uložit hodnotu do sloupce E, ale když to zkusím, nic se nestane. Může mi někdo říct, co dělám špatně? Chtěl bych také umístit datové razítko do sloupce G, když provedu změnu.

Doufal jsem, že také budu moci udělat totéž, když změním buňku ve sloupci I, abych ji uložil do sloupce H a označil tuto změnu datem ve sloupci J.

Jakákoli pomoc by byla velmi oceněna.


Dim xRg jako rozsah
Dim xChangeRg jako rozsah
Dim xDependRg jako rozsah
Dim xDic jako nový slovník
Soukromá dílčí tabulka_Změna (ByVal Target As Range)
Dim I As Long
Dim xCell As Range
Dim xDCell jako rozsah
Ztlumit xHeader jako řetězec
Dim xCommText jako řetězec
On Error Resume Next
Application.ScreenUpdating = False
Application.EnableEvents = False
xHeader = "Předchozí hodnota:"
x = xDic.Keys
Pro I = 0 až UBound(xDic.Keys)
Nastavit xCell = Range(xDic.Keys(I))
Nastavit xDCell = Cells(xCell.Row, 5)
xDCell.Value = ""
xDCell.Value = xDic.Items(I)
další
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
Private Sub Worksheet_SelectionChange (ByVal Target As Range)
Dim I, J As Long
Dim xRgArea jako rozsah
On Error GoTo Label1
Pokud Target.Count > 1, pak Exit Sub
Application.EnableEvents = False
Nastavte xDependRg = Target.Dependents
Pokud xDependRg není nic, pak přejděte na Label1
Pokud ne, xDependRg není nic, pak
Nastavit xDependRg = Intersect(xDependRg, Range("F:F"))
End If
Štítek1:
Nastavit xRg = Intersect(Target, Range("F:F"))
If (Not xRg Is Nothing) A (Not xDependRg Is Nothing) Then
Nastavit xChangeRg = Union(xRg, xDependRg)
ElseIf (xRg Is Nothing) A (Not xDependRg Is Nothing) Potom
Nastavte xChangeRg = xDependRg
ElseIf (Not xRg Is Nothing) A (xDependRg Is Nothing) Potom
Nastavte xChangeRg = xRg
Jiný
Application.EnableEvents = True
Konec Sub
End If
xDic.RemoveAll
Pro I = 1 To xChangeRg.Areas.Count
Nastavit xRgArea = xChangeRg.Areas(I)
Pro J = 1 To xRgArea.Count
xDic.Add xRgArea(J).Address, xRgArea(J).Formula
další
další
Nastavit xChangeRg = nic
Nastavit xRg = nic
Nastavte xDependRg = Nic
Application.EnableEvents = True
End Sub
UPDATE

VBA funguje! Podívejte se prosím na kód níže. Potřebuji pomoct s jeho úpravou tak, aby když změním buňku ve sloupci I, uložila hodnotu do sloupce H.


Dim xRg jako rozsah
Dim xChangeRg jako rozsah
Dim xDependRg jako rozsah
Dim xDic jako nový slovník
Soukromá dílčí tabulka_Změna (ByVal Target As Range)
Dim I As Long
Dim xCell As Range
Dim xDCell jako rozsah
Ztlumit xHeader jako řetězec
Dim xCommText jako řetězec
On Error Resume Next
Application.ScreenUpdating = False
Application.EnableEvents = False
xHeader = "Předchozí hodnota:"
x = xDic.Keys
Pro I = 0 až UBound(xDic.Keys)
Nastavit xCell = Range(xDic.Keys(I))
Nastavit xDCell = Cells(xCell.Row, 5)
xDCell.Value = ""
xDCell.Value = xDic.Items(I)
další

Pokud Target.Column = 6 Potom
Application.EnableEvents = False
Buňky(Cíl.Řádek, 7).Hodnota = Datum
Application.EnableEvents = True
End If

Pokud Target.Column = 9 Potom
Application.EnableEvents = False
Buňky(Cíl.Řádek, 10).Hodnota = Datum
Application.EnableEvents = True
End If
Application.EnableEvents = True
End Sub
Private Sub Worksheet_SelectionChange (ByVal Target As Range)
Dim I, J As Long
Dim xRgArea jako rozsah
On Error GoTo Label1
Pokud Target.Count > 1, pak Exit Sub
Application.EnableEvents = False
Nastavte xDependRg = Target.Dependents
Pokud xDependRg není nic, pak přejděte na Label1
Pokud ne, xDependRg není nic, pak
Nastavit xDependRg = Intersect(xDependRg, Range("F:F"))
End If
Štítek1:
Nastavit xRg = Intersect(Target, Range("F:F"))
If (Not xRg Is Nothing) A (Not xDependRg Is Nothing) Then
Nastavit xChangeRg = Union(xRg, xDependRg)
ElseIf (xRg Is Nothing) A (Not xDependRg Is Nothing) Potom
Nastavte xChangeRg = xDependRg
ElseIf (Not xRg Is Nothing) A (xDependRg Is Nothing) Potom
Nastavte xChangeRg = xRg
Jiný
Application.EnableEvents = True
Konec Sub
End If
xDic.RemoveAll
Pro I = 1 To xChangeRg.Areas.Count
Nastavit xRgArea = xChangeRg.Areas(I)
Pro J = 1 To xRgArea.Count
xDic.Add xRgArea(J).Address, xRgArea(J).Formula
další
další
Nastavit xChangeRg = nic
Nastavit xRg = nic
Nastavte xDependRg = Nic

Application.EnableEvents = True
End Sub
·
Před rokem 1
·
0 Likes
·
0 hlasů
·
0 Komentáře
·
Jen pro objasnění, toto by bylo navíc k tomu, co již dělá. Chci mít možnost sledovat změny provedené jak ve sloupci F, tak ve sloupci I. Omlouváme se za zmatek.
·
Před rokem 1
·
0 Likes
·
0 hlasů
·
0 Komentáře
·
Zobrazit celý příspěvek