Excel vba 编译错误 - 参数不可选,

标签 excel vba

我正在尝试解决这个问题,但无法解决。

我不断收到错误:“编译错误 - 参数不可选”。我正在提供参数,它们被设置为可选!

尝试将字符串和数组传递给函数,并计算传递的字符串中数组字符串的出现次数。

代码在以下行停止运行:

Public Function countTextInText(Optional text As String, Optional toCountARR As Variant) As Integer

带有“编译错误:参数不可选”消息,突出显示行中的 Val:

    For Each Val In toCountARR

完整代码:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim nameR As Range
    Dim colR As Range

    Dim TKRcnt As Integer
    Dim TKRarr() As Variant
    TKRarr = Array("TKR", "THR", "Bipolar")

    Dim ORIFcnt As Integer
    Dim ORIFarr() As Variant
    TKRarr = Array("ORIF", "Ilizarov", "PFN")


    Set nameR = Range("P2:P9")
    Set colR = Range("B2:B50,G2:G50,L2:L50")

    For Each namecell In nameR
        For Each entrycell In colR
            If entrycell.text = namecell.text Then
                TKRcnt = countTextInText(entrycell.Offset(0, 2).text, TKRarr)
                ORIFcnt = countTextInText(entrycell.Offset(0, 2).text, TKRarr)
            End If
        Next entrycell

        MsgBox (namecell.text & " TKR count: " & TKRcnt & " ORIF count: " & ORIFcnt)

    Next namecell
End Sub

Public Function countTextInText(Optional text As String, Optional toCountARR As Variant) As Integer
    Dim cnt As Integer
    Dim inStrLoc As Integer

    For Each Val In toCountARR
        inStrLoc = InStr(1, text, Val)
        While inStrLoc <> 0
            inStrLoc = InStr(inStrLoc, text, Val)
            cnt = cnt + 1
        Wend
    Next Val

    Set countTextInText = cnt
End Function

最佳答案

Val 是一个 VBA 函数,需要一个强制参数 - 因此,如果您不提供该参数,编译器会生成消息“参数不可选”争论。 (MSDN documentation of Val)

使用 VBA 函数名称作为变量名称是一个坏主意,因此我建议您不要使用 Val 作为变量名称 - 使用 myVal 或任何其他名称否则 VBA 尚未使用。

如果您确实想要使用Val(并且您确定根本不需要访问Val函数) ),如果您简单地声明它,则可以将其用作变量名,例如

Dim Val As Variant
<小时/>

您的台词也会出现问题

Set countTextInText = cnt

as countTextInText 已声明为 Integer,并且 Set 仅应在将变量设置为对某个变量的引用时使用目的。所以该行应该是

countTextInText = cnt

关于Excel vba 编译错误 - 参数不可选,,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46501521/

相关文章:

excel - 字典键中的重复项。合并字典值

python - 通过 Python 运行 Excel 宏?

vba - VBScript 或 VBA 中的 ISO 周数

sql - Excel/VBA : How to paste SQL query with proper string formatting

vba - 查找下一个仅适用于第一次迭代

excel - 如何将 Excel 中的日期转换为 ISO 8601 格式

c# - Excel 工作表选择更改事件第一次不会被触发,但第二次会起作用

excel - 如何使用excel函数: If, Mod和Floor

vba - 如何在 VBA(Excel)中使用 UTF-8 保存没有 BOM 编码的文本文件(CSV)?

excel - vba 在非连续范围内循环