Excel单元格作为用户输入和公式

时间:2018-04-25 03:07:17

标签: excel excel-vba runtime-error vba

如果用户没有输入任何值,我试图将单元格E23作为用户输入并作为公式单元格。例如:如果用户在单元格E23中输入值,则考虑该值。如果用户未输入任何值,则从单元格B23复制值。下面是我试过的vba代码。

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$E$23" And Target.Value = "" Then
     Target.Formula = "=B23"
End If

代码正常工作,直到我通过下拉组合框中的选择更改单元格B23中的值。当我将组合框中的选项从选项1更改为选项2时,新值将在单元格B23中更新,必须将其复制到E23中。但它给了我一个运行时错误' 13'类型不匹配。

感谢任何帮助。谢谢

1 个答案:

答案 0 :(得分:0)

这里的问题是这一行

Target.Formula = "=B23"

更改目标单元格,并触发更改目标单元格的Worksheet_Change事件,并触发Worksheet_Change事件......依此类推。

因此,您需要在更改目标单元格之前禁用事件(并在之后重新启用它们)。

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$E$23" And Target.Value = vbNullString Then
        Application.EnableEvents = False
            Target.Formula = "=B23"
        Application.EnableEvents = True
    End If
End Sub

选择多个单元格时也适用的替代方法:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("E23")) Is Nothing Then
        Application.EnableEvents = False
        If Range("E23").Value = vbNullString Then
            Range("E23").Formula = "=B23"
        Else
            Range("E23").Value = Range("E23").Value - Range("E17").Value
        End If
        Application.EnableEvents = True
    End If
End Sub