【问题标题】:Excel VBA: User defined function based on checkbox input not recalculatingExcel VBA:基于复选框输入的用户定义函数未重新计算
【发布时间】:2015-05-28 15:44:10
【问题描述】:

在 Excel 2013 中,我定义了一个自定义函数 CUSTOM_EQUITY,它根据是否选中复选框(表单控件)返回 "EXTERNAL""INTERNAL"。当我按下回车时它工作正常,但是当我点击复选框时它不会自动更新,选中或取消选中它。

使用 Ctrl+Alt+F9 强制更新效果很好,但是当复选框时我无法使单元格自动更新被点击。如您所见,我已经尝试过使用Application.Volatile

Function CUSTOM_EQUITY()

    Application.Volatile
    Application.Calculation = xlCalculationAutomatic

    Dim taxesExt As Boolean
    taxesExt = ActiveSheet.Shapes("TAXES_EXT").ControlFormat.Value = 1

    If taxesExt Then
        CUSTOM_EQUITY = "EXTERNAL"
    Else
        CUSTOM_EQUITY = "INTERNAL"
    End If

End Function

当复选框值发生变化时,如何让我的函数自动重新计算?

【问题讨论】:

  • 你有没有考虑在CheckBoxChange事件上调用函数的重新计算?
  • 我建议将复选框链接到单元格,并使用简单的 IF 公式而不是 VBA UDF。
  • @MatteoNNZ 谢谢,ActiveSheet.Calculate Change 事件成功了。
  • @user3964075 我需要使用 UDF,提供的代码只是一个简化的示例。

标签: vba excel checkbox excel-2013


【解决方案1】:

我不确定您说的是UserForm 中的CheckBox,但如果您只是将此行放在CheckBox_Change() 中:

Sheets("Your_Sheet_Name").Calculate

如果是Excel CheckBox

  1. 添加链接单元格(这里是 C1)
  2. 将其放在工作表模块中

这段代码:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)    
    If Application.Intersect(Target, Range("C1")) Is Nothing Then
      'Nothing
    Else
       Sheets("Your_Sheet_Name").Calculate
    End If    
End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-08
    • 2015-08-12
    • 2011-09-22
    • 1970-01-01
    相关资源
    最近更新 更多