Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 我的用户定义函数正确吗?如何在Excel中使用它?_Vba_Excel - Fatal编程技术网

Vba 我的用户定义函数正确吗?如何在Excel中使用它?

Vba 我的用户定义函数正确吗?如何在Excel中使用它?,vba,excel,Vba,Excel,此VBA代码用于确定一年是否为闰年(结果为布尔值)。 代码如下: Function ESTAnneeBixxstile(iAnne As Integer) As Boolean '////////////////////////////////////////////////////////////// ' Cette fonction détermine si une année est bissextile ' Elle retourne True (vrai ou -1) si l'ann

此VBA代码用于确定一年是否为闰年(结果为布尔值)。 代码如下:

Function ESTAnneeBixxstile(iAnne As Integer) As Boolean
'//////////////////////////////////////////////////////////////
' Cette fonction détermine si une année est bissextile
' Elle retourne True (vrai ou -1) si l'année compote 366 jours,
' False (faux ou 0) sinon

Dime bReponse As Boolean
bReponse = False

If iAnnee Mod 4 = 0 Then
'///////////////////////////////////////////////////////
' Les années divisibles par 4 sont bissextiles
'///////////////////////////////////////////////////////
bReponse = True

If iAnnee Mod 100 = 0 Then
'//////////////////////////////////////////////////////
' Les années divisibles par 100 ne sont pas bissextiles.
'//////////////////////////////////////////////////////

bReponse = False

    If iAnnee Mod 400 = 0 Then
    '///////////////////////////////////////////////////////
    ' Mais les années divisibles par 400 sont bissextiles
    '///////////////////////////////////////////////////////

    bReponse = True

    End If

End If

End If
ESTAnneeBissextile = bReponse

End Function
问题:

  • 根据VBA当前语法(Office 2013),我的代码是否正确?编译器说有语法错误

  • 如何在Excel电子表格中以公式形式运行VBA代码


  • 例如:
    =estannebissextile(“单元名称”)

    您确实有语法错误。将
    Dime-bReponse更改为Boolean
    Dim-bReponse为Boolean
    ,您就可以开始了。一旦您这样做了,您将能够完全按照(2)中指定的方式调用它,但在引用单元格时请不要使用引号。

    您确实有语法错误。将
    Dime-bReponse更改为Boolean
    Dim-bReponse为Boolean
    ,您就可以开始了。完成此操作后,您将能够完全按照(2)中指定的方式调用它,但在引用单元格时请不要使用引号。

    您提供的示例中存在一些问题

    • “一角硬币”应该是“暗淡的”(正如上面艾林斯马修所提到的)
    • 返回值列为“EstanneBissextile”,但函数名的拼写不同,为“EstanneBixxStile”。这每次都会导致错误的结果
    • 您的变量输入称为“iAnne”,但您在代码中使用的变量是“iAnnee”。让sue使用相同的名称,否则结果将不准确
    • 通过在代码顶部添加单词选项Explicit,您可以发现一些命名问题:
    • 代码中的逻辑错误。如果一年可以是MOD 400,那么它应该是真的,但是在你的代码中,你只能检查它是否通过了前两个条件。确保在末尾将该检查作为自己的if语句分开,或者使用我下面提供的示例
    修复这些应该使您的功能正常工作。正如评论中所建议的,可以说最好使用:

    Function leapCheck(year As Long) As Boolean
    
    leapCheck = IsDate("2/29/" & year)
    
    End Function
    
    如果您想列出逻辑,另一个有趣的方法是:

    Function isLeapYear(year As Long) As Boolean
    
    If year Mod 400 = 0 Or year Mod 4 = 0 And year Mod 100 <> 0 Then
        isLeapYear = True
    Else
        isLeapYear = False
    End If
    
    End Function
    

    在您提供的示例中,您有一些问题

    • “一角硬币”应该是“暗淡的”(正如上面艾林斯马修所提到的)
    • 返回值列为“EstanneBissextile”,但函数名的拼写不同,为“EstanneBixxStile”。这每次都会导致错误的结果
    • 您的变量输入称为“iAnne”,但您在代码中使用的变量是“iAnnee”。让sue使用相同的名称,否则结果将不准确
    • 通过在代码顶部添加单词选项Explicit,您可以发现一些命名问题:
    • 代码中的逻辑错误。如果一年可以是MOD 400,那么它应该是真的,但是在你的代码中,你只能检查它是否通过了前两个条件。确保在末尾将该检查作为自己的if语句分开,或者使用我下面提供的示例
    修复这些应该使您的功能正常工作。正如评论中所建议的,可以说最好使用:

    Function leapCheck(year As Long) As Boolean
    
    leapCheck = IsDate("2/29/" & year)
    
    End Function
    
    如果您想列出逻辑,另一个有趣的方法是:

    Function isLeapYear(year As Long) As Boolean
    
    If year Mod 400 = 0 Or year Mod 4 = 0 And year Mod 100 <> 0 Then
        isLeapYear = True
    Else
        isLeapYear = False
    End If
    
    End Function
    

    备选方案
    =ISERROR(日期值(“2月29日-”&A1))
    @AlexK。简单、清晰、已调试、免维护。。。我喜欢。可选
    =ISERROR(DATEVALUE(“2月29日-”&A1))
    @AlexK。简单、清晰、已调试、免维护。。。我喜欢。哈!可以说这是一个典型的法语错误——在每件事的末尾添加一个
    e
    :-)哈!可以说这是一个典型的法语错误——在所有内容的末尾添加一个
    e
    :)