【问题标题】:Is it possible in VBA to insert the result of a formula that is targeting and running on only the cells selected by the user?是否可以在 VBA 中插入仅针对用户选择的单元格并在其上运行的公式的结果?
【发布时间】:2021-03-25 19:12:48
【问题描述】:

我一直无法让它工作。我的意图是有一个我可以调用的宏,它将在用户运行它时仅从选定的单元格中清除字符“:”的最后一个实例之前的所有数据。我有一个类似版本的宏,它可以成功地修剪选定的单元格,但是我尝试运行的这个新公式会在公式行上不断调试运行时错误并且不明白为什么。

我试图在所有选定单元格上运行的公式的原始版本是 "=IF(ISERR(FIND(":",A6)),IF(LEN(A6)=0,"", A6),RIGHT(A6,LEN(A6)-FIND("",SUBSTITUTE(A6,":","",LEN(A6)-LEN(SUBSTITUTE(A6,":", “”))))))”,我发现它是有用的。但是,我将 A6 单元格引用替换为我认为是下面示例中选择的特定单元格的变量引用。

'Sub Sample_Evaluate()

Dim rng As Range
Dim Area As Range

'Weed out any formulas from selection
  If Selection.Cells.Count = 1 Then
    Set rng = Selection
  Else
    Set rng = Selection.SpecialCells(xlCellTypeConstants)
  End If

'Trim and Clean cell values
  For Each Area In rng.Areas
Area.Value = _
        Evaluate("=IF(ISERR(FIND("":""," & Area.Address & ")),IF(LEN(" & Area.Address & ")=0,""""," & Area.Address & "),RIGHT(" & Area.Address & ",LEN(" & Area.Address & ")-FIND(""*"",SUBSTITUTE(" & Area.Address & ","":"",""*"",LEN(" & Area.Address & ")-LEN(SUBSTITUTE(" & Area.Address & ","":"",""""))))))")
  
  Next area
  
End Sub

任何帮助将不胜感激。我个人不想这样做,但它是我的前任留下的代码,所以让它工作比让它以“正确”的方式工作更重要。我预计将来必须为不同的公式解决这个问题。是否有一种方法或功能可以使用我不知道的可变公式来做到这一点?

【问题讨论】:

    标签: excel vba excel-formula


    【解决方案1】:

    如果您使用 VBA 执行此操作,则不需要单元格公式,因为您关注的是单元格值。下面这个例子展示了一个简单的方法来实现同样的事情:

    Option Explicit
    
    Sub test()
        Dim cellValue As String
        cellValue = "abcd.efg.1234.987.xyz"
        
        Dim lastDot As Long
        lastDot = InStrRev(cellValue, ".")
        cellValue = Right$(cellValue, Len(cellValue) - lastDot)
    End Sub
    

    cellValue 现在是“xyz”

    【讨论】:

    • 这个。继续使用带有大量长公式的 Evaluate 就像在喷血的动脉伤口上一个接一个地添加创可贴一样。
    猜你喜欢
    • 1970-01-01
    • 2021-07-06
    • 2016-05-14
    • 1970-01-01
    • 2015-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多