根据条目将值更新到数据库;在宏上运行

时间:2019-07-19 09:41:11

标签: excel vba

我有一个工作表,其中根据所选项目,价格从数据库中出现,该价格已在工作表“ 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

1 个答案:

答案 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