Перейти к содержимому


Время идет - скидка растет

Фотография
* * * * * 1 Голосов

VBA в Word


Лучший ответ Rtech , 25 Сентябрь 2019 - 03:46

Если нужно просто выровнять параграф Текст6 по правому краю, не вдаваясь в строительство табличек, то можно так:

ActiveDocument.Content.Font.Name = "Arial"
ActiveDocument.Content.Font.Size = 14
ActiveDocument.Content.LanguageID = wdGerman
ActiveDocument.Tables.Add Range:=Selection.Range, NumRows:=2, NumColumns:=2
ActiveDocument.Tables(1).Cell(Row:=1, Column:=2).Range.InsertAfter Text:="text1" & Chr(13) & "text2" & Chr(13) & "text3"
ActiveDocument.Tables(1).Cell(Row:=2, Column:=1).Range.InsertAfter Text:="text4" & Chr(13) & "text5"

ActiveDocument.Content.InsertAfter Text:="text6"
ActiveDocument.Paragraphs(ActiveDocument.Paragraphs.Count).Alignment = wdAlignParagraphRight
ActiveDocument.Content.InsertAfter Text:=Chr(13) & "text7"
ActiveDocument.Paragraphs(ActiveDocument.Paragraphs.Count).Alignment = wdAlignParagraphLeft

ActiveDocument.Content.InsertAfter Text:=Chr(13) & "text8" & Chr(13) & Chr(13) & "text9"
Перейти к сообщению


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 10

#1 Anubis

Anubis

    Академик

  • Супермодераторы
  • 4 909 сообщений
  • Пол:Мужчина
  • Город:Евразия

Отправлено 23 Сентябрь 2019 - 21:48

В наличии есть листинг программы для Word:

ActiveDocument.Content.Font.Name = "Arial"
ActiveDocument.Content.Font.Size = 14
ActiveDocument.Content.LanguageID = wdGerman
ActiveDocument.Tables.Add Range:=Selection.Range, NumRows:=2, NumColumns:=2
ActiveDocument.Tables(1).Cell(Row:=1, Column:=2).Range.InsertAfter Text:="text1" & Chr(13) & "text2" & Chr(13) & "text3"
ActiveDocument.Tables(1).Cell(Row:=2, Column:=1).Range.InsertAfter Text:="text4" & Chr(13) & "text5"
ActiveDocument.Content.InsertAfter Text:="text6"
ActiveDocument.Content.InsertAfter Text:=Chr(13) & "text7" & Chr(13) & Chr(13) & "text8" & Chr(13) & Chr(13) & "text9"

Как сделать для „text6“ форматирование по правому краю, чтобы это не применялось ко всему документу?

P.S. То, что листинг не оптимизирован – знаю, речь не об этом.



#2 konistra

konistra

    Бакалавр

  • Пользователи'
  • 603 сообщений
  • Пол:Мужчина
  • Город:Волгодонск

Отправлено 23 Сентябрь 2019 - 23:32

Попробуй записать макрос.
  • 0

#3 Anubis

Anubis

    Академик

  • Супермодераторы
  • 4 909 сообщений
  • Пол:Мужчина
  • Город:Евразия

Отправлено 23 Сентябрь 2019 - 23:34

Пробовал. Момент создания таблицы просто игнорируется тогда и записанный макрос её уже не создаёт.



#4 GulinSoft

GulinSoft

    Академик

  • Пользователи'
  • 2 625 сообщений
  • Пол:Мужчина

Отправлено 24 Сентябрь 2019 - 12:17

Возможно, нужно перед текст6 задать формат по правому краю, а перед остальными явно указать на левый? В 1с нечто подобное вроде, хотя не особо знаю))
  • 0

#5 Nikodim-09

Nikodim-09

    Академик

  • Пользователи'
  • 6 001 сообщений
  • Пол:Мужчина
  • Город:Россия, Волгодонск.

Отправлено 24 Сентябрь 2019 - 12:23

