我的字符串由前导点和数字组成(例如“ ..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)
。