与Excel事件的VBA查找
我有Sheet1 column D
的位置列表和Sheet1 column E
中的原始值列表。 在一些地方之间有空白的行,有些地方是重复的。
我在Sheet2 Column F
(在数据中有1个空白行)中有一个精简的位置列表,并且在Sheet2 column G
我可以为每个位置添加新的校正值。
该计划是有一个脚本,将运行每次我把一个新的值在Sheet2 column G
这个我希望可以用excel vba事件来实现。 假设我更新G5
,脚本将在Sheet1 D:D
findSheet2 F5
,然后用Sheet2 G5
的新值replaceSheet1 E:E
的对应值:
这里是我的一些代码的尝试,但我仍然不确定1)如何使这个工作和2)如何让它工作,每当我更新Sheet2 G:G
? 任何帮助将非常感激。
Sub CorrectingValues() Dim i As Long Dim lstrw As Long Dim newval As Range Sheets("Sheet1").activate lstrw = Cells(Rows.Count, "D").End(xlUp).Row For i = lstrw to 1 Step -1 If Sheet("2").Cells(i, "G").value <>"" Then newval = .Find(Sheets("Sheet2").cells(i, "F") _ After:=Sheets("Sheet1").Range("D1") , LookIn:=xlValues) Cells(newval, "E").Value = Sheets("2").cells(i,"G") End If Next i End Sub
将下面的代码放在Sheet2中
Private Sub Worksheet_Change(ByVal Target As Range) Dim KeyCells As Range Set KeyCells = Range("G:G") If Not Application.Intersect(KeyCells, Range(Target.Address)) Is Nothing Then enteredvalue = Target.Value enteredvaluefind = Cells(Target.Row, Target.Column - 1) targetfindrow = Worksheets("Sheet1").Range("D:D").Find(enteredvaluefind).Row targetfindcolumn = Worksheets("Sheet1").Range("D:D").Find(enteredvaluefind).Column Worksheets("Sheet1").Cells(targetfindrow, targetfindcolumn + 1) = enteredvalue End If End Sub
“Excel事件”
当G
列中的内容发生变化时要做某些事情:在要捕获更改的Worksheet VBA中完成:
a)声明一个全局variables来重用更改的内容,以防万一:
Dim RangeSupp As Range
b)Excel中某些内容发生变化时的VBA事件
Private Sub Worksheet_Change(ByVal Target As Range) Set RangeSupp = Target ' check what changed If InStr(Target.Address, "$H") = 1 Then ' call the function you want GoToAnotherMacro RangeSupp End If End Sub
c)我要求testing的函数的例子
Sub GoToAnotherMacro(Target As Range) MsgBox Target.Address End Sub