英文:
New paragraph alignment style
问题
正如你所知,Word提供了几种段落对齐选项。
当将段落两边对齐(CTRL+J)时,所有行(除了最后一行)都与左右边距对齐。最后一行保持与一侧对齐(通常是根据书写方向和语言的方向)。
我想要创建一个宏,可以启用一种新的段落对齐样式,如下所示:
所有行都将两边对齐,包括最后一行,如果最后一行有多于一个单词。
为此,我想要编写一段代码,只增加“ ”(空格)的字体大小半个点,仅在最后一行,只要最后一行不换行。
感谢您的建议。
我考虑的模型(并陷入困境...)涉及以下条件:
光标已经在最后一行。
代码将计算要增加的空格数量,
每次增加半个点。
它将计算当前行中的空格数量 - 如果它们少于先前的计数 - 将执行一次减少。
顺便说一句,我一次又一次地尝试使用https://chat.openai.com/ - 但我没有成功。
英文:
As you know, Word offers several paragraph alignment options.
When aligning a paragraph to both sides, (CTRL+J), all lines (except the last) are attached to the left and right margins. The last line remains aligned to one side, (usually, according to the direction of the writing and the language).
I want to build a macro that will enable a new paragraph alignment style, like this:
All lines will be aligned to both sides, including the last line, if it has more than one word.
To do this, I want to build code that will increase the font size of " " (the space) by half a point, along the last line only, as long as the last line does not wrap to a new line.
Thanks for the ideas.
The model I was thinking about (and stuck with...) refers to the following conditions:
The cursor is already on the last line.
The code will count the number of spaces to increase,
will increase them by half a point each time.
It will count the number of spaces in the current row - if they are less than the previous count - a one-time reduction will be performed.
By the way, I tried again and again to use https://chat.openai.com/ - and I didn't succeed.
答案1
得分: 1
CTRL+Shift+J 是你想的吗?
英文:
Is the CTRL+Shift+J is just what you were thinking about?
20230616 updated
Sub New_paragraph_alignment_style_Aligned_to_both_sides_and_the_last_to_the_center()
Dim p As paragraph, ur As UndoRecord, lns As Lines, ln As Line, recs As Rectangles, rec As Rectangle
Set ur = Word.Application.UndoRecord
ur.StartCustomRecord "New_paragraph_alignment_style_Aligned_to_both_sides_and_the_last_to_the_center"
For Each p In Selection.Paragraphs
'Set p = Selection.Paragraphs(1)
With p.Range
.ParagraphFormat.Alignment = wdAlignParagraphDistribute
Set recs = .Document.ActiveWindow.Panes(1).Pages(.Information(wdActiveEndPageNumber)).Rectangles
For Each rec In recs
If rec.Range = p.Range Then
Exit For 'Stop
End If
Next rec
Set lns = rec.Lines
If lns.Count > 1 Then
Set ln = lns(lns.Count)
.ParagraphFormat.TabStops.Add Position:=CentimetersToPoints(0.75), Alignment:=wdAlignTabCenter
.Document.Range(lns(lns.Count).Range.Characters(1).Start, lns(lns.Count).Range.Characters(1).Start).InsertAfter vbTab
'.Document.Range(lns(lns.Count).Range.Characters(1).Start, lns(lns.Count).Range.Characters(1).Start).InsertAlignmentTab 1, 0
End If
End With
Next p
ur.EndCustomRecord
End Sub
Original text:
After running the code above
20230618 updated Fix the bug :
When a paragraph is across the page, there is an error. Because the line above: Set recs = .Document.ActiveWindow.Panes(1).Pages(.Information(wdActiveEndPageNumber)).Rectangles
Sub New_paragraph_alignment_style_Aligned_to_both_sides_and_the_last_to_the_center()
Dim p As paragraph, ur As UndoRecord, lns As Lines, ln As Line, recs As Rectangles, rec As Rectangle
Set ur = Word.Application.UndoRecord
ur.StartCustomRecord "New_paragraph_alignment_style_Aligned_to_both_sides_and_the_last_to_the_center"
For Each p In Selection.Paragraphs
'Set p = Selection.Paragraphs(1)
With p.Range
.ParagraphFormat.Alignment = wdAlignParagraphDistribute
Set recs = .Document.ActiveWindow.Panes(1).Pages(.Information(wdActiveEndPageNumber)).Rectangles
For Each rec In recs
If rec.Range = p.Range Then
Exit For
End If
Next rec
Rem When a paragraph is across the page, there is an error. Because the line above: Set recs = .Document.ActiveWindow.Panes(1).Pages(.Information(wdActiveEndPageNumber)).Rectangles
If rec Is Nothing Then
Set lns = recs(1).Lines
Else
Set lns = rec.Lines
End If
If lns.Count > 1 Or rec Is Nothing Then
Set ln = lns(lns.Count)
.ParagraphFormat.TabStops.Add Position:=CentimetersToPoints(0.75), Alignment:=wdAlignTabCenter
Rem However, please NOTE: Insert a VBTab character will inevitably affect the results of finding content text
.Document.Range(lns(lns.Count).Range.Characters(1).Start, lns(lns.Count).Range.Characters(1).Start).InsertAfter vbTab
'.Document.Range(lns(lns.Count).Range.Characters(1).Start, lns(lns.Count).Range.Characters(1).Start).InsertAlignmentTab 1, 0
End If
End With
Next p
ur.EndCustomRecord
End Sub
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论