我正在尝试解决这个问题,但无法解决。
我不断收到错误:“编译错误 - 参数不可选”。我正在提供参数,它们被设置为可选!
尝试将字符串和数组传递给函数,并计算传递的字符串中数组字符串的出现次数。
代码在以下行停止运行:
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/