0

下面的代码有一些问题。我在启动第二个 for 循环时遇到应用程序定义或对象定义的错误。第二个循环范围的格式似乎是导致问题的原因。删除 Sheets() 对象可以消除错误,但是脚本会从错误的工作表中读取,并且不会返回任何数据。

这段代码的目标是遍历一个垂直的数据数组,然后如果找到与下拉列表中的选择匹配,它会遍历一个水平的数据数组,如果找到“是”值则返回颜色变化.

If Not Intersect(Target, Range("countryProductCell")) Is Nothing Then
    lastcolumn = ActiveSheet.UsedRange.Column - 1 + ActiveSheet.UsedRange.Columns.Count
    Dim cellRow As Integer
    cellRow = Target.Row
    Dim defaultCellColumn As Integer
    defaultCellColumn = 4
    i = 5
    j = 1
    k = 1
    If Not Cells(cellRow, defaultCellColumn).Value = "(Select Title)" Then
        For Each countryCell In Range(Cells(cellRow, defaultCellColumn + 1), Cells(cellRow, lastcolumn))
            If countryCell.Value = "Use Default" Then
                countryCell.Interior.ColorIndex = 3
            End If
        Next
        For Each nameCell In Sheets("Active Product Catalog").Range("ProductNames")
            If nameCell.Value = Cells(cellRow, defaultCellColumn).Value Then
                'Error on the line below!
                For Each purchaseableCell In Sheets("Active Product Catalog").Range(Cells(nameCell.Row, 10), Cells(nameCell.Row, 27))
                    If purchaseableCell.Value = "Yes" Then
                        'If Purchaseable, Change Color
                        Sheets("Home Template").Cells(cellRow, defaultCellColumn + j).Interior.ColorIndex = 35
                    End If
                    j = j + 1
                Next
            End If
            k = k + 1
        Next
    ElseIf Cells(cellRow, defaultCellColumn).Value = "(Select Title)" Then
        If Target.Value = "(Select Title)" Then
            Target.Interior.Color = Cells(Target.Row, Target.Column - 1).Interior.Color
            For Each countryCell In Range(Cells(cellRow, defaultCellColumn + 1), Cells(cellRow, lastcolumn))
                If countryCell.Value = "Use Default" Then
                    countryCell.Interior.ColorIndex = 2
                End If
                i = i + 1
            Next
        ElseIf Target.Value = "Use Default" Then
            Target.Interior.ColorIndex = 2
        ElseIf Application.VLookup(ActiveSheet.Cells(cellRow, Target.Column), Sheets("Active Product Catalog").Range("E:AK"), Target.Column, False) = "Yes" Then
            Target.Interior.ColorIndex = 35
        ElseIf Not Application.VLookup(ActiveSheet.Cells(cellRow, Target.Column), Sheets("Active Product Catalog").Range("E:AK"), Target.Column, False) = "Yes" Then
            Target.Interior.ColorIndex = 3
        End If
    End If
End If
4

1 回答 1

5

You need to qualify the Cells references in your code. The reason it is failing is that you are using two Cell references from one sheet (the active sheet) and asking VBA to define a range in another sheet (Active Product Catalog). Try something like this:

Sheets("Active Product Catalog").Range(Sheets("Active Product Catalog").Cells(nameCell.Row, 10), Sheets("Active Product Catalog").Cells(nameCell.Row, 27))

You'll probably find it a bit easier to read if you create a worksheet object or use a With statement.

于 2013-05-14T20:02:44.327 回答