Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на Basic / VBA


Хостинг Портала RusFAQ.ru:
MosHoster.ru - Профессиональный хостинг на Windows 2008

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

Чемпионы рейтинга экспертов в этой рассылке

Megaloman
Статус: Практикант
Рейтинг: 30
∙ повысить рейтинг >>
Архипов Александр Леонидович
Статус: Практикант
Рейтинг: 20
∙ повысить рейтинг >>
Шичко Игорь
Статус: Практикант
Рейтинг: 20
∙ повысить рейтинг >>

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Basic/VBA

Выпуск № 861
от 15.02.2009, 03:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 278, Экспертов: 21
В номере:Вопросов: 1, Ответов: 2

Нам важно Ваше мнение об этой рассылке.
Оценить этот выпуск рассылки >>

Вопрос № 160014: Уважаемые эксперты, как известно нельзя сохранить файл, если в его имени имеются следующие знаки /:*?<>|]*". Вопрос в том как записать условие если в переменной которую я буду использовать как имя для сохранения файла имеется один из этих...


Вопрос № 160.014
Уважаемые эксперты, как известно нельзя сохранить файл, если в его имени имеются следующие знаки /:*?<>|]*". Вопрос в том как записать условие если в переменной которую я буду использовать как имя для сохранения файла имеется один из этих знаков то ....
Как при помощи ВБА выделить в документе несколько закладок, несколько мест когда известно начало и конец этих мест, как это мы делаем без ВБА при нажатии клавиши Контрол в Ворде.
Заранее спасибо!
Отправлен: 09.02.2009, 15:42
Вопрос задал: Ципихович Эндрю (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: 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, "&qu ot;"", Correct)
End Function

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

CorrectName = ReLegal(NameOfFile, "_")
или
NameOfFile = ReLegal(NameOfFile, "_")
---------
Нет времени на медленные танцы
Ответ отправил: Megaloman (статус: Практикант)
Ответ отправлен: 09.02.2009, 18:20

Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 243262 на номер 1151 (Россия) | Еще номера >>
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!


    Отвечает: HookEst
    Здравствуйте, Ципихович Эндрю!
    по первому вопросу:
    во-первых символы "[" и "]" - вполне допустимы:
    http://ru.wikipedia.org/wiki/Имя_файла
    © Цитата:

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

    во вторых, часто достаточно использовать Like:
    Код:

    If FileName Like "*[/:*?""<>|]*" Then
    MsgBox "Invalid filename!"
    Exit Sub
    End If


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

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

    Успехов.
    Ответ отправил: HookEst (статус: Специалист)
    Ответ отправлен: 10.02.2009, 03:36

    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 243301 на номер 1151 (Россия) | Еще номера >>
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!


    Вы имеете возможность оценить этот выпуск рассылки.
    Нам очень важно Ваше мнение!
    Оценить этот выпуск рассылки >>

    Отправить вопрос экспертам этой рассылки

    Приложение (если необходимо):

    * Код программы, выдержки из закона и т.п. дополнение к вопросу.
    Эта информация будет отображена в аналогичном окне как есть.

    Обратите внимание!
    Вопрос будет отправлен всем экспертам данной рассылки!

    Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
    экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


    Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
    Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров >>

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.


    © 2001-2009, Портал RusFAQ.ru, Россия, Москва.
    Авторское право: ООО "Мастер-Эксперт Про"
    Техподдержка портала, тел.: +7 (926) 535-23-31
    Хостинг: "Московский хостер"
    Поддержка: "Московский дизайнер"
    Авторские права | Реклама на портале

    ∙ Версия системы: 5.13 от 01.12.2008

    Яндекс Rambler's Top100
    RusFAQ.ru | MosHoster.ru | MosDesigner.ru
    RusIRC.ru | Kalashnikoff.ru | RadioLeader.ru

    В избранное