如何设置依赖于特定单元格值的单元格值

时间:2017-07-12 12:51:25

标签: excel vba

我正在尝试通过检查特定单元格的值并使用值设置多个列来自动化Excel工作表。

例如,如果A1单元格为“2”,那么我希望B2:D54中的所有单元格都是等于0的值。我有一个代码,但看起来它是错误的。

Private Sub Worksheet_Change(ByVal Target As Range)
    //this selects the cell C3 and checks if the value if is 0619
    If Range("C3")="0619"
        Dim example As Range
        Set example =Range("E3:AE53")
        example.Value = 0
    End if
End Sub

修改 - 添加了Then,但仍无效。

Private Sub Worksheet_Change(ByVal Target As Range)
    //this selects the cell C3 and checks if the value if is 0619
    If Range("C3")="0619" Then
        Dim example As Range
        Set example =Range("E3:AE53")
        example.Value = 0
    End if
End Sub

2 个答案:

答案 0 :(得分:1)

  • 您在Then

  • 的行中缺少If
  • VBA中的评论是以'开始的,而不是//,因此无法正确解析。

  • If Range("C3")="0619"请记住,Excel会从数字中删除前导零。如果要将值格式化为文本,则只有前导零。

  • 编辑:If Range("C3").Value优于If Range("C3")

Private Sub Worksheet_Change(ByVal Target As Range)
   'this selects the cell C3 and checks if the value if is 0619
    If Range("C3").Value = "0619" Then
        Dim example As Range
        Set example = Range("E3:AE53")
        example.Value = 0

    End If
'
    Range("A1").Select
End Sub

答案 1 :(得分:0)

  • 仅在更改C3时执行工作。
  • 如果C3是格式化为0000(前导零)的数字,则使用If Range("C3").Text ="0619" Then
  • 如评论中所述,当您更改单元格中的值时,禁用事件或您的例程将尝试在其自身上运行。
  • 事件驱动的子程序应该有错误控制

代码:

Private Sub Worksheet_Change(ByVal Target As Range)
    if not intersect(target, range("C3")) is nothing then
        on error goto safe_exit
        application.enableevents = false
        select case range("C3").text
            case "0619"
                Range("E3:AE53") = 0
            case else
                'do nothing
        end select
    End if
safe_exit:
    application.enableevents = true
End Sub

我已将标准检查更改为Select Case语句,以便更容易适应其他条件。