我有多个不同的供应商,提供广泛的产品 . 我的任务是检查供应商提供的信息,以确保它尽可能准确 .

例如,

如果product =“basketball”,那么如果长度<>宽度,则突出显示LenWid黄色 .

如果product =“football”,那么如果length <= Width,则突出显示LenWid黄色 .

由于这些纸张长达数千行且深度超过一百列,因此逐个检查每个单元格是不切实际的,并且现场检查也不可靠 . 所以我一直在努力创建一个由多个事实检查子组成的模块,我已经应用于命令按钮以根据需要激活 .

该子目的是检查产品的尺寸以确保它们是可能的 . 使用上面的例子,篮球是圆的,因此长度应该=宽度,但足球的长度比它的宽度长 . 如果这些值为false,则应突出显示所比较的维度,因为必须查看这些值 .

我对最佳方法的任何建议持开放态度,速度也很重要,因为我已经在表单上有几个预先存在的潜艇,并且不想冒风险放慢速度 .

我所拥有的打击子问题是,即使它正确地通过了运动,它实际上并没有突出显示任何东西 . 我认为这是代码的offset.interior.colorindex行的一个问题 .

我在模块中命名并声明了我的值 . (对Set使用全局Dim和Private函数)可能相关的Dim / Set如下,(这里您可以看到每个值所在的确切范围)

Dim Data as range
Dim Product as range
Dim Height as range
Dim Length as range
Dim Width as range
Dim LenWid as range
Dim WS as Workbook

Set WS = ThisWorkbook.Sheet(1)
Set Data = WS.Range("A3:EX5002")
Set Product = WS.Range("AF3:AF5002")
Set Height = WS.Range("BH3:BH5002")
Set Length = WS.Range("BI3:BI5002")
Set Width = WS.Range("BJ3:BJ5002")
Set LenWid = WS.Range(Length, Width)

这是我的sub不起作用,

Sub DimsTest()
Application.ScreenUpdating = False
On Error GoTo ErrorHandler
Call SetValues 'same as above
Call KeyOpen 'Unprotects the sheet

For Each Cell In Product
    Select Case Cell.Value
        Case "basketball", "soccer ball", "volley ball"
            If Cell.Offset(0, 30).Value <> Cell.Offset(0, 31).Value Then
                Cell.Offset(0, 30).Interior.ColorIndex = 6 And _
                Cell.Offset(0, 31).Interior.ColorIndex = 6
            End If
        Case "football"
            If Cell.Offset(0, 30).Value <= Cell.Offset(0, 31).Value Then
                Cell.Offset(0, 30).Interior.ColorIndex = 6 And _
                Cell.Offset(0, 31).Interior.ColorIndex = 6
            End If
        Case Else
            'Haven't decided on a default action
    End Select
Next Cell

   Application.ScreenUpdating = True
   Call KeyLock 'relocks the sheet
ErrorHandler:
   Call KeyLock 'relocks the sheet on error
End Sub

此外,我不能在这里使用条件格式,因为我有一个现有的子,只需点击一个按钮,根据“产品”中找到的单元格值突出显示每一行,然后按行颜色排序 . 我相信这会超过单元格的条件格式,但更重要的是,我需要将此函数附加到命令按钮,以便它可以在sort函数之前或之后运行,因此它并不总是处于活动状态 .