用于创建公式的 Excel 宏工作正常。复制和粘贴公式的宏离开#Values
Posted
技术标签:
【中文标题】用于创建公式的 Excel 宏工作正常。复制和粘贴公式的宏离开#Values【英文标题】:Excel Macro to create formula works fine. Macro to copy and paste formula leaves #Values 【发布时间】:2017-07-27 16:57:01 【问题描述】:我编写了一个用户定义函数来获取单元格的颜色。
Function GetFillColor(Rng As Range) As Long
GetFillColor = Rng.Interior.ColorIndex
End Function
函数有效。
我编写了一个宏来在电子表格上使用该函数:
Sub Macro5()
Macro5 Macro
Windows("KobeCurrent2.xlsm").Activate
Sheets("Direct").Select
Range("AP2").Select
ActiveCell.FormulaR1C1 = "=NUMBERVALUE(GetFillColor(RC[-26]))"
Range("AP2").Select
Dim LR As Long
LR = ActiveSheet.UsedRange.Rows.Count
Range("AP2").Select
Range("AP2").AutoFill Destination:=Range("AP2:AP" & LR)
End Sub
Cell AP2 显示单元格颜色的值。 AP 列中的其余单元格显示#Value! 直到我双击#Value!,然后它变为单元格颜色的值。
我尝试将单元格乘以 1,使用数据文本到列,但是当通过 excel 宏执行时,我仍然得到 #Value!而且还是需要双击才能解决。
任何帮助将不胜感激。谢谢。
【问题讨论】:
您必须小心依赖于 Range 的非值方面的 UDF。特别是,在这里,您可能只需要强制重新计算即可获得更新。使用CTRL+ALT+F9
最容易做到这一点,它将更新所有单元格。通常,Excel VBA 交互不支持在发生非值更改时更新引用。因此,更新单元格颜色,公式不会为依赖单元格触发,因为 Excel 不会将其视为更改。要处理此问题,您通常将 UDF 标记为 Application.Volatile
作为 UDF 的第一行。
【参考方案1】:
我测试了您的脚本,但出现#NAME 错误,因此我对其进行了修改以将值放在 AP2 等中,而不是公式中。这可能不是您想要的,但很容易修改。希望这有助于或让您朝着正确的方向前进。
Sub Macro5() ' ' Macro5 Macro '
Dim LR As Long
LR = ActiveSheet.UsedRange.Rows.Count
Windows("KobeCurrent2.xlsm").Activate
For x = 2 To LR Step 1
Range("AP" & x).Value = Range("A" & x).Interior.ColorIndex
Next x
' I left these in here for reference.
'ActiveCell.FormulaR1C1 = "=GetFillColor(RC[-15])"
'Range("P2").AutoFill Destination:=Range("P2:P" & LR)
End Sub
【讨论】:
这当然解决了将ColorIndex
放入单元格的问题,但没有解释为什么UDF 最初会失败。
@Byron Wall 你当然是正确的,它失败的原因超出了我的理解范围,所以我只是把这个问题放在一边,寻找一个“可行的”解决方案。我相信大多数优秀的程序员都会称之为“黑客”。被指控有罪:)以上是关于用于创建公式的 Excel 宏工作正常。复制和粘贴公式的宏离开#Values的主要内容,如果未能解决你的问题,请参考以下文章