首页 > 解决方案 > InStr 在某些情况下找不到点

问题描述

我的字符串由前导点和数字组成(例如“..2”或“..4”。我想删除所有前导点并将字符串转换为长变量。所以我写了一个在字符串中查找前导点并删除它们的函数。由于某种原因,该函数适用于像“..2”这样的字符串,但不适用于“...3”。该InStr函数不会在“中找到“.”。 ..3"。字符串是从工作表中的列中读出的。它们没有以任何奇怪的方式格式化,我尝试在新工作表中手动输入它们,而不对默认格式设置进行任何更改,结果相同。

所以我尝试了几件事。我相信一定有一些涉及字符编码的错误,但我不知道如何解决这个问题。我尝试使用 InStr 使用递归函数来删除点,然后尝试使用“。”进行拆分函数。作为测试我的假设的分隔符。Split有同样的问题,适用于“..2”,但不适用于“...3”。当我调试打印我读出的字符串时,“...3”的格式似乎与“..2”或“.1”不同。我不知道为什么。 在这里您可以看到格式的差异

Sub Gruppieren()
'read out strings first
'then try to delete the dots
Dim strArr() As String
Dim lngArr() As Long
Dim lLastRow As Long
Dim i As Long

lLastRow = getFirstEmptyRow("A", Tabelle1.Index) 
ReDim strArr(1 To lLastRow)
ReDim lngArr(1 To lLastRow)

For i = 1 To UBound(strArr)
 strArr(i) = Worksheets(1).Cells(i, 1).Value
 Debug.Print strArr(i)
 strArr(i) = clearLeadingDots(strArr(i))
 'strArr(i) = splitMeIfYouCan(strArr(i))
 If IsNumeric(strArr(i)) = True Then
  lngArr(i) = CLng((strArr(i)))
  Debug.Print lngArr(i)
 End If
Next i
End Sub

'功能:

Function clearLeadingDots(myText As String) As String
 Dim i As Long

 i = InStr(myText, ".")
  If i <> 0 Then
    myText = Right(CStr(myText), Len(myText) - i)
    clearLeadingDots = clearLeadingDots(CStr(myText))
  Else
    clearLeadingDots = CStr(myText)
    Exit Function
  End If
End Function

Function splitMeIfYouCan(myText As String) As String
 Dim myArr() As String
 Dim i As Long
 myArr = Split(myText, ".")

 splitMeIfYouCan = myArr(UBound(myArr))
End Function

编辑:答案是,三个点自动转换为省略号,搜索和消除Chr(133)完成了这项工作。

标签: excelvba

解决方案


推荐阅读