MyTetra Share
Делитесь знаниями!
Замена запрещённых символов в имени файла или папки
Время создания: 31.07.2019 22:37
Раздел: !Закладки - VBA
Запись: xintrea/mytetra_db_adgaver_new/master/base/1514665323e4qqjdrxcy/text.html на raw.githubusercontent.com

Function Replace_symbols(ByVal txt As String) As String

St$ = "~!@/\#$%^&*=|`"""

For i% = 1 To Len(St$)

S$ = Mid(St$, i, 1)

' If S$ = "?" Then Stop

txt = Replace(txt, S$, "_")

Next

Replace_symbols = Replace(Replace_symbols, ChrW(&H2665), "_") 'замена знака вопроса

Replace_symbols = txt

'заменить ижние подчеркивания

Do While Replace_symbols Like "*" & "__" & "*"

Replace_symbols = Replace(Replace_symbols, "__", "_", 1, -1, vbTextCompare)

Loop

'https://www.planetaexcel.ru/forum/?PAGE_NAME=read&FID=1&TID=47811

'для поиска * или ? перед символом ставиться ~

'~* или ~?

End Function



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


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

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

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

  • 23231 просмотр
Так же в этом разделе:
 
MyTetra Share v.0.59
Яндекс индекс цитирования