просто вопрос. А не проще уже имеющиеся настройки использовать? Или создать шаблон с необходимыми? Я так книги по 3000 листов форматировал. В любом случае будет необходима ручная корректировка.
  • 0

#6 Anubis

Anubis

    Академик

  • Супермодераторы
  • 4 909 сообщений
  • Пол:Мужчина
  • Город:Евразия

Отправлено 24 Сентябрь 2019 - 12:49

Возможно, нужно перед текст6 задать формат по правому краю, а перед остальными явно указать на левый?

Так я и спрашиваю, как это сделать в данном конкретном примере.

 

А не проще уже имеющиеся настройки использовать?

Что Вы имеете в виду?

 

Или создать шаблон с необходимыми?

Пока не знаю, проще будет или нет. И будет ли это удовлетворять потребностям.

 

В любом случае будет необходима ручная корректировка.

В итоге, единственная ручная корректировка должна будет требоваться для заполнения конкретных полей текста, но к VBA это уже не будет иметь отношения.

 

Есть идея, как резервный вариант, но и извращённый для ручного оформления, вообще весь документ поделить таблицами, тогда будет возможность обращаться к конкретной таблице и к конкретной её ячейке. Я уже пробовал обращаться в выше приведённом варианте к конкретному параграфу, но беда в том, что указатель параграфа как-будто не может выйти за пределы таблицы, которая стоит в начале документа.



#7 Nikodim-09

Nikodim-09

    Академик

  • Пользователи'
  • 6 001 сообщений
  • Пол:Мужчина
  • Город:Россия, Волгодонск.

Отправлено 24 Сентябрь 2019 - 13:02

Так я и спрашиваю, как это сделать в данном конкретном примере.

 

 

 

Что Вы имеете в виду?

 

 

 

Пока не знаю, проще будет или нет. И будет ли это удовлетворять потребностям.

 

 

 

В итоге, единственная ручная корректировка должна будет требоваться для заполнения конкретных полей текста, но к VBA это уже не будет иметь отношения.

 

Есть идея, как резервный вариант, но и извращённый для ручного оформления, вообще весь документ поделить таблицами, тогда будет возможность обращаться к конкретной таблице и к конкретной её ячейке. Я уже пробовал обращаться в выше приведённом варианте к конкретному параграфу, но беда в том, что указатель параграфа как-будто не может выйти за пределы таблицы, которая стоит в начале документа.

 

 

а если сделать данный документ в акцесе


или в эксель, если тем более там таблицы


  • 0

#8 Anubis

Anubis

    Академик

  • Супермодераторы
  • 4 909 сообщений
  • Пол:Мужчина
  • Город:Евразия

Отправлено 24 Сентябрь 2019 - 13:35

Ну, это уже будет совсем экзотика. Если я Вас правильно понимаю, то там это будет проще реализовать. Но, нужно именно в Word. Если идей не будет, придётся пробовать второй вариант, там примерно в пять таблиц уложусь.



#9 Anubis

Anubis

    Академик

  • Супермодераторы
  • 4 909 сообщений
  • Пол:Мужчина
  • Город:Евразия

Отправлено 24 Сентябрь 2019 - 23:58

Сделал при помощи второго варианта, хоть и пришлось несколько извратиться, так как я не понимаю, как можно сделать именно вторую (и так далее) таблицу. Получилось создать таблицу №1 и уже к ней добавлять необходимые ряды с ячейками.

