2017-04-07 103 views
0

我正在考虑一个单元格值(有时是“flores”,有时候是“de las flores”),但由于有10000多条记录,所以我无法真正了解这个值。以字符串的最后一个字,变量未声明?

我想要做的只是采取“弗洛雷斯”(最后一句话,如果只有一个,那么,那一个)。我曾尝试使用拆分,然后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

请问你能改说你的问题吗?目前还不清楚,至少对我? – sktneer

+0

使用'Option Explicit'来告诉你关于错别字的荣誉。下一步,修复错别字。 'ary'不是'arr'。哪来'arr'反正声明? –

回答

1

我相信你是过于复杂也无妨。除非我读错了(很可能),你可以简化这个有很多。

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 
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 

这些声明宣布outStrasciinum隐式Variant

Dim outStr [As String], asciinum [As String], vocal As String, i As Long 

的参数都隐式传递ByRefByVal就足够了),和他们”重新所有隐Variant还有:

mystring, text, indexCurp, index 

VS

ByVal mystring As String, ByVal text As String, ByVal indexCurp As Long, ByVal index As Long 

而且这些函数调用返回一个Variant,这意味着如果outStr一个隐含的皈依到Stringasciinum都是字符串:

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