我有一个工作表,其中根据所选项目,价格从数据库中出现,该价格已在工作表“ db”中定义。我尝试创建的宏将比较当前工作表中的值,如果该值与db Sheet中的值不匹配,则会更新db Sheet。换句话说,如果用户更改当前工作表中的价格,则数据库将相应更新。
我已经尝试使用for循环到和vlookup比较当前工作表和db中的项目名称,然后比较vlookup的值,但是到目前为止,当前表db中的值更改时不会更新。
Sub valueUpdater()
Dim cell As Range
Dim Ret
Dim Cur
For Each cell In Range("A9:A20")
On Error Resume Next
Ret = Application.WorksheetFunction.VLookup(cell, _
Worksheets("db").Range("A2:H14"), 5, 0)
Cur = Application.WorksheetFunction.VLookup(cell, _
Range("A9:G20"), 4, 0)
On Error GoTo 0
If Ret <> Cur Then
Ret = Cur
End If
Next
End Sub
答案 0 :(得分:0)
由于使用Ret = Cur
,您只更新Ret
中的varialbe值,而不更新工作表值。使用WorksheetFunction.Match method而不是.VLookup
获取行号并比较单元格值。
此外,您不需要查找Cur
值,因为您已经在Cell
中找到了该值,并且可以从那里.Offset
来
尝试以下操作:
Option Explicit
Public Sub valueUpdater()
Dim RetRange As Range
Set RetRange = Worksheets("db").Range("A2:A14") 'for match you need only the first column where you want to lookup
Dim RetRow As Double
Dim Cell As Range
For Each Cell In Range("A9:A20") 'TODO: specify a sheet for the range!
RetRow = 0 'initialize
On Error Resume Next
RetRow = Application.WorksheetFunction.Match(Cell.Value, RetRange, 0)
On Error GoTo 0
If RetRow <> 0 Then
If RetRange(RetRow, 5).Value <> Cell.Offset(ColumnOffset:=3).Value Then
RetRange(RetRow, 5).Value = Cell.Offset(ColumnOffset:=3).Value
End If
End If
Next Cell
End Sub