VBA, MS Access MS Access в примерах

Поиск русских символов в названиях обьектов (таблиц и полей)

Начертания нескольких символов похоже, а "с"(эс) и "c" (си Eng.) - вообще на одной клавище.
Бывает ...
Лучше проверить быстренько.

Private Sub PrintAllTablesInImmediate()
' es 26.03.2019
' Поиск русских символов в названиях обьектов (таблиц и полей)
' Выводим в Immediate Window:
' Список всех таблиц (кроме системных) и их полей
' + Информация о наличии там русских символов - Asc() > 126
'--------------------------------------------------------------------------
Dim tdf As DAO.TableDef
Dim objField As DAO.Field
Dim s$, i%
    s = "-------------------------------------------" & vbCrLf
    For Each tdf In CurrentDb.TableDefs
        If (tdf.Attributes And dbSystemObject) = False Then
            s = tdf.Name
            Debug.Print "= " & s
            s = StringToANCIICodes(s)
            If s <> "" Then
                i = i + 1
                Debug.Print "=! " & s
            End If
            
            For Each objField In tdf.Fields
                s = objField.Name
                Debug.Print vbTab & "- " & s
                s = StringToANCIICodes(s)
                If s <> "" Then
                    i = i + 1
                    Debug.Print vbTab & "- " & s
                End If
            Next
            'Под полями таблицы:
            s = "-------------------------------------------"
            Debug.Print s
        End If
    Next
    s = "Всего ошибок: " & i
    Debug.Print s

    If i = 0 Then
        MsgBox s, vbInformation
    Else
        MsgBox s, vbCritical
    End If

End Sub

Private Function StringToANCIICodes(vVal As Variant) As String
' es 26.03.2019
' Обработка текста посимвольно + ANCII код каждого символа
'--------------------------------------------------------------------------
Dim i As Integer
Dim iAsc As Integer        ' ANCI код символа
Dim sMid As String * 1     ' выделенный символ
Dim siLen As Integer       ' длинна очищаемой строки
Dim strNew As String       ' Очищенная строка
    
    strNew = CStr(vVal)    ' перадаём строку локальной переменной
    siLen = Len(strNew)    ' считаем длинну строки
    For i = 1 To siLen     ' перебераем все символы строки по циклу
        sMid = Mid(strNew, i, 1)  ' получаем символ из строки
        iAsc = Asc(sMid)          ' преобразовываем полученный символ в ANCII код
        If iAsc > 126 Then
            StringToANCIICodes = "In string: " & vVal & " InPos: " & i & " = " & sMid & "(" & iAsc & ")"
            Exit For
        End If
    Next i
End Function

Назад ToTop
L.E. 05.08.2019
Рейтинг@Mail.ru