Написал небольшой код добивающий значения в ячейках до шаблонных значений, т.е. необходимая длина 10 символов.
Код |
---|
For Each d In rng
lAlen = Len(d.Cells)
If lAlen = 9 Then
Selection.NumberFormat = "@" 'преобразование формата ячейки, чтобы не удалялся ноль в начале
sA = CStr(d.Cells)
sB = "0" & sA
d.Cells = sB
ElseIf lAlen = 0 Then
ElseIf lAlen < 9 Then
lClen = 10 - lAlen
For i = 1 To lClen
sA = CStr(d.Cells)
sB = sA & "0"
d.Cells = sB
Next i
ElseIf lAlen > 9 Then
End If
Next d |
Всё работает исправно, решил несколько улучшить, и допилить проверку наличия "лишних" символов в ячейках (буквы, знаки пунктуации и т.д.) проверка работает, но когда решил вывести из под цикла часть кода основного назначения( убрать цикл For Each d In rng чтобы убрать лишние действия и оставить нетронутыми ячейки с "лишними" символами) этот кусок кода работать перестал. Моя ошибка в написании кода или какие то особенности работы этих функций?
Код |
---|
Sub СК()
'
' Макрос3 Макрос
'
'
Dim sA, sB As String, i, lAlen, lClen, lCtr As Long, d, vChk As Variant, reIND As Object, bCheck As Boolean, rng As Range
Set reIND = CreateObject("VBScript.RegExp")
Set rng = Selection.Cells 'загоняем выделенные ячейки дипазон
' устанавливаем свойства объекта RegExp
reIND.Global = True ' если Global = True, то поиск ведётся во всей строке, если False, то только до первого совпадения
reIND.IgnoreCase = False ' игнорировать регистр символов при поиске
reIND.Pattern = "[^0-9]" ' шаблон для поиска
lCtr = 0
For Each vChk In rng
bCheck = reIND.Test(vChk) 'проверка наличия/отсутствия текста в диапазоне
If bCheck = True Then
lCtr = lCtr + 1 'счетчик текстовых ячеек
ElseIf bCheck = False Then
lCtr = lCtr
'For Each d In rng
lAlen = Len(vChk)
If lAlen = 9 Then
Selection.NumberFormat = "@" 'преобразование формата ячейки, чтобы не удалялся ноль в начале
sA = CStr(vChk)
sB = "0" & sA
vChk = sB
ElseIf lAlen = 0 Then
ElseIf lAlen < 9 Then
lClen = 10 - lAlen
For i = 1 To lClen
sA = CStr(vChk)
sB = sA & "0"
vChk = sB
Next i
ElseIf lAlen > 9 Then
End If
'Next d
End If
Next vChk
If lCtr > 0 Then
MsgBox "В выделенном диапазоне имеются нечисловые значения - " & lCtr & "шт."
ElseIf lCtr = 0 Then
MsgBox "Готово"
End If
End Sub
|