- Remove From My Forums
-
Question
-
For one of my macros to run, I have to ensure that the cursor position is not in a table or in a frame when the user activates the macro.
How can I find our the current cursor position? Once I can determine that the cursor is positioned in a table or a frame, I can then code a message box to instruct the user where to put their cursor to run a certain routine.
Answers
-
Hi,
Cursor position
Selection.Range.EndThis will check whether currently in a table or frame.
Dim lngTableCount As Long
Dim lngFrameCount As LongFor lngTableCount = 1 To ActiveDocument.Tables.Count
If Selection.Range.InRange(ActiveDocument.Tables(lngTableCount).Range) Then
MsgBox «In Table»
Exit For
End If
NextFor lngFrameCount = 1 To ActiveDocument.Frames.Count
If Selection.Range.InRange(ActiveDocument.Frames(lngFrameCount).Range) Then
MsgBox «In Frame»
Exit For
End If
Next
I am trying to write a program in VBA which writes some text to a Word document, what I want to happen is when the text gets to a certain distance from the left side of the document it prints out the remaining characters up to the next full stop and then starts a new line and a tab for every character in the string. This is an example of what should happen:
The code I have below works correctly on the first page of word but on additional pages it starts to print out randomly and the value given from objSelection.range.Information(WdInformation.wdHorizontalPositionRelativeToPage)
seems to be the cause the issue.
An example of the incorrect output printed to word:
A few things I have noticed while trying to work out this issue:
If I set a break point and step through the code one line at a time everything works fine and the correct output is printed every time.
If I have the word app set to not be visible from the start it fails every time after the first page
If I have the word app set as visible it runs correctly on every page until I click somewhere on the screen outside of the word application.
This is the code I have:
Sub print_to_word()
'**** SETTING UP WORD *****
Dim wordApp As Word.Application
On Error Resume Next
Set wordApp = GetObject(, "Word.Application")
If wordApp Is Nothing Then 'if word is not open then open it
Set wordApp = CreateObject("Word.Application")
End If
On Error GoTo 0 'reset error warnings
Dim objdoc As Document
Set objdoc = wordApp.Documents.Add 'Create a new word document
Dim objSelection As Selection
Set objSelection = wordApp.Selection 'Selection used to write text
wordApp.Visible = True
Dim wirecodes As String
wirecodes = "114.114*.98.98*.99.99*.123.123*.92*.92**.92.114.114*.98.98*.99.99*.123.123*.92*.92**.92.114.114*.98.98*.99.99*.123.123*.92*.92**.92.114.114*.98.98*.99.99*.123.123*.92*.92**.92.114.114*.98.98*.99.99*.123.123*.92*.92**.92.114.114*.98.98*.99.99*.123.123*.92*.92**.92.114.114*.98.98*.99.99*.123.123*.92*.92**.92.114.114*.98.98*.99.99*.123.123*.92*.92**.92"
For x = 1 To 5 'print 5 lots of wirecodes
Dim pos As Integer
objSelection.TypeText (Chr(9)) 'tab
For i = 1 To Len(wirecodes) 'loop through each character
pos = objSelection.range.Information(WdInformation.wdHorizontalPositionRelativeToPage)
If i <> 1 And pos > 215 Then 'if the cursor is past 215 then
Do While Mid(wirecodes, i - 1, 1) <> "." And i <> Len(wirecodes) + 1 'print out the remaining wirecode before starting a new line
objSelection.TypeText (Mid(wirecodes, i, 1))
i = i + 1
Loop
If i < Len(wirecodes) Then 'if its not the last wirecode print a newline and tab
objSelection.TypeText (Chr(11) + Chr(9))
End If
End If
objSelection.TypeText (Mid(wirecodes, i, 1)) 'just print the character
Next
objSelection.TypeText (Chr(10)) 'new line
Next
'close word
objdoc.Close
Set objdoc = Nothing
wordApp.Quit 'close word
Set wordApp = Nothing
End Sub
I’m using Microsoft office 2010 on Windows 10 any help would be greatly appreciated.
maksim_volodin 3 / 2 / 1 Регистрация: 15.04.2019 Сообщений: 33 |
||||
1 |
||||
02.05.2019, 07:34. Показов 5094. Ответов 5 Метки нет (Все метки)
Как поместить курсор в определённое место в Word.
После применения этой процедуры, стартовая позиция курсора остаётся ноль.
0 |
Alex77755 11482 / 3773 / 677 Регистрация: 13.02.2009 Сообщений: 11,145 |
||||
02.05.2019, 10:41 |
2 |
|||
Сообщение было отмечено maksim_volodin как решение Решение
1 |
3 / 2 / 1 Регистрация: 15.04.2019 Сообщений: 33 |
|
02.05.2019, 11:10 [ТС] |
3 |
Я правильно понимаю, что VBA позволяет разместить курсор в определённой позиции только при условии заполнения документа до этой позиции чем-либо (символы, параграфы….)? В пустом документе передвинуть курсор нельзя.
0 |
11482 / 3773 / 677 Регистрация: 13.02.2009 Сообщений: 11,145 |
|
02.05.2019, 13:17 |
4 |
А куда ж его передвигать? В пустоту? Надо что-то добавлять тогда. Пробелы, параграфы …
1 |
Модератор 11341 / 4660 / 748 Регистрация: 07.08.2010 Сообщений: 13,497 Записей в блоге: 4 |
|
02.05.2019, 13:23 |
5 |
Надо что-то добавлять тогда. Пробелы, параграфы . есть галочка разрешить свободный ввод
0 |
11482 / 3773 / 677 Регистрация: 13.02.2009 Сообщений: 11,145 |
|
02.05.2019, 16:43 |
6 |
Галочка установлена по умолчанию.
0 |
|
|
|
Популярные разделы FAQ: Общие вопросы Особенности VBA-кода Оптимизация VBA-кода Полезные ссылки
1. Старайтесь при создании темы указывать в заголовке или теле сообщения название офисного приложения и (желательно при работе с Office 95/97/2000) его версию. Это значительно сократит количество промежуточных вопросов.
2. Формулируйте вопросы как можно конкретнее, вспоминая (хотя бы иногда) о правилах ВЕЛИКОГО И МОГУЧЕГО РУССКОГО ЯЗЫКА, и не забывая, что краткость — сестра таланта.
3. Не забывайте использовать теги [сode=vba] …текст программы… [/code] для выделения текста программы подсветкой!
4. Темы с просьбой выполнить какую-либо работу полностью за автора здесь не обсуждаются и переносятся в раздел ПОМОЩЬ СТУДЕНТАМ.
Word. Позиция курсора в строке
- Подписаться на тему
- Сообщить другу
- Скачать/распечатать тему
|
|
Senior Member Рейтинг (т): 34 |
Определяю номер листа, на котором находится курсор |
coder |
|
Selection.Information(wdFirstCharacterColumnNumber) |
bi-lya |
|
Senior Member Рейтинг (т): 34 |
Вот ведь! Верите-нет — раз 100 сегодня это дело мимо проходил — считал, что это для таблиц. Спасибо, что ткнули носом |
Old Bat |
|
Moderator Рейтинг (т): 128 |
поправочка: Selection.Information(wdFirstCharacterColumnNumber) дает номер столбца, так что если необходимо получить кол-во символов ДО курсора, то пишем
Selection.Information(wdFirstCharacterColumnNumber)-1 или используя объектную схему (на любителя)
ActiveDocument.Range(ActiveDocument.ActiveWindow.Panes(1).Pages(1).Rectangles(1).Lines(1).Range.Characters.First.Start, Selection.Range.End).Characters.Count |
bi-lya |
|
Senior Member Рейтинг (т): 34 |
Old Bat, объектная схема — это хорошо, но для работы с переменными не совсем здорово — или я что-то не понимаю. Для того, чтобы вычислить то же кол-во символов в какой-то строке мы должны внести четыре переменных — Panes, Pages, Rectangles, Lines Сообщение отредактировано: bi-lya — 22.06.07, 04:18 |
Old Bat |
|
Moderator Рейтинг (т): 128 |
естественно, вариант с Information гораздо шустрее, я всего лишь показал еще одну альтернативную возможность, оговорившись, что это вариант на любителя |
bi-lya |
|
Senior Member Рейтинг (т): 34 |
Может, подскажете еще каким образом определить, какие Rectangle и Paragraph являются активными, т.е. в которых находится курсор?
ActiveDocument.ActiveWindow.Panes(1).Pages(a).Rectangles.Count А для определения активного параграфа попробовал по примеру Old Bat‘а с использованием объектной схемы — но… Сообщение отредактировано: bi-lya — 25.06.07, 10:31 |
coder |
|
Selection.Information (wdActiveEndPageNumber) — это активная страница. Добавлено 25.06.07, 11:50 |
XOXOJI |
|
Junior Рейтинг (т): 1 |
чета я совсем уже туплю… такая фигня, текст вставил из буфера в ворд, теперь его надо постранично скопировать… не пойму как сделать.. подскажите плиз |
Old Bat |
|
Moderator Рейтинг (т): 128 |
0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
0 пользователей:
- Предыдущая тема
- VB for Application
- Следующая тема
[ Script execution time: 0,0838 ] [ 16 queries used ] [ Generated: 14.04.23, 17:33 GMT ]
INTELLIGENT WORK FORUMS
FOR COMPUTER PROFESSIONALS
Contact US
Thanks. We have received your request and will respond promptly.
Log In
Come Join Us!
Are you a
Computer / IT professional?
Join Tek-Tips Forums!
- Talk With Other Members
- Be Notified Of Responses
To Your Posts - Keyword Search
- One-Click Access To Your
Favorite Forums - Automated Signatures
On Your Posts - Best Of All, It’s Free!
*Tek-Tips’s functionality depends on members receiving e-mail. By joining you are opting in to receive e-mail.
Posting Guidelines
Promoting, selling, recruiting, coursework and thesis posting is forbidden.
Students Click Here
Setting cursor in word docSetting cursor in word doc(OP) 2 Sep 04 10:42 How do I programatically (from VB application) set the cursor to be in a specific location when I open up a word doc? Thanks, Shannan Red Flag SubmittedThank you for helping keep Tek-Tips Forums free from inappropriate posts. |
Join Tek-Tips® Today!
Join your peers on the Internet’s largest technical computer professional community.
It’s easy to join and it’s free.
Here’s Why Members Love Tek-Tips Forums:
- Talk To Other Members
- Notification Of Responses To Questions
- Favorite Forums One Click Access
- Keyword Search Of All Posts, And More…
Register now while it’s still free!
Already a member? Close this window and log in.
Join Us Close