mail mail

Замена запрещённых символов в имени файла или папки

При попытке сохранить файл под именем, заданным пользователем, вы можете получить ошибку - если в имени файла (папки) присутствуют запрещённые символы.

Этого легко избежать, если в процессе формирования имени файла удалить из него недопустимые символы, заменив их символом подчёркивания:

Function Replace_symbols(ByVal txt As String) As String
    St$ = "~!@/\#$%^&*=|`"""
    For i% = 1 To Len(St$)
        txt = Replace(txt, Mid(St$, i, 1), "_")
    Next
    Replace_symbols = txt
End Function

Пример использования:

' формируем путь к новому файлу
Путь = ThisWorkbook.Path & "\" & Replace_symbols(sh.Name) & _
"\" & Replace_symbols(cell) & "\" & Replace_symbols(cell.Next) & ".jpg"

Ещё одна функция - полезная для вывода в прогресс-бар длинного текста (имени файла):

Function ShortText(ByVal LongText$, ByVal Lenght As Long) As String
    ' функция урезает длинную текстовую строку LongText$,
   ' оставляя в ней не более Lenght символов
   On Error Resume Next: LongText$ = Application.Trim(LongText$)
    If Len(LongText$) <= Lenght Then ShortText = LongText$: Exit Function
    arr = Split(LongText$)
    While UBound(arr) > 0
        LongText$ = Split(LongText$, , 2)(1)
        If Len(LongText$) <= Lenght - 3 Then ShortText = "..." & LongText$: Exit Function
        arr = Split(LongText$)
    Wend
    ' не удалось корректно обрезать текст (по пробелу
   ShortText = "..." & Right(LongText$, Lenght)
End Function

Sub ПримерИспользования_ShortText()
    ПолныйАдрес$ = "Москва, ЦАО, Внутригородское муниципальное образование Басманное, ул. Большая Почтовая , д.1"
    УрезанныйАдрес$ = ShortText(ПолныйАдрес$, 50)    ' обрезаем до 60 символов
   MsgBox УрезанныйАдрес$ ' выводит текст "...Басманное, ул. Большая Почтовая , д.1"
End Sub

Комментарии

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".

Решил немного доработать функцию Replace_symbols. В ней замена всегда происходит на "_", мне же потребовалось производить иную замену. Не бог весь, что - но возможно кому ни будь поможет. Вот код:
Function Replace_path(path)
StFind = "~!@/\#$%^&*=|`"""
StRepl = "___--________''"
For i% = 1 To Len(StFind)
path = Replace(path, Mid(StFind, i, 1), Mid(StRepl, i, 1))
Next
Replace_path = path
End Function

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
CAPTCHA
Подтвердите, пожалуйста, что вы - человек:
3 + 17 =
Решите эту простую математическую задачу и введите результат. Например, для 1+3, введите 4.