2014-11-30 7 views
0

У меня есть странная проблема с функцией LEN. Мой ввод - это строка «......», для которой LEN возвращает длину 2. Я не знаю, почему это происходит. Какие-либо предложения? код я использую:Функция Len возвращает неверные результаты

Function replaceCharWith(ByVal str As String, ByVal chToReplace As String, ByVal ch As String) As String 
For i = 1 To Len(str) 

    If Mid(str, i, 1) = chToReplace Then 
     replaceCharWith = replaceCharWith & ch 
    Else 
     replaceCharWith = replaceCharWith & Mid(str, i, 1) 
    End If 
Next 
End Function 

Sub dotsToSlashes() 
    Dim c As Range 
    For Each c In Selection 
     c = replaceCharWith(c, ".", "/") 
    Next 
End Sub 

Спасибо.

+5

Я подозреваю, что ваша строка не "......", но "......". Это 2 раза HORIZONTAL ELLIPSIS Unicode x2026. Excel автоматически заменяет ... если параметры автозамены по умолчанию. –

+1

Любопытно, почему вы не используете функцию [Заменить] (http://msdn.microsoft.com/en-us/library/office/gg264409 (v = office.15) .aspx)? –

+0

@CoolBlue, потому что только теперь я знаю об этом .. Спасибо! –

ответ

6

Я подозреваю, что ваша строка не "......", но "......". Это 2 раза HORIZONTAL ELLIPSIS Unicode x2026. Excel автоматически заменяет ... если параметры автозамены по умолчанию.

Смотрите пример:

Sub HorizontalEllipsesTest() 

s = "......" 
MsgBox Len(s) 

s = ChrW(8230) & ChrW(8230) 'x2026 = 8230 
MsgBox s 
MsgBox Len(s) 

End Sub 

Где параметры автозамены? https://support.office.com/en-us/article/Where-are-the-AutoCorrect-options-cb889db0-07f8-400a-b6ef-4192cc05cbc3

Смежные вопросы