我正在考虑一个单元格值(有时是" flores"有时候" de las flores")但是我真的不知道这个值,因为有超过10000条记录。
我想要做的只是" flores" (最后一句话,如果只有一个,那么,那个)。香港专业教育学院曾尝试使用拆分,然后使用ubound,但我得到了一个"未声明"错误。但我试图让它隐含。
Function CheckFirstLetter(mystring, text, indexCurp, index) As Boolean
Dim outStr, asciinum, vocal As String, i As Long
----> arr = Split(mystring, " ")
----> vocal = arr(UBound(ary))
outStr = LCase(Mid(text, indexCurp, 1))
asciinum = LCase(Mid(mystring, 1, 1))
Cells(index, "M") = vocal
Cells(index, "O") = asciinum
If (asciinum = outStr) Then
CheckFirstLetter = True
Else: CheckFirstLetter = False
End If
End Function
谢谢!
答案 0 :(得分:1)
我认为无论如何你都过于复杂了。除非我读错了(非常可能),否则你可以简化这个A LOT。
Function CheckFirstLetter(mystring, text, indexCurp, index) As Boolean
Dim vocal() As String
vocal = Split(mystring, " ")
Cells(index, "M") = vocal(UBound(vocal))
Cells(index, "O") = LCase(Mid(mystring, 1, 1))
CheckFirstLetter = Cells(index, "O") = LCase(Mid(text, indexCurp, 1))
End Function
答案 1 :(得分:0)
“未声明的变量”是编译时错误,表示您已指定Option Explicit
- 这是优秀的事情,不会将其删除!
但我试图让它隐含。
没有理由想要这样做。
Option Explicit
需要变量声明。所以你必须声明你使用的所有变量。
如果您想为变量隐式类型,请在没有As
子句的情况下声明它:
Dim arr ' implicit: As Variant
我怀疑ary
在这里是一个错字:
vocal = arr(UBound(ary))
如果这意味着将项目置于arr
的上限,那么ary
应为arr
。
这是多余的:
If (asciinum = outStr) Then
CheckFirstLetter = True
Else: CheckFirstLetter = False
End If
可以写成一个简单的作业:
CheckFirstLetter = (asciinum = outStr)
您的代码已经非常隐含了。这两条指令隐含地引用了ActiveSheet
:
Cells(index, "M") = vocal
Cells(index, "O") = asciinum
这些声明将outStr
和asciinum
声明为隐式Variant
:
Dim outStr [As String], asciinum [As String], vocal As String, i As Long
参数全部隐式传递ByRef
(ByVal
就足够了),并且它们都是隐式的Variant
:
mystring, text, indexCurp, index
VS
ByVal mystring As String, ByVal text As String, ByVal indexCurp As Long, ByVal index As Long
这些函数调用返回Variant
,这意味着如果String
和outStr
是字符串,则隐式转换为asciinum
:
outStr = LCase(Mid(text, indexCurp, 1))
asciinum = LCase(Mid(mystring, 1, 1))
这些将返回String
而不是:
outStr = LCase$(Mid$(text, indexCurp, 1))
asciinum = LCase$(Mid$(mystring, 1, 1))
看,你的代码已经绰绰有余了。除此之外不需要隐式变量!荣誉:
Boolean
PascalCase
命名您的功能