首页 > 解决方案 > VBA中的单元格修改功能

问题描述

我正在 VBA 中迈出第一步,我正在尝试创建一个函数,如果满足 IF 语句的某些条件,我可以将单元格的值更改为“FALSE”值。

这就是我到目前为止所拥有的

Function active_users(cad_desde As Date, cad_fin As Date, last_log As Date, creacion As Date, per_desde As Date, per_fin As Date, download As Date, bloq As Integer)

Dim result As String
result = "False"

If bloq = 0 Or bloq = 128 Then
    If cad_fin < per_desde And last_log < per_desde Then
        Range("P3").Value = "False"
    ElseIf cad_fin >= per_desde And cad_fin <= download And download <= per_fin And last_log < per_desde Then
        Range("P3").Value = "False"
    End If
End If

End Function

当我执行该函数时,我得到一个“#VALUE!” 如果我进行错误检查,它会告诉我公式中使用的值类型之一不正确,但应该注意的是,只有在我添加行“范围(”P3“)时才会发生这种情况。Value = False “”。否则,该函数将被执行,尽管显然在单元格中除了“0”之外没有给出任何结果。

谢谢!

标签: excelvba

解决方案


当我们需要从中获取值时使用A Function,如果没有要检索的值,那么可能更好地使用 a Subroutine

我将您更改Function为返回一个布尔值,False如果条件满足。我正在Range("P3")更新Sub调用Function.

所以它看起来像这样......

Option Explicit
Sub Change_Cell_To_False()

Dim result As String
result = active_users("4/1/2019", "4/1/2019", "4/15/2019", "4/1/2019", " 4/20/2019", "4/20/2019", "4/21/2019", 0)

If result = False Then
ActiveSheet.Range("P3") = "False"
End If

End Sub

Private Function active_users(ByVal cad_desde As Date, ByVal cad_fin As Date, ByVal last_log As Date, ByVal creacion As Date, ByVal per_desde As Date, ByVal per_fin As Date, ByVal download As Date, ByValbloq As Integer) As Boolean

If bloq = 0 Or bloq = 128 Then
    If cad_fin < per_desde And last_log < per_desde Then
        active_users = False
    ElseIf cad_fin >= per_desde And cad_fin <= download And download <= per_fin And last_log < per_desde Then
        active_users = False
    Else
        active_users = True
    End If
End If

End Function


推荐阅读