Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Word
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.10.2011, 01:03   #1
alt2
 
Регистрация: 18.10.2011
Сообщений: 9
По умолчанию Сложности с движением экселевского фокуса ввода из под ворда

Вопрос явно ламерский - в первый раз толком залез в VBA. Но вот никак не соображу... ((

VBA 7.0 (Офис 2010)
Нужно перекидывать текстики из открываемых вордовских документов в таблицу экселя, сдвигая там фокус ввода (относительно). Все работает, кроме движения фокуса ввода.
Вот кусок:

Sub 111()

Dim ExcelSheet As Object

'это еще в ворде - беру в буфер условный текст
Selection.EndKey Unit:=wdLine, Extend:=wdExtend
Selection.Copy

'теперь лезу в эксель
Set ExcelSheet = CreateObject("Excel.Sheet")
ExcelSheet.Application.Visible = True
ExcelSheet.ActiveSheet.Range.GoTo What:=wdGoToLine, Which:=wdGoToAbsolute, Count:=4
ExcelSheet.ActiveSheet.Paste

End Sub

Paste отрабатывается, а вот сдвиг Range - ни в какую.
Что-то я недопонимаю с объектами у него видать - ставил так и эдак - не выходит.
Подскажите плз.
alt2 вне форума Ответить с цитированием
Старый 19.10.2011, 02:44   #2
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Проблема в том, что ты путаешь Range из Excel и Range из Word, а это две большие разницы. Когда ты пишешь:
Код:
ExcelSheet.ActiveSheet.Range.GoTo What:=wdGoToLine, Which:=wdGoToAbsolute, Count:=4
то пытаешься использовать метод GoTo из вордовского Range, не осознавая по всей видимости, что ты уже в Excel. У новичков это часто встречается.
Я не совсем пойму, что тебе нужно сделать. Ты копируешь текст, а потом хочешь его вставить в какую-то позицию внутри ячейки? Или хочешь сместиться в экселе на 4 строки вниз и вставить туда? Тебе нужно смотреть не только объектную модель ворда, но и экселя.
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 19.10.2011, 03:58   #3
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию Типа ассемблер

Я в таких случаях, не парясь с объектами, вставлял
Код:
Const СколькоРазНажать = 4
SendKeys "{down " & СколькоРазНажать & "}", True
Только его отлаживать неудобно: в окне редактора (VBE) он тоже жмёт на клавиши!

Вот тут: http://prjsoft.ru/rus/sendkeys.php (на слове фрагмент) — как пользовать SendKeys.

Последний раз редактировалось Sasha_Smirnov; 19.10.2011 в 23:27. Причина: инструкция.
Sasha_Smirnov вне форума Ответить с цитированием
Старый 19.10.2011, 09:37   #4
alt2
 
Регистрация: 18.10.2011
Сообщений: 9
По умолчанию

Цитата:
Сообщение от viter.alex Посмотреть сообщение
Проблема в том, что ты путаешь Range из Excel и Range из Word, а это две большие разницы. Когда ты пишешь:
Код:
ExcelSheet.ActiveSheet.Range.GoTo What:=wdGoToLine, Which:=wdGoToAbsolute, Count:=4
то пытаешься использовать метод GoTo из вордовского Range, не осознавая по всей видимости, что ты уже в Excel. У новичков это часто встречается.
Мм... А "ExcelSheet." для указания не достаточно? "ExcelSheet.ActiveSheet.Paste" вполне себе понимает, что нужно исполняться в экселе.
Синтаксис Range.GoTo брал из экселевского примера.

Цитата:
Сообщение от viter.alex Посмотреть сообщение
Я не совсем пойму, что тебе нужно сделать. Ты копируешь текст, а потом хочешь его вставить в какую-то позицию внутри ячейки? Или хочешь сместиться в экселе на 4 строки вниз и вставить туда? Тебе нужно смотреть не только объектную модель ворда, но и экселя.
Здесь - хочу сместиться в экселе на 4 строки вниз и вставить туда. По задаче буду смещаться еще и вбок, но пока разобраться бы хоть как вниз ))
alt2 вне форума Ответить с цитированием
Старый 19.10.2011, 09:42   #5
alt2
 
Регистрация: 18.10.2011
Сообщений: 9
По умолчанию

Цитата:
Сообщение от Sasha_Smirnov Посмотреть сообщение
Я в таких случаях, не парясь с объектами, вставлял
Код:
Const СколькоРазНажать = 4
SendKeys "{down " & СколькоРазНажать & "}", True
Только его отлаживать неудобно.
Хороший вариант - возьму на вооружение. Вопрос в моем случае - как его отработать именно в экселе.
ExcelSheet.SendKeys... ?
До кода доберусь только через пару дней - там попробую сам.
alt2 вне форума Ответить с цитированием
Старый 19.10.2011, 11:56   #6
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Попробуйте
Код:
Sub a111()

Dim s$

'это еще в ворде - беру в буфер условный текст
Selection.EndKey Unit:=wdLine, Extend:=wdExtend
'Selection.Copy
s = Selection

'теперь лезу в эксель
With CreateObject("Excel.Sheet") 'это на самом деле книга, а не лист...
    .Application.Visible = True
    .sheets(1).Range("A4").Value = s '...поэтому надо указывать лист
    'ExcelSheet.ActiveSheet.Paste
End With
End Sub
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 21.10.2011, 21:38   #7
alt2
 
Регистрация: 18.10.2011
Сообщений: 9
По умолчанию

Цитата:
Сообщение от Казанский Посмотреть сообщение
Попробуйте
Прекрасно работает.
Однако нужно относительное перемещение, о чем писал вначале.
alt2 вне форума Ответить с цитированием
Старый 21.10.2011, 22:01   #8
alt2
 
Регистрация: 18.10.2011
Сообщений: 9
По умолчанию

Цитата:
Сообщение от Sasha_Smirnov Посмотреть сообщение
Я в таких случаях, не парясь с объектами, вставлял
Код:
Const СколькоРазНажать = 4
SendKeys "{down " & СколькоРазНажать & "}", True
Только его отлаживать неудобно: в окне редактора (VBE) он тоже жмёт на клавиши!

Вот тут: http://prjsoft.ru/rus/sendkeys.php (на слове фрагмент) — как пользовать SendKeys.
Ага. Так действительно проще. Спасибо )
alt2 вне форума Ответить с цитированием
Старый 21.10.2011, 22:16   #9
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию Дауншифтинг какой-то...

Объектная модель, объектная модель... А мы вот так вот, добрались на попутках.
Sasha_Smirnov вне форума Ответить с цитированием
Старый 21.10.2011, 23:21   #10
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

> Однако нужно относительное перемещение
Код:
'xlApp - приложение Excel
xlApp.activecell.offset(смещение_по_строкам, смещение_по_столбцам).select
Интересно, как Вы будете методом SendKeys обходиться, когда надо будет переключиться на другой лист и т.п.
exceleved@yandex.ru Яндекс.Деньги: 410011500007619

Последний раз редактировалось Казанский; 21.10.2011 в 23:24.
Казанский вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Изменить язык ввода (раскладку клавиатуры) при получении фокуса полем SMShrek Microsoft Office Access 4 04.07.2011 09:42
окно ввода в приложении под windows: как правильно считывать числа?? avroraoff Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 19.12.2009 19:29
[Pascal] Помогите с движением змейки Рамик Помощь студентам 5 08.09.2009 21:53
Как убрать рамку фокуса ввода с TListBox? SalasAndriy Компоненты Delphi 2 01.04.2009 21:09