我写了一个代码将文本分成两部分。值由字母,特殊符号和数字组成。我检查了每一行,但函数不起作用,excel返回“该函数无效”,请告诉我我的错误在哪里?
Option Explicit
Option Base 1
Function Split(s As String) As Variant
Dim firstquote As String, secondquote As String
Dim P(2) As Variant
firstquote = InStr(1, s, "'")
secondquote = InStr(firstquote + 1, s, "'")
P(1) = Trim(InStr(1, s, "="))
P(2) = Mid(s, firstquote + 1, secondquote - firstquote - 1)
Split = P
End Function
答案 0 :(得分:1)
请牢记以上两点:
1)拆分是一个现有函数,因此请为函数命名不同;
2)您需要测试是否存在两个“'”
另外,有些人不赞成不必要地使用Option Base 1。
以下内容虽然并不理想(我认为您可能只使用现有的Split函数,并且需要更好的命名)确实向您展示了现有的Split函数的运行情况,以及使用类型化函数处理Strings(例如, Mid $)。我相信这些效率更高。如果您有2个以上的'
,您将只返回前两个部分。
根据@MathieuGuindon(感谢)-声明静态数组的下限和上限值也是一个好习惯。
这里有一个小小的重写:
Option Explicit
Public Sub test()
Dim tests(), i As Long
tests = Array("ng", "ng'ng2'ng2")
For i = LBound(tests) To UBound(tests)
If IsError(myCustomSplit(tests(i))) Then
Debug.Print "Not enough ' present"
Else
Debug.Print myCustomSplit(tests(i))(1)
End If
Next i
End Sub
Public Function myCustomSplit(ByVal s As String) As Variant
Dim firstquote As String, secondquote As String
Dim P(0 To 1) As Variant
If UBound(Split(s, "'")) >= 2 Then
firstquote = InStr(1, s, "'")
secondquote = InStr(firstquote + 1, s, "'")
P(0) = Trim$(InStr(1, s, "="))
P(1) = Mid$(s, firstquote + 1, secondquote - firstquote - 1)
myCustomSplit = P
Else
myCustomSplit = CVErr(xlErrNA)
End If
End Function
随着评论的消失,我将解释这里给出的其他有用评论。感谢所有人:
@ComIntern:如果您使用的是静态声明的数组,则可能也不应该使用LBound
或UBound
。将它们与常量绑定,然后改用它们。类似于Const TOP_ELEMENT As Long = 1
,然后是Dim foo(0 To TOP_ELEMENT) As String
和For idx = 0 To TOP_ELEMENT
。有关可读性的更多信息,但速度稍快。无需调用函数即可确定什么是已知常量。
@JohnnyL:为确保您的数组始终具有第0个下限,请使用VBA.Array而不是Array。即使您拥有Option Base 1
,数组的下限仍将为0。