【问题标题】:Match a value from the table to a dropdown range将表格中的值与下拉范围匹配
【发布时间】:2018-12-11 19:31:33
【问题描述】:

我已经尝试了一段时间,但无法找出解决此问题的 for 代码。 我在 sheet1 中有一个有两列的表,在一个列中我有职位,在下一个我有可以在这些职位上工作的人。 在 sheet2 中,我有所有职位的列表,当您选择 SKU 时,应该配置的职位会突出显示,除此之外的两列是员工的下拉列表。 同一张表还有一个显示当天不工作的员工的范围。 试图实现@BruceWayne 答案代码是:

  Option Explicit
'use a constant to store the highlight color...
Const HIGHLIGHT_COLOR = 9894500 'RGB(100, 250, 150)

Sub AssignBided()

Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim cel1 As range
Dim cel2 As range
Dim line8 As range
Dim Offemp As range
Dim BidL8 As range
Dim BidL8E As range
Dim coresVal As String

Set ws1 = Worksheets("OT_Table")
Set ws2 = Worksheets("Monday")
Set line8 = ws2.range("Line8_Hilight_Mon")
Set Offemp = ws2.range("Off_Mon")
Set BidL8 = ws1.range("BidedL8")
Set BidL8E = ws1.range("BidedL8_E")

For Each cel2 In BidL8E
    For Each cel1 In line8
        If IsHighlighted(cel1) Then
            If Application.WorksheetFunction.CountIf(Offemp, cel2.Value) > 0 Then
                coresVal = Evaluate("Index(" & BidL8E.Address & "),MATCH(" & cel1.Validation & "," & BidL8.Address & ",0))")
                Debug.Print coresVal
                cel1.Offset(0, 2).Value = coresVal
            End If
        End If
    Next cel1
Next cel2
End Sub

'Is a cell highlighted? EDIT: changed the function name to IsHighlighted
Function IsHighlighted(c As range)
    IsHighlighted = (c.Interior.Color = HIGHLIGHT_COLOR)
End Function

这段代码给了我这个错误:对象不支持这个属性或方法。它突出显示evaluate 行。我是否以某种错误的方式使用它?

【问题讨论】:

  • 为什么If IsHighlighted(.L8) Then多了一个句号?另外,如果您打算在For 循环中将其用作可迭代变量,那么设置L8 有什么意义?
  • @dwirony 好吧,我想遍历 L8 范围的每个单元格,如果有任何其他方法可以实现,我很乐意实现。额外的时间是我的错误,我会纠正它。
  • 那应该是For Each cell in L8 - 还有什么是BidL8?您应该将Option Explicit 放在模块的顶部,并确保声明了所有变量。
  • @dwirony BidL8 是问题中所说的 sheet1 中的表格。该表有针对员工的位置。
  • 这可能是你认为的那样,但现在在你当前的代码中BidL8 什么都不是——你必须声明它并且Set 它是什么。

标签: excel vba


【解决方案1】:

从 cmets 来看,我认为这就是您想要做的。
(我重命名了一些变量以使它们更容易理解。另外,根据需要调整命名范围。它们可能并不都在“OT_Table”表上,我认为它们是。不清楚。)

Sub AssignBided()
Dim ws As Worksheet
Set ws = Worksheets("OT_Table")
Dim cel As Range

Dim line8 As Range
Set line8 = ws.Range("Line8_Highlight_Mon")

Dim Offemp As Range
Set Offemp = ws.Range("Scheduled_Off")

Dim BidL8 As Range
Set BidL8 = ws.Range("BidedL8_T")

Dim coresVal As String
For Each cel In line8
    ' cel.Select
    If IsHighlighted(cel) Then
        If Application.WorksheetFunction.CountIf(Offemp, cel.Value) > 0 Then
            coresVal = Evaluate("INDEX(OFFSET(" & BidL8.Address & ",,2),MATCH(" & _
                cel.Value & "," & BidL8.Address & ",0))")
            Debug.Print coresVal
            cel.Offset(0, 2).Value = coresVal
        End If
    End If
Next cel

End Sub

【讨论】:

  • 嘿,我尝试实现代码,但它给了我错误:对象不支持此属性或方法。我已经更新了问题以显示我更正的代码。感谢您的帮助!
  • 评估函数
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-11
  • 1970-01-01
  • 2018-08-03
相关资源
最近更新 更多