【问题标题】:Excel VBA - VLookup when cell color is set [duplicate]Excel VBA - 设置单元格颜色时的VLookup [重复]
【发布时间】:2022-01-17 05:32:21
【问题描述】:

我在这里创建了一个“颜色函数”,目的是在当前单元格背景颜色设置为 vbRed 或 rgb(255,0,0) 时运行 VLookup。现在,VLookup 正在从我的工作表中查找 SKU 编号,该编号在当前单元格左侧偏移 8 列,并查看我的第二张工作表“订单指南”范围 A:AD 以提取相应的数据。

目前它只返回#NAME?即使我可以手动验证两个 SKU 都在 适当的位置。我现在的函数写成:

Function ColorFunction(Rge As Range) As String

Dim Sheet As Worksheet
Dim SKUColumn As Range
Dim MyRange as Range

Set Sheet = ActiveWorkbook.Sheets("Order Guide")
Set SKUColumn = Rge.Offset(0, -8)
Set MyRange = Sheet.Range("A:AD")

If Application.ThisCell.Interior.Color = vbRed Then ColorFunction = 
Application.ThisWorkbook.VLookup(SKUColumn, MyRange, 30, False)

End Function

Module Location

不完全确定我在这里缺少什么......

【问题讨论】:

  • 你把这个函数放在哪里了。它是在公共模块中还是在工作表模块中。应该在前面。
  • 正如在对您的now deleted question 的评论中提到的那样。
  • 函数在一个公共模块@ScottCraner
  • @BigBen 这不是应该存储函数的地方吗?
  • 看起来不错,接下来检查stackoverflow.com/questions/18830181/…中的任何答案

标签: excel vba vlookup


【解决方案1】:

工作簿没有VLookup-方法。

任意使用

ColorFunction = Application.Vlookup(SKUColumn, MyRange, 30, False)

如果 VLookup 找不到该值,这将返回常见的 #N/A。

或使用

ColorFunction = "(not found)"
On Error Resume Next
ColorFunction = WorksheetFunction.VLookup(SKUColumn, MyRange, 30, False)
On Error Goto 0

WorksheetFunction 将引发运行时错误。如果您不处理该错误,如果未找到该值,您将在单元格中收到 #VALUE-error。在我的示例中,我改为返回 "(not found)"

更新叹息,没有阅读已删除的问题,我想我们不应该这样做)
如果 Excel 找不到 VBA 函数,则会出现 #Name-错误。可能是由于

  • 函数不公开
  • 函数不在常规模块中
  • 模块不在当前工作簿或引用的工作簿中
  • 模块名称和函数名称相同

(如果有人知道其他原因,请随时补充......)

【讨论】:

  • 当然 OP 在previous version of the question 中正确。虽然这并不能解释 #NAME? 结果。
  • 对,我在上一篇文章中按照@BigBen 的建议尝试了这个。与现在类似,它仍然会抛出 #NAME?结果。
  • @cgwoz 您使用的确切公式是什么:=ColorFunction(...)?你有什么论据?
  • 我刚刚尝试了您的第二个解决方案 Thomas,它似乎有效。 @BigBen 我一直在尝试的确切公式是 =ColorFunction(J11)。我不太明白为什么它会抛出#NAME?在此之前的结果...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-05
  • 2020-10-17
  • 2013-06-04
  • 2018-06-15
  • 2019-03-20
相关资源
最近更新 更多