对于我的项目,我正在建立一个质量保证计划;检查一张纸的数据与另一张纸的数据。这里的问题是从数据库中提取其中一个工作表,因此格式和所有内容的位置都不同,然后在我将要检查的文件中。另一个警告是,该程序必须跨多个工作簿。
我对此问题的第一次尝试是确保两张表中的数据的排序方式相似。这使得所有数据按照最低可能的匹配标准在两侧按字母顺序排序。然后,我依次创建一个带有基本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语句的条件。
谢谢,
答案 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