Перейти к содержимому

Фотография

Excelпомощь, консультации...


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 914

#121
Мэс

Мэс
  • В доску свой
  • 4 926 сообщений
Наверное, не ново. Но все же:

Используйте VB-объект RegExp для проверки синтаксиса адреса электронной почты
В современных приложениях часто бывает необходимо, чтобы пользователь вводил информацию о своей компании, включая адрес электронной почты. При этом нужно быть уверенным не только в том, что такой адрес содержит знак @ и точку, но и в том, что все остальные символы представлены буквами, числами или знаками подчеркивания. На первый взгляд такая задача может показаться не очень простой, если вы будете пользоваться только стандартными VB-функциями обработки строк. К счастью, в VB существует объект RegExp, который существенно упрощает работу.
Однако прежде чем приступить к использованию этого объекта в VB, следует загрузить библиотеку VBScript 5.0 DLL.
После установки библиотеки в диалоговом окне References в VB появится строка Microsoft VBScript Regular Expressions. Добавьте эту ссылку к проекту — и можно приступать к работе. Следующий код проверяет адрес электронной почты, который вводится в текстовом поле Text1:

Листинг 1.
Dim myReg As RegExp
Private Sub Form_Load()
    Set myReg = New RegExp
    myReg.IgnoreCase = True
    myReg.Pattern = "^[\w-\.]+@\w+\.\w+$"
End Sub
Private Sub Text1_Validate(Cancel As Boolean)
    Cancel = Not myReg.Test(Text1)
End Sub

Приведенный в этом коде шаблон может принимать любое количество числовых и буквенных символов, символов подчеркивания, десятичной точки и тире перед знаком @, но только числа, буквы и символы подчеркивания до и после точки.
  • 0

#122
Dmitriy_N

Dmitriy_N
  • Гость
  • 49 сообщений
Добрый день всем, Visual1 на Ваш вопрос насчет регулярных выражений уже ответил Мэс - сам VBA не поддерживает регулярные выражения, но можно подключить библиотеку Microsoft VBScript Regular Expression. Не стоит так пренебрежительно относится к макросам, это достаточно мощный инструмент позволяющий облегчить работу пользователей.
  • 0

#123
Visual1

Visual1
  • В доску свой
  • 1 198 сообщений

Добрый день всем, Visual1 на Ваш вопрос насчет регулярных выражений уже ответил Мэс - сам VBA не поддерживает регулярные выражения, но можно подключить библиотеку Microsoft VBScript Regular Expression.

Я попробовал это сделать, и у меня получилось. Действительно, можно подключить библиотеку Microsoft VBScript Regular Expression. Но это, как я и предполагал, танцы с бубном. Попробуйте сами, затем опишите, как Вы подключали эту библиотеку, пошагово. Имейте в виду, на машине может быть установлена Windows XP, Windows Vista или Windows 7. И еще она может быть в 32-битной или 64-битной версии.

Не стоит так пренебрежительно относится к макросам, это достаточно мощный инструмент позволяющий облегчить работу пользователей.

Угу, давайте будем предлагать пользователям такие "мощные инструменты" на костылях. Чтобы для работы наших замечательных макросов на каждой пользовательской машине надо было подключать библиотеку Microsoft VBScript Regular Expression. :-/
  • 0

#124
Dmitriy_N

Dmitriy_N
  • Гость
  • 49 сообщений

Попробуйте сами, затем опишите, как Вы подключали эту библиотеку, пошагово. Имейте в виду, на машине может быть установлена Windows XP, Windows Vista или Windows 7. И еще она может быть в 32-битной или 64-битной версии.

Наверное как то вот так
Function IsAddres(TmpStr As String)
Dim RegEx As Object
Set RegEx = CreateObject("vbscript.regexp")

With RegEx
.Global = True
.IgnoreCase = True
.Pattern = "^([a-z0-9_\.\-]+)\@(([a-z0-9\-]+\.)+)([a-z]+)$"
End With
IsAddres = RegEx.Test(TmpStr)

End Function

функция для Add-in проверки электронного адреса. Врать не буду на других компьютерах пробовать нет смысла так как в конторе везде windows XP, а на сервера меня просто не пустят, а ставить там офис так это вообще запредельная фантастика - все по минимуму никаких лишних программ. Виртуалку разворачивать просто влом :)

Сообщение отредактировал Dmitriy_N: 19.07.2011, 14:59:29

  • 0

#125
Visual1

Visual1
  • В доску свой
  • 1 198 сообщений


Попробуйте сами, затем опишите, как Вы подключали эту библиотеку, пошагово. Имейте в виду, на машине может быть установлена Windows XP, Windows Vista или Windows 7. И еще она может быть в 32-битной или 64-битной версии.

Наверное как то вот так
Function IsAddres(TmpStr As String)
Dim RegEx As Object
Set RegEx = CreateObject("vbscript.regexp")

