Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Word VBA

Автор: exMIB
Дата сообщения: 01.06.2005 02:05
1. Как сделать чтобы курсор сам перескакивал с одного текстового поля ввода на следующее, когда будет введен определенный символ и плюс к этому пройдет 3 секунды ?
2. Выполнение операторов после нажатия кнопки ENTER, когда курсор находится в текстовом поле для ввода
3. Проверка текстового поля ввода по 3 признакам и если что-то не совпадает, хотя бы одно, то показать сообщение, стереть поле и оставить в нем курсор для повторного ввода
Автор: exMIB
Дата сообщения: 01.06.2005 17:48
Неужели никто не знает VBA ?
Автор: dneprcomp
Дата сообщения: 01.06.2005 19:38
exMIB
А в чем собственно проблемы?
Есть такие события, как TextBox1_Change, KeyPress, KeyDown,KeyUp, LostFocus, Validate. На эти события можно проверять KeyAscii, KeyCode или весь техт. Есть Timer. Или можно использовать какие-нибудь паразитные циклы для задержки. Есть TextBox2.SetFocus
Автор: exMIB
Дата сообщения: 02.06.2005 01:24
dneprcomp
Я знаю, что есть такие события.
Но мозги медленно в VBA соображают, практики мало, приходиться рыскать много в инете, а надо это сделать срочно.
Автор: dneprcomp
Дата сообщения: 02.06.2005 02:22
exMIB
Кстати, способность менять фокус програмно зависит от версии офиса. 97-й похоже не может.
Автор: exMIB
Дата сообщения: 02.06.2005 03:05
Хорошо, никто конкретно сказать ничего оне хочет.

1. Значит как сделать:

набираем в поле:

1234d56789d

чтобы был счетчик букв "d", когда счетчик насчитает две буквы "d" должен включиться таймер на 3 секунды и через 3 секунды курсор должен перескочить на нижнее текстовое поле, чтобы можно было продолжать в нем ввод.
Автор: Sleepwalker
Дата сообщения: 02.06.2005 14:00
exMIB
ты бы для начала уточнил, что у тебя в документе: форма ввода или отдельный элемент типа TextBox. Для первых событий очень мало (в 2к - только на вход и выход), может в старших версия больше, а вот для второго можно нарисовать что угодно.

dneprcomp, ты говоришь о TextBox, а я так понял, что автор говорит о формах.
или я неправильно понял?
Автор: exMIB
Дата сообщения: 02.06.2005 17:20
Я сделал форму.
На форме два поля для ввода текста.
В первом верхнем поле вводится первый набор символов, далее переход на нижнее поле в котором вводится другой набор символом.
Далее при нажатии на ENTER, должна производиться обработка запрограммированных операторов (эту часть я запрограммировал уже).
Работает стабильно.
Теперь вот эти красивости и нюансы надо как-то сделать, но не могу сообразить как и как лучше их сделать. Опыта мало совсем в VBA.
Ни одной кнопки на форме нет.

Добавлено:
Sleepwalker
А про какой TextBox ты говоришь ?
Это тот который прямо на лист документа вставлен ?
Автор: Sleepwalker
Дата сообщения: 02.06.2005 18:03
exMIB
лан, по порядку: ты поля для ввода текста создавал как: через панель "формы" или "элементы управления"? в первом случае форму надо "лочить", и становяться активны только поля ввода, во втором случае компонент живет своей жизнью.
У тебя какой случай? если первый - ничего не выйдет, если второй, то у TextBox есть соответствующие события, которые тебе нужны.
Автор: exMIB
Дата сообщения: 02.06.2005 18:25
ALT + F11
А там создал форму и на неё поместил поля ввода.
Ну как обычно, в Delphi к примеру.
Или в VBA всё необычно
Автор: Sleepwalker
Дата сообщения: 02.06.2005 23:59
exMIB
ну ты мозги запарил
тогда все как пареная репа: у полей ввода есть обработчики на клавиши и изменение... вот на них и вешай проверки...
Автор: exMIB
Дата сообщения: 03.06.2005 00:22
Sleepwalker

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

Болтованя и ещё раз одна болтовня.
У меня 3 маленьких пункта в самом первом посте.
Кто процедурки для них напишит буду должен
Автор: Sleepwalker
Дата сообщения: 03.06.2005 14:16
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

Автор: exMIB
Дата сообщения: 15.07.2005 02:43
Sleepwalker
А можешь комментарии добавить к коду ?

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


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