ActiveDocument.Content.Font.Name = "Arial"
ActiveDocument.Content.Font.Size = 14
ActiveDocument.Content.LanguageID = wdGerman
ActiveDocument.Tables.Add Range:=Selection.Range, NumRows:=2, NumColumns:=2
Selection.EndKey wdStory
ActiveDocument.Tables.Add Range:=Selection.Range, NumRows:=1, NumColumns:=1
Selection.EndKey wdStory
ActiveDocument.Tables.Add Range:=Selection.Range, NumRows:=1, NumColumns:=1
Selection.EndKey wdStory
ActiveDocument.Tables.Add Range:=Selection.Range, NumRows:=1, NumColumns:=1
Selection.EndKey wdStory
ActiveDocument.Tables.Add Range:=Selection.Range, NumRows:=1, NumColumns:=1
Selection.EndKey wdStory
ActiveDocument.Tables.Add Range:=Selection.Range, NumRows:=1, NumColumns:=1
Selection.EndKey wdStory
ActiveDocument.Tables.Add Range:=Selection.Range, NumRows:=1, NumColumns:=1

ActiveDocument.Tables(1).Cell(Row:=1, Column:=2).Range.InsertAfter Text:="text1"
ActiveDocument.Tables(1).Cell(Row:=2, Column:=1).Range.InsertAfter Text:="text2"

ActiveDocument.Tables(1).Cell(Row:=3, Column:=1).Range.InsertAfter Text:="text3"
ActiveDocument.Tables(1).Cell(Row:=3, Column:=1).Range.FormattedText.ParagraphFormat.Alignment = wdAlignParagraphRight

ActiveDocument.Tables(1).Cell(Row:=4, Column:=1).Range.InsertAfter Text:=Chr(13) & "text4"
ActiveDocument.Tables(1).Cell(Row:=4, Column:=1).Range.Bold = True

ActiveDocument.Tables(1).Cell(Row:=5, Column:=1).Range.InsertAfter Text:=Chr(13) & "text5"

ActiveDocument.Tables(1).Cell(Row:=6, Column:=1).Range.FormattedText.ParagraphFormat.Alignment = wdAlignParagraphJustify
ActiveDocument.Tables(1).Cell(Row:=6, Column:=1).Range.InsertAfter Text:=Chr(13) & "text6"

ActiveDocument.Tables(1).Cell(Row:=7, Column:=1).Range.InsertAfter Text:=Chr(13) & "text7"

ActiveDocument.Tables(1).Cell(Row:=8, Column:=1).Range.InsertAfter Text:=Chr(13) & "text8"


#10 Rtech

Rtech

    Школьник

  • Пользователи'
  • 31 сообщений

Отправлено 25 Сентябрь 2019 - 03:46   Лучший ответ

Если нужно просто выровнять параграф Текст6 по правому краю, не вдаваясь в строительство табличек, то можно так:

ActiveDocument.Content.Font.Name = "Arial"
ActiveDocument.Content.Font.Size = 14
ActiveDocument.Content.LanguageID = wdGerman
ActiveDocument.Tables.Add Range:=Selection.Range, NumRows:=2, NumColumns:=2
ActiveDocument.Tables(1).Cell(Row:=1, Column:=2).Range.InsertAfter Text:="text1" & Chr(13) & "text2" & Chr(13) & "text3"
ActiveDocument.Tables(1).Cell(Row:=2, Column:=1).Range.InsertAfter Text:="text4" & Chr(13) & "text5"

ActiveDocument.Content.InsertAfter Text:="text6"
ActiveDocument.Paragraphs(ActiveDocument.Paragraphs.Count).Alignment = wdAlignParagraphRight
ActiveDocument.Content.InsertAfter Text:=Chr(13) & "text7"
ActiveDocument.Paragraphs(ActiveDocument.Paragraphs.Count).Alignment = wdAlignParagraphLeft

ActiveDocument.Content.InsertAfter Text:=Chr(13) & "text8" & Chr(13) & Chr(13) & "text9"

  • 1

#11 Anubis

Anubis

    Академик

  • Супермодераторы
  • 4 909 сообщений
  • Пол:Мужчина
  • Город:Евразия

Отправлено 26 Сентябрь 2019 - 00:54

Вот оно как нужно было делать!

ActiveDocument.Paragraphs(ActiveDocument.Paragraphs.Count).Alignment = wdAlignParagraphRight

Большое спасибо Rtech за помощь.






Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 скрытых пользователей