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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.09.2009, 19:35   #1
miatu
Пользователь
 
Регистрация: 26.08.2009
Сообщений: 22
По умолчанию Проблема с Range

Создаю три колонки. пишу в первой привет и ставлю column break. после этого хочу написать во второй колонке. но текст пишется в первой.

document->Sections->Last->PageSetup->TextColumns->SetCount(3);
document->Paragraphs->Last->Range->PutText(L"privet");

VARIANT end;
end.vt = VT_I4;
end.lVal = document->Paragraphs->Last->Range->End - 1;

Word::RangePtr range = document->Range(&end);
range->InsertBreak(&columnBreak);

document->Paragraphs->Last->Range->PutText(L"mir");

Помогите, пожалуйста.
miatu вне форума Ответить с цитированием
Старый 05.09.2009, 11:35   #2
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Дело в том, что разрыв колонки не создает нового абзаца. Нужно перед разрывом колонки ставить абзац, а уже после этого пустого абзаца вставлять разрыв.
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 07.09.2009, 11:07   #3
miatu
Пользователь
 
Регистрация: 26.08.2009
Сообщений: 22
По умолчанию

Если пишу вот так:

document->Sections->Last->PageSetup->TextColumns->SetCount(3);
document->Paragraphs->Last->Range->PutText(L"privet");
document->Paragraphs->Last->Range->InsertParagraphAfter();
document->Paragraphs->Last->Range->InsertBreak(&columnBreak);
document->Paragraphs->Last->Range->InsertParagraphAfter();
document->Paragraphs->Last->Range->PutText(L"mir");
document->Paragraphs->Last->Range->InsertParagraphAfter();

то все работает почти правильно, за исключением того, что privet и mir находятся на разных уровнях в колонках. А как сделать так, чтобы privet и mir были в разных колонках и на одном уровне?
miatu вне форума Ответить с цитированием
Старый 07.09.2009, 11:21   #4
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

А зачем после разрыва колонки еще один абзац? Он не нужен
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 07.09.2009, 11:26   #5
miatu
Пользователь
 
Регистрация: 26.08.2009
Сообщений: 22
По умолчанию

Когда пишу так:

document->Sections->Last->PageSetup->TextColumns->SetCount(3);
document->Paragraphs->Last->Range->PutText(L"privet");
document->Paragraphs->Last->Range->InsertParagraphAfter();
document->Paragraphs->Last->Range->InsertBreak(&columnBreak);
document->Paragraphs->Last->Range->PutText(L"mir");

слова в одной колонке находятся
miatu вне форума Ответить с цитированием
Старый 07.09.2009, 11:48   #6
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Значит так, после разрыва колонки абзац действительно не нужен, но текст в последний абзац нужно помещать методом InsertAfter, тогда все получается:
Вот что получается у тебя:

А вот что получается этим кодом
Код:
Sub test()
  ActiveDocument.Sections.Last.PageSetup.TextColumns.SetCount 3
  ActiveDocument.Paragraphs.Last.Range.Text = "privet"
  ActiveDocument.Paragraphs.Last.Range.InsertParagraphAfter
  ActiveDocument.Paragraphs.Last.Range.InsertBreak wdColumnBreak
  ActiveDocument.Paragraphs.Last.Range.InsertAfter "mir"
End Sub


Получается, что разрыв колонки принадлежит абзацу, после которого он вставлен, и когда ты задаешь напрямую текст этого абзаца, ты разрыв уничтожаешь. А если вставить текст в конец абзаца (методом InsertAfter), то все остается на своих местах. Вообще, метод InsertAfter предпочтительнее, если нужно изменить диапазон.
Лучше день потерять — потом за пять минут долететь!©

Последний раз редактировалось viter.alex; 07.09.2009 в 12:00.
viter.alex вне форума Ответить с цитированием
Старый 07.09.2009, 12:06   #7
miatu
Пользователь
 
Регистрация: 26.08.2009
Сообщений: 22
По умолчанию

Спасибо огромное
miatu вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ReDim и Subscript out of range (Error 9) oldfatham Microsoft Office Excel 5 24.08.2009 18:32
Проблема с Range при работе с Word Абдуллаев Рустам БД в Delphi 0 10.05.2009 23:50
синтаксис Range ? kievlyanin Microsoft Office Excel 2 23.04.2009 13:32
Range & Cells ("")(Э_Є)("") Microsoft Office Excel 6 26.01.2009 11:19
MS Word: Range kate4ka Общие вопросы Delphi 1 19.02.2008 06:14