Родились сегодня:
SAW


Лидеры рейтинга

ID: 401284

Михаил Александров

Советник

422

Россия, Санкт-Петербург


ID: 259041

Алексеев Владимир Николаевич

Мастер-Эксперт

391

Россия, пос. Теплоозёрск, ЕАО


ID: 401888

puporev

Профессор

217

Россия, Пермский край


ID: 405338

vovaromanov.jr

1-й класс

142


ID: 400669

epimkin

Профессионал

112


ID: 242862

Hunter7007

Мастер-Эксперт

30

Россия, Омск


ID: 137394

Megaloman

Мастер-Эксперт

27

Беларусь, Гомель


8.10.2

13.10.2021

JS: 2.10.2
CSS: 4.6.0
jQuery: 3.6.0
DataForLocalStorage: 2021-10-16 14:46:03-standard


Создание программ на языке Basic.

Администратор раздела: Андреенков Владимир (Академик)

Консультация онлайн # 160014

Раздел: Basic
Автор вопроса: Ципихович Эндрю
Дата: 09.02.2009, 15:42 Консультация закрыта
Поступило ответов: 2

Уважаемые эксперты, как известно нельзя сохранить файл, если в его имени имеются следующие знаки /\:*?<>|]*". Вопрос в том как записать условие если в переменной которую я буду использовать как имя для сохранения файла имеется один из этих знаков то ....
Как при помощи ВБА выделить в документе несколько закладок, несколько мест когда известно начало и конец этих мест, как это мы делаем без ВБА при нажатии клавиши Контрол в Ворде.
Заранее спасибо!

Ответ # 243262 от Megaloman
Здравствуйте, Ципихович Эндрю! Ответ на первый вопрос:
Легче всего написать функцию:
Код
Function NoLegal(InText)
' Функция возвращает True, если в строке InText содержится хотя бы один
' один символ указанный в поиске (см. ниже)

    NoLegal = False
    NoLegal = NoLgal Or InStr(1, InText, "/", 1) <> 0
    NoLegal = NoLgal Or InStr(1, InText, "\", 1) <> 0
    NoLegal = NoLgal Or InStr(1, InText, ":", 1) <> 0
    NoLegal = NoLgal Or InStr(1, InText, "*", 1) <> 0
    NoLegal = NoLgal Or InStr(1, InText, "?", 1) <> 0
    NoLegal = NoLgal Or InStr(1, InText, "<", 1) <> 0
    NoLegal = NoLgal Or InStr(1, InText, ">", 1) <> 0
    NoLegal = NoLgal Or InStr(1, InText, "|", 1) <> 0
    NoLegal = NoLgal Or InStr(1, InText, "]", 1) <> 0
    NoLegal = NoLgal Or InStr(1, InText, """", 1) <> 0
End Function

Если имеем строковую переменную, содержащую имя файла (для примера, NameOfFile),
то в условии для анализа наличия неправильного символа можно записать:

If NoLegal(NameOfFile) Then .....

Условие будет выполняться, если в имени содержится хотя бы один "неправильный" символ.
(Кстати, с символом ] в имени файл сохраняется - не знаю, чем он Вам не понравился)
В тексте функции можете добавить (удалить) строки с необходимыми (лишними) символами.

Можно переписать функцию в ином виде, в аргументе указать "запретные" символы
Она получается более гибкой и наглядной в использовании, но чуть длиннее при вызове.
Код
Function NoLegal2(InText, SymbErr)
' Функция возвращает True, если в строке InText содержится хотя бы один
' символ из строки  SymbErr

    NSymbErr = Len(SymbErr)
    NoLegal2 = False

    For i = 1 To NSymbErr
        NoLegal2 = NoLegal2 Or InStr(1, InText, Mid(SymbErr, i, 1)) <> 0
    Next

End Function

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

If NoLegal2(NameOfFile, "/\:*?<>|]""") Then .....

Обратите внимание, в литерале " необходимо заменить на ""

Возможно удобнее написать другую функцию: перед сохранением файла обработать переменную,
содержащую имя файла, функцией ReLegal, она заменит все "неправильные" символы на заданный Вами символ,
Код
Function ReLegal(InText, Correct)
' Функция возвращает строку, полученную из исходной строки InText
' путём замены перечисленных символов на символ, определённый в аргументе Correct
    
    ReLegal = InText
    ReLegal = Replace(ReLegal, "/", Correct)
    ReLegal = Replace(ReLegal, "\", Correct)
    ReLegal = Replace(ReLegal, ":", Correct)
    ReLegal = Replace(ReLegal, "*", Correct)
    ReLegal = Replace(ReLegal, "?", Correct)
    ReLegal = Replace(ReLegal, "<", Correct)
    ReLegal = Replace(ReLegal, ">", Correct)
    ReLegal = Replace(ReLegal, "|", Correct)
    ReLegal = Replace(ReLegal, "]", Correct)
    ReLegal = Replace(ReLegal, """", Correct)
End Function

например, на подчеркивание _ :

CorrectName = ReLegal(NameOfFile, "_")
или
NameOfFile = ReLegal(NameOfFile, "_")

Megaloman

Мастер-Эксперт
09.02.2009, 18:20
Ответ # 243301 от HookEst
Здравствуйте, Ципихович Эндрю!
по первому вопросу:
во-первых символы "[" и "]" - вполне допустимы:
http://ru.wikipe...g/wiki/Имя_файла


...
В имени файла запрещено использование некоторых служебных символов: «\», «/», «:»(только в Windows - в Linux этот символ в имени разрешён), «*», «?», «"», «<», «>», «|».
...


во вторых, часто достаточно использовать Like:
Код
If FileName Like "*[\/:*?""<>|]*" Then 
    MsgBox "Invalid filename!" 
    Exit Sub
End If


по второму вопросу:
Скорее всего никак...

у доступа к "несмежному выделению" (не знаю как перевести discontiguous selections) посредством VBA есть некоторые ограничения...
http://support.m...ft.com/kb/288424

Успехов.

HookEst

Посетитель
10.02.2009, 03:36
Мини-форум консультации # 160014

q_id

Megaloman

Мастер-Эксперт

ID: 137394

1

= общий =    09.02.2009, 21:05

Дополнил ответ

=====
Нет времени на медленные танцы

Возможность оставлять сообщения в мини-форумах консультаций доступна только после входа в систему.
Воспользуйтесь кнопкой входа вверху страницы, если Вы зарегистрированы или пройдите простую процедуру регистрации на Портале.

Лучшие эксперты раздела

Gluck

8-й класс

Рейтинг: 61

Megaloman

Мастер-Эксперт

Рейтинг: 27

solowey

Академик

Рейтинг: 4

Асмик Гаряка

Советник

Рейтинг: 0

Sergey V. Gornostaev

Профессионал

Рейтинг: 0

SFResid

Мастер-Эксперт

Рейтинг: 0