Автор: vasya123abcde
Дата сообщения: 15.07.2005 08:37
А где пропал в 2003 оффисе CommonDialog?
Автор: Maurus
Дата сообщения: 01.08.2005 15:20
А кто знает, как получить текущее количество страниц в документе и как получить кол-во сделанных замен в функции заменить все, там еще окошко выводится "сделано ХХХ замен!"
Буду очень признателен!
Автор: zeleniy
Дата сообщения: 01.08.2005 15:46

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


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
Автор: NeoKray
Дата сообщения: 01.08.2005 16:27
Ищу описание объектной модели Word'a. по объектам Selection, Application, Range.
А именно как выполнить одновременно операцию форматирования, например изменения шрифта над первыми строчками десятью таблиц.
Автор: Sleepwalker
Дата сообщения: 01.08.2005 17:10
exMIB
о блин, как давно это было.
насчет второго символа - сделай счетчик и считай значения ввода. Или, как вариант, после нажатия любой кнопки пересчитывать буквы и переходить, если две нужных. Тогда точно с количеством не промахнешься.
А комментарии. Что конкретно прокомментировать?
Автор: KChernov
Дата сообщения: 09.08.2005 11:38
Мне надо в макросе взять текст из буфера обмена, обработать и положить обратно.
Но тот вариант, который я написал, почему-то ругается при попытке положить текст обратно в буфер (последняя строчка примера).
Вот:
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 отрабатывает без проблем)?

Или мб это вообще как-то иначе нужно делать?..
Автор: aar
Дата сообщения: 22.09.2005 07:14
Прошу помощи: http://forum.ru-board.com/topic.cgi?forum=33&bm=1&topic=5752#1
Автор: ATAS80
Дата сообщения: 26.10.2005 12:17
Можно ли в Word'е при помощи VBA сделать на панели инструментов ComboBox или ListBox
Автор: dneprcomp
Дата сообщения: 26.10.2005 19:25
ATAS80
Несколько непонятно. Что значит сделать ComboBox или ListBox и зачем?
Автор: ATAS80
Дата сообщения: 26.10.2005 22:18
dneprcomp
Ну например такую же компоненту например как выбор шрифта в Word'e или изменения размера шрифта
Автор: dneprcomp
Дата сообщения: 27.10.2005 00:06
ATAS80
Не понятно, зачем на панели инструментов. Тем более, что эти контролы на ней уже есть.
PS. Для показа панели сделай правый клик на тоолбаре и выбери 'control toolbox'

Добавлено:
А может ты хочешь сделать новый тоолбар? Тогда смотри CommandBars в хелпе.
CommandBars("Standard").Controls.Add Type:=msoControlButton, _
ID:=2522, Before:=4
Автор: orre
Дата сообщения: 20.11.2005 18:44
вопросик тут у меня маленький,может кто поможет ?
есть шаблон в Ворде 2000, .dot файл, в нём куча форм, кода и т.п. , после выполения которых, создается новый .doc -> в него копируется текст из листа в шаблоне и затем хотелось бы закрыть сам шаблон ( без сохранения изменений ),т.е. весь .dot файл, а вот "свежесозданный" .doc должен остаться открытым. Как закрыть документ, или вообще весь ворд -- это понятно, а вот как закрыть template -- не найду я у него ?
Автор: dneprcomp
Дата сообщения: 21.11.2005 06:32
orre
Если открывал template как документ, то и закрывай так же

Код: ActiveDocument.Close SaveChanges:=wdPromptToSaveChanges/wdDoNotSaveChanges/wdSaveChanges, _
OriginalFormat:=wdPromptUser
Автор: orre
Дата сообщения: 21.11.2005 08:58
dneprcomp
Цитата:
ActiveDocument.Close SaveChanges....


ага, вот тут у меня и возникает проблема. после копирования текста в новый .doc,он у меня получается активным, и у меня не как не выходит сделать активным окно приложения с шаблоном. Когда пишу
Documents("Test.dot").Activate , то получаю ошибку.
Автор: dneprcomp
Дата сообщения: 21.11.2005 19:12
orre
Попроуй через Windows объект
ActiveDocument.ActiveWindow.Next.Activate
Windows(1).Activate

Цитата:
Using the Window Object
Use Windows(index), where index is the window name or the index number, to return a single Window object. The following example maximizes the Document1 window.

Windows("Document1").WindowState = wdWindowStateMaximize
The index number is the number to the left of the window name on the Window menu. The following example displays the caption of the first window in the Windows collection.

Кроме того, возможна ситуация, когда template во время активации исполняет какой-нибудь event и возвращает фокус назад на документ.

Автор: DroN_S
Дата сообщения: 22.11.2005 23:44
может вопрос не по теме, но где в офисе 2003 находится VB?

Страницы: 1234567891011121314151617181920212223242526

Предыдущая тема: Кластеризация изображений


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.