Да, мой косяк. Класс Double использует для отделения дробной части запятую, а не точку - нужна поправка. Вот это будет работать 100%:
Sub A_Округление_дробей()
' vbadevelope@yandex.ru for wordexpert.ru
Dim oDoc As Document
Dim sChar As String
Set oDoc = ActiveDocument
Select Case MsgBox("Да - запятая" & vbCr & "Нет - точка" & vbCr & "Отмена - выход", vbYesNoCancel)
Case vbYes: sChar = ","
Case vbNo: sChar = "."
Case vbCancel: Exit Sub
End Select
Selection.HomeKey Unit:=wdStory
With Selection.Find
.ClearFormatting
.Replacement.ClearFormatting
.Wrap = wdFindContinue
.Forward = True
.MatchWildcards = True
.Text = "[0-9]{1;}" & sChar & "[0-9]{3}"
Do While .Execute = True
If IsNumeric(Selection.Range.Characters.Last.Next) = False Then
sText = fRoundedOff(Selection.Range.Text)
Selection.Range.Text = sText
End If
Loop
End With
End Sub
Function fRoundedOff(ByVal sValue As String)
Dim iLast As Integer
Dim iNumber As Double
Dim iDif As Double
Dim bCheck As Boolean
If InStr(sValue, ".") >= 1 Then
sValue = Replace(sValue, ".", ",")
bCheck = True
Else
bCheck = False
End If
iNumber = CDbl(sValue)
iLast = CInt(Right(sValue, 1))
If iLast >= 5 Then
iDif = CDbl("0,00" & iLast)
iNumber = iNumber - iDif + 0.01
Else
iNumber = CDbl(Left(sValue, Len(sValue) - 1))
End If
If bCheck = True Then
fRoundedOff = Replace(iNumber, ",", ".")
Else
fRoundedOff = iNumber
End If
End Function
Спасибо можно перевести на WebMoney-кошелёк R378231864568 или на Яндекс-деньги 410015093172871