InStr在某些情况下不会找到点

时间:2019-03-29 07:22:37

标签: excel vba

我的字符串由前导点和数字组成(例如“ ..2”或“ .... 4”。),我想删除所有前导点并将字符串转换为长变量。 因此,我编写了一个函数,该函数可以找到字符串中的前导点并将其删除。由于某些原因,该函数适用于字符串“ ..2”,但不适用于“ ... 3”。 InStr函数将找不到“。”在“ ... 3”中。 字符串是从工作表中的列中读出的。它们不是以任何奇怪的方式格式化的,我已经尝试过在新工作表中手动键入它们,而无需更改默认格式设置,结果相同。

所以我尝试了几件事。我相信一定会有一些涉及字符编码的错误,但是我无法弄清楚如何解决这个问题。 我尝试使用使用InStr的递归函数删除点,然后尝试使用“。”进行拆分。作为检验我的假设的定界符。 Split有相同的问题,适用于“ ..2”,但不适用于“ ... 3”。 当我调试打印读取的字符串时,“ ... 3”的格式似乎与“ ..2”或“ .1”的格式不同。我不知道为什么。 here you can see the difference in the formatting

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)

0 个答案:

没有答案