根据特定值

时间:2017-01-18 12:27:29

标签: excel vba excel-vba

我对VBA很新,我遇到了这个棘手的问题。 我正在使用一张表格,我输入单元格并按下按钮以创建新行或对概览表中的该行进行更改。

最后一个,我似乎无法工作。 我希望宏检查概述表中是否存在ID。

实施例

我有一张ID为5000且名字为#34; Luke" 还有一个记录wtith ID 5001和名称" Cage"

我将ID为5000的记录更改为" Xander"在我的表格中

我按下按钮"更改记录"并且宏搜索ID为5000的记录并将名称更改为" Xander"

希望你们能帮助或指出我正确的方向。

我找到了一种方法,首先删除然后再添加它。

    Dim lRow As Long
Dim iCntr As Long
Dim Ticketnumber As Long

Sheets("Form").Select

Ticketnumber = Range("B1")

Sheets("Tickets").Select

lRow = Cells(Rows.Count, 1).End(xlUp).Row
For iCntr = lRow To 1 Step -1
If Cells(iCntr, 1) = Ticketnumber Then
Rows(iCntr).Delete
End If
Next

Sheets("Form").Select

    Range("B1:B14").Select
    Selection.Copy
    Sheets("Tickets").Select
    Worksheets("Tickets").Cells(Rows.Count, "A").End(xlUp).Offset(1, 0).PasteSpecial Operation:=xlNone, SkipBlanks:= _
    False, Transpose:=True

    ActiveWorkbook.Worksheets("Tickets").AutoFilter.Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Tickets").AutoFilter.Sort.SortFields.Add Key:= _
        Range("A2"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    With ActiveWorkbook.Worksheets("Tickets").AutoFilter.Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With

Worksheets("Form").Range("B1:B14").Clear

1 个答案:

答案 0 :(得分:0)

Sub Tickets()

Dim i As Variant
Dim LR As Long
Dim IDN As Variant
Dim IDV As Variant
Dim IDNR As Integer
Dim IDNC As Integer

LR = Cells(Sheets("Overview").Rows.Count, 1).End(xlUp).Row
IDNR = ActiveCell.Row
IDNC = ActiveCell.Column

IDN = Cells(IDNR, IDNC).Value 'ID Name, you should highlight this cell when starting work
IDV = Cells(IDNR, IDNC - 1).Value 'ID Value, e.g. your ID 5001, if it is the adjacent cell left

If IDN = Application.WorksheetFunction.Index(Sheets("Overview").Range(Cells(1, 2), Cells(LR, 2)), Application.WorksheetFunction.Match(IDV, Sheets("Overview").Range(Cells(1, 1), Cells(LR, 1)))).Value Then
    MsgBox "This matches!"

    Else:
        For i = 1 To LR
            If IDV = Sheets("Overview").Cells(i, 1).Value Then
                Sheets("Overview").Cells(i, 2).Value = IDN
                Else:
                End If
                Next i

    End If

End Sub

我使用了一些特定的工作表名称,因此请注意("概述"因为您在叙述中谈到了这一点),而ActiveCell应该是具有您希望验证的名称的单元格(单元格(1,1)读取" ID 5001"单元格(1,2)读取" Cage")。

这将检查概述列表是否" ID 5001" exists(匹配您现有的ID(与IDN相邻)并确定Name(" Cage")是否在相邻的单元格中。如果不存在,它将用您首选的ID名称替换Cage。