QA计划正在努力应对不断变化的数据引用

时间:2015-01-29 19:44:51

标签: excel vba excel-vba if-statement qa

对于我的项目,我正在建立一个质量保证计划;检查一张纸的数据与另一张纸的数据。这里的问题是从数据库中提取其中一个工作表,因此格式和所有内容的位置都不同,然后在我将要检查的文件中。另一个警告是,该程序必须跨多个工作簿。

我对此问题的第一次尝试是确保两张表中的数据的排序方式相似。这使得所有数据按照最低可能的匹配标准在两侧按字母顺序排序。然后,我依次创建一个带有基本if语句的新工作表,然后检查相应行中的数据。

这里的问题在于缺少数据。拖动时我的当前代码可以准确地识别相应表中的数据是否正确,但不会考虑是否缺少整行。它将返回该行的失败,然后返回它下面的每一行,这对于我想要实现的目标是不可接受的。此外,我觉得好像该程序过度硬编码,这让我对未来的问题保持开放,如果我将此程序发送给较低级别​​的员工来运行QA,他们将无法更改程序中的引用以获得正确的答案。 / p>

所以基本上我要问的是你如何对此进行编码,以便如果错误产生错误,则不会破坏QA的其余部分并使其失效但反而认识到该行已经消失,则返回失败为该行和相应的数据继续前进。

这是我的代码非常宏记录重,因为我是一个非常新的VBAer。

'''''''This section returns the heading of the row I am taking the data from''''
    Sheets("Ratings QA").Select
ActiveCell.FormulaR1C1 = "=Sheet1!RC[8]"
''''''''This section returns title headings of each row to ensure they match with title headings from the master'''''''
Range("A2").Select
ActiveCell.FormulaR1C1 = _
    "=IF('Detailed Ratings'!R[15]C[8]=Sheet1!RC[8],Sheet1!RC[8],""Fail"")"
Range("A2").Select
Selection.AutoFill Destination:=Range("A2:A400"), Type:=xlFillDefault
Range("B1").FormulaR1C1 = "=Sheet1!RC[8]"
Range("B1").Select
Selection.AutoFill Destination:=Range("B1:BI1"), Type:=xlFillDefault
Range("B2").Select
ActiveCell.FormulaR1C1 = _
    "=IF('Detailed Ratings'!R[15]C[8]=Sheet1!RC[8],""Pass"",""Fail"")"
Range("B2").Select
Selection.AutoFill Destination:=Range("B2:B400"), Type:=xlFillDefault
Range("B2:B400").Select
Selection.AutoFill Destination:=Range("B2:BI400"), Type:=xlFillDefault
Range("B2:BI400").Select
   Cells.Select
Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, _
    Formula1:="=""Pass"""
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
With Selection.FormatConditions(1).Font
    .Bold = True
End With
With Selection.FormatConditions(1).Interior
    .PatternColorIndex = xlAutomatic
    .Color = 5287936
End With
Selection.FormatConditions(1).StopIfTrue = False
Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, _
    Formula1:="=""Fail"""
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
With Selection.FormatConditions(1).Font
    .Bold = True
End With
With Selection.FormatConditions(1).Interior
    .PatternColorIndex = xlAutomatic
    .Color = 255
End With
Selection.FormatConditions(1).StopIfTrue = False
    With ActiveWindow
    .SplitColumn = 0
    .SplitRow = 1
End With

我认为可能有用的一个提议的解决方案,但我不确定如何编写代码,如果在标题标题应该在的第一行中返回失败,则将包括占位符行。因此,不是只是放入失败,它将填充该行失败,然后跳过该范围的单元格,然后下一行将继续沿着该范围,好像什么也没发生。它会返回错误并且不会破坏QA的任何想法,因为我可以将其添加为if语句的条件。

谢谢,

1 个答案:

答案 0 :(得分:0)

下面根据D列中“Plant Store”的匹配值返回相应列中的值。我尝试创建尽可能具有描述性的变量名称,以帮助您了解发生的情况,但请发布以下内容必要时提出问题。

Sub SearchForRowHeadings()
    Dim rngHeadings As Range
    Dim rngFound As Range
    Dim strInfoInCellE5 As String
    Dim strInfoInCellF5 As String

    Const COLUMN_TO_SEARCH As Integer = 4 ' 4 refers to the 4th column, D

    Set rngHeadings = Intersect(Sheet1.UsedRange, Sheet1.Columns(COLUMN_TO_SEARCH))
    Set rngFound = rngHeadings.Find("Plant Store")

    If rngFound Is Nothing Then
        'ENTER CODE HERE IN CASE HEADING ISN'T FOUND
    Else
        strInfoInCellE5 = rngFound.Offset(, 1).Value
        strInfoInCellF5 = rngFound.Offset(, 2).Value
        MsgBox (strInfoInCellF5)
    End If

End Sub