With RegEx
.Global = True
.IgnoreCase = True
.Pattern = "^([a-z0-9_\.\-]+)\@(([a-z0-9\-]+\.)+)([a-z]+)$"
End With
IsAddres = RegEx.Test(TmpStr)

End Function

Это ответ не на мой вопрос, а на другой. Это ответ на вопрос, как при написании программы на VBA пользоваться уже подключенной библиотекой регулярных выражений. А мой вопрос был, как подключить эту библиотеку? Как я уже говорил, у меня получилось это сделать, но не факт, что она будет заранее подключена (доступна) на компьютере любого другого пользователя. И опять-таки, как я уже говорил, заранее неизвестно, какая там будет ОС (WinXP/Vista/7/ и 32-bit/64-bit). Опишите пошагово Ваши действия.
  • 0

#126
Dmitriy_N

Dmitriy_N
  • Гость
  • 49 сообщений



Попробуйте сами, затем опишите, как Вы подключали эту библиотеку, пошагово. Имейте в виду, на машине может быть установлена Windows XP, Windows Vista или Windows 7. И еще она может быть в 32-битной или 64-битной версии.

Наверное как то вот так
Function IsAddres(TmpStr As String)
Dim RegEx As Object
Set RegEx = CreateObject("vbscript.regexp")

With RegEx
.Global = True
.IgnoreCase = True
.Pattern = "^([a-z0-9_\.\-]+)\@(([a-z0-9\-]+\.)+)([a-z]+)$"
End With
IsAddres = RegEx.Test(TmpStr)

End Function

Это ответ не на мой вопрос, а на другой. Это ответ на вопрос, как при написании программы на VBA пользоваться уже подключенной библиотекой регулярных выражений. А мой вопрос был, как подключить эту библиотеку? Как я уже говорил, у меня получилось это сделать, но не факт, что она будет заранее подключена (доступна) на компьютере любого другого пользователя. И опять-таки, как я уже говорил, заранее неизвестно, какая там будет ОС (WinXP/Vista/7/ и 32-bit/64-bit). Опишите пошагово Ваши действия.

я не подключал здесь никаких библиотек, я просто написал код и все.
  • 0

#127
Dmitriy_N

Dmitriy_N
  • Гость
  • 49 сообщений
да на VBA при переходе с одной версии офиса на другую есть косяк - он начинает ныть не найдена библиотека, у меня обычно это контролы ProgressBar, ну и здесь есть выход - ссылка ну а так проблем вроде бы не было

извиняюсь ошибся первый раз ссылку не ту сунул

Сообщение отредактировал Dmitriy_N: 19.07.2011, 16:41:38

  • 0

#128
Мэс

Мэс
  • В доску свой
  • 4 926 сообщений
О чем спор - не пойму. Excel - мощное решение для бизнеса, лучше ничего не придумали для работы с таблицами. Я помню еще программу SuperCalc4, по сравнению с ним MS Excel даже 1995 года выпуска = как Бентли по сравнению с ... Запорожцем. Хотя первое и второе - машины.

Проблема с подключением? Да боже ради. Ну есть у вас в офисе 10 рабочих станций. Вы 1 (один) раз подключите библиотеку, можно ручками, можно инсталляшку написать, и все. Нет проблем. Займет от силы минуту на одну машину. А потом наслаждайтесь новыми возможностями.
  • 0

#129
Мэс

Мэс
  • В доску свой
  • 4 926 сообщений
Кстати, кто тут просил сумму прописью, вот одно из 1500 решений :-)

_http://www.semeyka.kz/wp-content/uploads/excel/_in_words.zip
  • 0

#130
Visual1

Visual1
  • В доску свой
  • 1 198 сообщений

Проблема с подключением? Да боже ради. Ну есть у вас в офисе 10 рабочих станций. Вы 1 (один) раз подключите библиотеку, можно ручками, можно инсталляшку написать, и все. Нет проблем. Займет от силы минуту на одну машину. А потом наслаждайтесь новыми возможностями.

Да. Ваше решение не пойдет дальше вашего офиса. См. также ссылку, приведенную Dmitriy_N, из нее это хорошо видно.

Сообщение отредактировал Visual1: 20.07.2011, 11:30:03

  • 0

#131
DeoN

DeoN
  • Частый гость
  • 77 сообщений
Да, я сижу на работе и 200 человек-сотрудников говорят, что я гуру икселя, а тут как почитаю, я вообще чайник и мне еще учиться и учиться))
  • 0

#132
Мэс

Мэс
  • В доску свой
  • 4 926 сообщений

Да, я сижу на работе и 200 человек-сотрудников говорят, что я гуру икселя, а тут как почитаю, я вообще чайник и мне еще учиться и учиться))

Я тоже раньше думал, что гуру. А оказалось - бездна возможностей.
  • 0

#133
Dmitriy_N

Dmitriy_N
  • Гость
  • 49 сообщений
День добрый всем. А вот так можно заставить говорить Excel, следующий код просто вставляем в макрос

Set sapi = CreateObject("sapi.SpVoice")
sapi.Speak "Hello world"
  • 0

#134
Gonzo

Gonzo
  • Свой человек
  • 565 сообщений
Жаль что по-русски он (SAPI) материться он так и не научился...
Впрочем и по-английски не особо...
А то была бы очень действенная мера :dont:
  • 0

#135
Dmitriy_N

Dmitriy_N
  • Гость
  • 49 сообщений

Жаль что по-русски он (SAPI) материться он так и не научился...
Впрочем и по-английски не особо...
А то была бы очень действенная мера :dont:

это почему не умеет? еще как умеет, нужно просто установить Аленку и в свойствах объекта Voice указать нужного чтеца :), полный перечень свойств на сайте мелкомягких
  • 0

#136
Gonzo

Gonzo
  • Свой человек
  • 565 сообщений
Матерится фигово Алёнка эта... :faceoff:
Уже пробовал... и Наташку тоже :lol:

Сообщение отредактировал Gonzo: 17.08.2011, 17:47:57

  • 0

#137
DeoN

DeoN
  • Частый гость
  • 77 сообщений
Иксельщики, хочу помочь нашим кредитчикам, создаю в икселе автоматизированную форму заявки на кредит, один момент остался, как задать условие, чтобы некоторые области при определенных значениях ключевых ячеек сворачивались или разворачивались?
  • 0

#138
Dmitriy_N

Dmitriy_N
  • Гость
  • 49 сообщений

Иксельщики, хочу помочь нашим кредитчикам, создаю в икселе автоматизированную форму заявки на кредит, один момент остался, как задать условие, чтобы некоторые области при определенных значениях ключевых ячеек сворачивались или разворачивались?

День добрый, конкретнее опишите задачу :). Как вариант могу предложить использовать обработчик событий Worksheet_Change, единственное условие проверяемые ячейки не должны бить пустыми иначе зациклица и чтобы избежать этого придется вставить строчку Application.EnableEvents = False. (хотя если честно избежать зацикливания можно несколькими путями :))
В редакторе ВБА в VBA Project то что с лева выбираем Microsoft Excel Objects далее выбираем лист на котором будем проверять далее выбираем Worksheet выбираем событие Change

Private Sub Worksheet_Change(ByVal Target As Range)
If Worksheets(1).Cells(1, 1) = "q" Then ' пишем условие
Worksheets(1).Cells(1, 2) = "2" ' Пишем что делать, в примере если на листе 1 в ячейки А1 поставить q ексель в ячейки В1 поставит 2 и скроет 3 строку
' так написал только для наглядности
ActiveSheet.Rows(3).Hidden = True ' Rows(х).Hidden = True скрыть строку х
End If
End Sub

Сообщение отредактировал Dmitriy_N: 15.09.2011, 10:30:26

  • 0

#139
Алдар Хосе

Алдар Хосе
  • В доску свой
  • 3 029 сообщений
Дмитрий, Вы VBA где научились?
  • 0

#140
Dmitriy_N

Dmitriy_N
  • Гость
  • 49 сообщений

Дмитрий, Вы VBA где научились?

День добрый всем, учился по книгам, лет 5 назад встала задача очень быстро срок 2 суток, создать для диспетчеров некое подобие программы наглядное, простое и чтобы печатало накладные в 2х экземплярах, считала суммы по накладной и общую сумму заказа за день все это было реализовано на екселе + макросы ВБА, диспетчер заколачивал данные в ексельку и нажимал кнопочку, компутер распечатывал накладную. Кстати эта бодяга на екселе позволила сократить работу диспетчера с с полутора - двух часов (прием заявки, подсчет, заполнение накладных) до 20 минут причем диспетчер особо не напрягался. Минусом этой хрени являлось то что данные за прошлый день не сохранялись как в БД, приходилось архивировать рабочую книгу екселя, и нельзя было получить аналитику по работе фирмы за месяц (прибыль, какой товар лучше расходится и т.д.). Вот оттуда и пошло мое знакомство с ВБА. это сейчас я понимаю что для сбора данных можно было использовать Аксес и тогда бы получилось весьма интересное приложение способное не только печатать накладные но и анализировать продажи, подсчитывать прибыль и определять кто лучше работает и кого следует поощрить премией :).
  • 0


Количество пользователей, читающих эту тему: 0

пользователей: 0, неизвестных прохожих: 0, скрытых пользователей: 0

Размещение рекламы на сайте     Предложения о сотрудничестве     Служба поддержки пользователей

© 2011-2022 vse.kz. При любом использовании материалов Форума ссылка на vse.kz обязательна.