Перейти из форума на сайт.


Система IP-видеонаблюдения "Линия". Скачать бесплатную демо-версию для 16 камер. НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Word VBA

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39

Открыть новую тему     Написать ответ в эту тему

exMIB



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
1. Как сделать чтобы курсор сам перескакивал с одного текстового поля ввода на следующее, когда будет введен определенный символ и плюс к этому пройдет 3 секунды ?
2. Выполнение операторов после нажатия кнопки ENTER, когда курсор находится в текстовом поле для ввода
3. Проверка текстового поля ввода по 3 признакам и если что-то не совпадает, хотя бы одно, то показать сообщение, стереть поле и оставить в нем курсор для повторного ввода

Всего записей: 2921 | Зарегистр. 27-09-2001 | Отправлено: 03:05 01-06-2005
exMIB



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Неужели никто не знает VBA ?

Всего записей: 2921 | Зарегистр. 27-09-2001 | Отправлено: 18:48 01-06-2005
dneprcomp



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
exMIB
А в чем собственно проблемы?
Есть такие события, как TextBox1_Change, KeyPress, KeyDown,KeyUp, LostFocus, Validate. На эти события можно проверять KeyAscii, KeyCode или весь техт. Есть Timer. Или можно использовать какие-нибудь паразитные циклы для задержки. Есть TextBox2.SetFocus

Всего записей: 3906 | Зарегистр. 31-03-2002 | Отправлено: 20:38 01-06-2005 | Исправлено: dneprcomp, 20:43 01-06-2005
exMIB



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dneprcomp
Я знаю, что есть такие события.
Но мозги медленно в VBA соображают, практики мало, приходиться рыскать много в инете, а надо это сделать срочно.

Всего записей: 2921 | Зарегистр. 27-09-2001 | Отправлено: 02:24 02-06-2005
dneprcomp



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
exMIB
Кстати, способность менять фокус програмно зависит от версии офиса. 97-й похоже не может.

Всего записей: 3906 | Зарегистр. 31-03-2002 | Отправлено: 03:22 02-06-2005
exMIB



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Хорошо, никто конкретно сказать ничего оне хочет.
 
1. Значит как сделать:
 
набираем в поле:
 
1234d56789d
 
чтобы был счетчик букв "d", когда счетчик насчитает две буквы "d" должен включиться таймер на 3 секунды и через 3 секунды курсор должен перескочить на нижнее текстовое поле, чтобы можно было продолжать в нем ввод.

Всего записей: 2921 | Зарегистр. 27-09-2001 | Отправлено: 04:05 02-06-2005
Sleepwalker



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
exMIB
ты бы для начала уточнил, что у тебя в документе: форма ввода или отдельный элемент типа TextBox. Для первых событий очень мало (в 2к - только на вход и выход), может в старших версия больше, а вот для второго можно нарисовать  что угодно.
 
dneprcomp, ты говоришь о TextBox, а я так понял, что автор говорит о формах.
или я неправильно понял?

Всего записей: 1954 | Зарегистр. 19-10-2002 | Отправлено: 15:00 02-06-2005
exMIB



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Я сделал форму.
На форме два поля для ввода текста.
В первом верхнем поле вводится первый набор символов, далее переход на нижнее поле в котором вводится другой набор символом.
Далее при нажатии на ENTER, должна производиться обработка запрограммированных операторов (эту часть я запрограммировал уже).
Работает стабильно.
Теперь вот эти красивости и нюансы надо как-то сделать, но не могу сообразить как и как лучше их сделать. Опыта мало совсем в VBA.
Ни одной кнопки на форме нет.
 
Добавлено:
Sleepwalker
А про какой TextBox ты говоришь ?
Это тот который прямо на лист документа вставлен ?

Всего записей: 2921 | Зарегистр. 27-09-2001 | Отправлено: 18:20 02-06-2005 | Исправлено: exMIB, 18:22 02-06-2005
Sleepwalker



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
exMIB
лан, по порядку: ты поля для ввода текста создавал как: через панель "формы" или "элементы управления"? в первом случае форму надо "лочить", и становяться активны только поля ввода, во втором случае компонент живет своей жизнью.  
У тебя какой случай? если первый - ничего не выйдет, если второй, то у TextBox есть соответствующие события, которые тебе нужны.

Всего записей: 1954 | Зарегистр. 19-10-2002 | Отправлено: 19:03 02-06-2005
exMIB



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ALT + F11
А там создал форму и на неё поместил поля ввода.
Ну как обычно, в Delphi к примеру.
Или в VBA всё необычно  

Всего записей: 2921 | Зарегистр. 27-09-2001 | Отправлено: 19:25 02-06-2005
Sleepwalker



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
exMIB
ну ты мозги запарил
тогда все как пареная репа: у полей ввода есть обработчики на клавиши и изменение... вот на них и вешай проверки...

Всего записей: 1954 | Зарегистр. 19-10-2002 | Отправлено: 00:59 03-06-2005
exMIB



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Sleepwalker

Цитата:
ну ты мозги запарил  
тогда все как пареная репа: у полей ввода есть обработчики на клавиши и изменение... вот на них и вешай проверки...

Болтованя и ещё раз одна болтовня.
У меня 3 маленьких пункта в самом первом посте.
Кто процедурки для них напишит буду должен

Всего записей: 2921 | Зарегистр. 27-09-2001 | Отправлено: 01:22 03-06-2005
Sleepwalker



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
exMIB
С паузой думай сам. Можешь обычным циклом сделать задержку (кстати, МС предлагает это как один из вариантов)
 

Код:
 
Public Sub SelectNext(ByVal cur As Integer)
Dim ct As TextBox
Set ct = Controls(cur + 1)
If Right(ActiveControl.Value, 1) = "d" Then
  Controls(cur + 1).SetFocus
  ct.SelStart = 0
  ct.SelLength = Len(ct.Value)
End If
 
End Sub
 
Private Sub TextBox1_Change()
  SelectNext (0)
End Sub
Public Sub CheckValue(ByVal valu As String)
  'обработка значения
End Sub
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
  If KeyCode = 13 Then CheckValue (ActiveControl.Value)
End Sub
 
 
Private Sub TextBox2_Change()
  SelectNext (1)
End Sub
 
Private Sub TextBox2_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
  If KeyCode = 13 Then CheckValue (ActiveControl.Value)
End Sub
 
Private Sub TextBox3_Change()
    SelectNext (-1)
End Sub
 
 
Private Sub TextBox3_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
  If KeyCode = 13 Then CheckValue (ActiveControl.Value)
End Sub
 
 

 
Есть вопросы - задавай, только без гонора.

Всего записей: 1954 | Зарегистр. 19-10-2002 | Отправлено: 15:16 03-06-2005
exMIB



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Sleepwalker
А можешь комментарии добавить к коду ?
 
И ещё если здесь ты имеешь ввиду символ, после которого должен происходить переход на другую строку, то дело в том что символ свегда один, но он два раза повторяется.
Как сделать чтобы только после второго был произведен переход ?
Желательно сразу в коде.
 

Цитата:
If Right(ActiveControl.Value, 1) = "d" Then  


Всего записей: 2921 | Зарегистр. 27-09-2001 | Отправлено: 03:43 15-07-2005
vasya123abcde

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А где пропал в 2003 оффисе CommonDialog?

Всего записей: 4 | Зарегистр. 04-07-2005 | Отправлено: 09:37 15-07-2005
Maurus



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А кто знает, как получить текущее количество страниц в документе и как получить кол-во сделанных замен в функции заменить все, там еще окошко выводится "сделано ХХХ замен!"
Буду очень признателен!

Всего записей: 61 | Зарегистр. 23-12-2004 | Отправлено: 16:20 01-08-2005
zeleniy



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
А кто знает, как получить текущее количество страниц в документе  

 
Dim appword as object
Set AppWord = CreateObject("Word.Application")
 
If AppWord.Version Like "11*" Then  
   NumOfPages = AppWord.activedocument.ActiveWindow.Panes(1).Pages.Count
  Else
   NumOfPages = AppWord.activedocument.BuiltinDocumentProperties("Number Of Pages").Value
  End If

Всего записей: 776 | Зарегистр. 07-12-2001 | Отправлено: 16:46 01-08-2005
NeoKray

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ищу описание объектной модели Word'a. по объектам Selection, Application, Range.
А именно как выполнить одновременно операцию форматирования, например изменения шрифта над первыми строчками десятью таблиц.

Всего записей: 22 | Зарегистр. 05-03-2005 | Отправлено: 17:27 01-08-2005
Sleepwalker



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
exMIB
о блин, как давно это было.
насчет второго символа - сделай счетчик и считай значения ввода. Или, как вариант, после нажатия любой кнопки пересчитывать буквы и переходить, если две нужных. Тогда точно с количеством не промахнешься.  
А комментарии. Что конкретно прокомментировать?

----------
...или я ничего не понимаю в этой жизни... или понимаю слишком хорошо...

Всего записей: 1954 | Зарегистр. 19-10-2002 | Отправлено: 18:10 01-08-2005
KChernov

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Мне надо в макросе взять текст из буфера обмена, обработать и положить обратно.
Но тот вариант, который я написал, почему-то ругается при попытке положить текст обратно в буфер (последняя строчка примера).
Вот:
Dim MyData As DataObject ' это в общем модуле
Sub ConvertText()
    Dim splitString As Variant
    Dim joinString As String
    Set MyData = New DataObject
    MyData.GetFromClipboard
    splitString = Split(MyData.GetText(1), " ")
    splitString(1) = splitString(1) & " "
    For i = LBound(splitString) + 1 To UBound(splitString)
        splitString(i) = Mid(splitString(i), 1, 1) & "."
    Next
    joinString = Join(splitString)
    MyData.SetText joinString
    MyData.PutInClipboard
End Sub
 
Но вот если в предпоследнюю строчку процедуры вместо переменной поставить константу - все работает?!
Мб я как-то неправильно формирую строку для буфера? (msgbox отрабатывает без проблем)?
 
Или мб это вообще как-то иначе нужно делать?..

Всего записей: 2297 | Зарегистр. 20-04-2004 | Отправлено: 12:38 09-08-2005 | Исправлено: KChernov, 16:09 09-08-2005
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Word VBA

Имя:
Пароль:
Сообщение

Для вставки имени, кликните на нем.

Опции сообщенияДобавить свою подпись
Подписаться на получение ответов по e-mail
Добавить тему в личные закладки
Разрешить смайлики?
Запретить коды


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.Board
© Ru.Board 2000-2018

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru