久久精品精选,精品九九视频,www久久只有这里有精品,亚洲熟女乱色综合一区
    分享

    VBA宏實現Word論文自動排版

     shouzhuw 2024-09-03 發布于四川

    一、靈感與動機

            作為一名即將畢業的大四學生,不僅經歷了設計、編寫系統的痛苦,還經歷了撰寫論文的煩惱,尤其是最后論文排版階段,非常的繁瑣和費時。所以我就希望可以有一個自動排版的“腳本”,一開始認為可以通過Python完成(因為Python屬實強大),但經過大量的搜索和學習,我發現Office中給用戶提供了一個宏語言,用戶可以自己通過編碼完成除現有功能外的其他功能。其默認支持VB,此外還有JS和Python也可以進行下載并切換開發環境。

    二、現狀與開發過程

            在開發的過程中,也是遇到了很多很多困難。最重要的可能還是我還是太菜了ヽ(ー_ー)ノ,目前VBA宏的編寫對Excel的操做更加實用和方便,所以網絡資源中基本都是Excel的教程學習。導致關于Word中使用的VB操做的案例和教程微乎其微,只能自己通過摸索、閱讀文檔和讓ChatGPT幫忙。給也想練習的小伙伴一些建議吧,少走彎路:

    (1)一開始我參考的開發文檔是VB的,如果你VB不好可以參考,地址:Visual Basic 文檔 - 入門、教程、參考。 | Microsoft Learn

    但如果是word中的VBA開發文檔需要參考Microsoft提供的,地址:Visual Basic for Applications (VBA) 的 Word 對象模型 | Microsoft Learn

    (2)AI不是全部,不能給你提供直接搬來就能用的代碼,需要你辨識和改變,這才是AI在幫助你編碼中最正確的用法。

    三、總體效果

    使用VB的窗體與宏功能建立聯系,目前已實現的功能:

    (1)目錄樣式

    (2)1、2、3...級標題樣式

    (3)正文樣式

    (4)圖注、表注樣式

    (5)表格樣式

    (6)頁面設置樣式

    (7)摘要(中英)樣式,包括關鍵詞樣式 

    四、部分功能實現

    (1)修改標題樣式(1、2、3...級標題)

            以1級標題為例,首先找到類型為“標題 1”的樣式段落,再修改其具體樣式,如加粗、下劃線、傾斜、行距、段前段后等。實現代碼如下:

    1. Sub FormatHeading2() '修改1級標題
    2. Dim p As Paragraph
    3. For Each p In ActiveDocument.Paragraphs
    4. If p.Style = ActiveDocument.styles('標題 1') Then
    5. p.Range.Font.Bold = True
    6. p.Range.Font.Italic = True '設置傾斜
    7. p.Range.Font.Underline = wdUnderlineSingle '設置下劃線(單下劃線)
    8. p.Range.Font.Size = 15
    9. p.Range.Font.name = '宋體'
    10. p.Range.ParagraphFormat.Alignment = wdAlignParagraphRight
    11. p.Range.ParagraphFormat.spaceBefore = 20
    12. p.Range.ParagraphFormat.spaceAfter = 10
    13. p.Range.ParagraphFormat.LineSpacingRule = wdLineSpaceSingle '單倍行距
    14. p.Range.ParagraphFormat.CharacterUnitFirstLineIndent = 0
    15. p.Range.ParagraphFormat.FirstLineIndent = CentimetersToPoints(0)
    16. End If
    17. Next p
    18. End Sub

    其他更多詳細的屬性可自行查閱開發文檔。

    (2)修改目錄內容樣式

            對于目錄中不同級別的標題的樣式會存在差異,我查找并修改樣式的過程是,先找到所有標題的名稱,不同級別放入不同數組中,在每個數組遍歷尋找第一次出現的段落修改其樣式。注意注意:目錄中的文本屬于超鏈接文本!實現代碼如下(以修改目錄中1級標題為例):

    1. Sub updateDirectoryContentOneStyle() '注意超鏈接文本問題
    2. Dim p As Paragraph
    3. Dim one() As String
    4. Dim oneCount As Integer
    5. Dim i As Integer
    6. For Each p In ActiveDocument.Paragraphs
    7. If p.Style = ActiveDocument.styles('標題 1') Then
    8. ReDim Preserve one(oneCount) '擴展一級標題數組
    9. one(oneCount) = p.Range.text
    10. oneCount = oneCount + 1
    11. End If
    12. Next p
    13. '輸出數組中保存的標題內容
    14. For i = 0 To UBound(one)
    15. Dim myRange As Range
    16. Dim myStyle As Style
    17. Set myRange = ActiveDocument.Content
    18. myRange.Find.Execute FindText:=one(i), Forward:=True '查找
    19. If myRange.Find.Found = True Then
    20. With myRange
    21. .Font.Bold = False
    22. .Font.name = '宋體'
    23. .Font.Size = 14
    24. End With
    25. End If
    26. Next
    27. End Sub

    (3)查找特定文本并修改其樣式

            本文以查找“關鍵詞”三字為例。使用Find關鍵字進行查找,找到后修改其樣式即可。更多的詳細屬性請參考開發文檔,實現代碼如下:

    1. Sub findText()
    2. Set myRange = ActiveDocument.Content
    3. myRange.Find.Execute FindText:='關鍵詞', Forward:=True
    4. If myRange.Find.Found = True Then
    5. With myRange
    6. .Font.Bold = False
    7. .ParagraphFormat.Alignment = wdAlignParagraphLeft '左對齊
    8. .Font.Color = wdColorBlack
    9. .Font.name = '黑體'
    10. .Font.Size = 14
    11. .ParagraphFormat.PageBreakBefore = False
    12. .ParagraphFormat.CharacterUnitFirstLineIndent = 0 '去除首行縮進
    13. .ParagraphFormat.FirstLineIndent = CentimetersToPoints(0)
    14. End With
    15. End If
    16. End Sub

    (4)表格樣式

            修改表格樣式,可以查閱開發文檔與網絡資源。我也參考了AI的一些代碼。實現代碼如下(最基本的不加樣式的表格):

    1. Sub execlOperate() '表格樣式操作
    2. Application.ScreenUpdating = False '關閉屏幕刷新
    3. Application.DisplayAlerts = False
    4. On Error Resume Next '忽略錯誤
    5. Dim mytable As Table, i As Long
    6. If Selection.Information(wdWithInTable) = True Then i = 1
    7. For Each mytable In ActiveDocument.Tables
    8. If i = 1 Then Set mytable = Selection.Tables(1)
    9. With mytable
    10. '取消底色
    11. .Shading.ForegroundPatternColor = wdColorAutomatic
    12. .Shading.BackgroundPatternColor = wdColorAutomatic
    13. Options.DefaultHighlightColorIndex = wdNoHighlight
    14. .Range.HighlightColorIndex = wdNoHighlight
    15. .Style = '表格主題'
    16. '單元格邊距
    17. .TopPadding = PixelsToPoints(0, True) '設置上邊距為0
    18. .BottomPadding = PixelsToPoints(0, True) '設置下邊距為0
    19. .LeftPadding = PixelsToPoints(0, True) '設置左邊距為0
    20. .RightPadding = PixelsToPoints(0, True) '設置右邊距為0
    21. .Spacing = PixelsToPoints(0, True) '允許單元格間距為0
    22. .AllowPageBreaks = True '允許斷頁
    23. '.AllowAutoFit = True '允許自動調整尺寸
    24. '設置邊框
    25. .Borders(wdBorderLeft).LineStyle = wdLineStyleNone
    26. .Borders(wdBorderRight).LineStyle = wdLineStyleNone
    27. .Borders(wdBorderTop).LineStyle = wdLineStyleNone
    28. .Borders(wdBorderBottom).LineStyle = wdLineStyleNone
    29. .Borders(wdBorderTop).LineStyle = wdLineStyleThinThickMedGap
    30. .Borders(wdBorderTop).LineWidth = wdLineWidth2pt
    31. .Borders(wdBorderBottom).LineStyle = wdLineStyleThickThinMedGap
    32. .Borders(wdBorderBottom).LineWidth = wdLineWidth225pt
    33. With .Rows
    34. .WrapAroundText = False '取消文字環繞
    35. .Alignment = wdAlignRowCenter '表水平居中 wdAlignRowLeft '左對齊
    36. .AllowBreakAcrossPages = False '不允許行斷頁
    37. .HeightRule = wdRowHeightExactly '行高設為最小值 wdRowHeightAuto '行高設為自動
    38. .Height = CentimetersToPoints(0) '上面縮進量為0
    39. .LeftIndent = CentimetersToPoints(0) '左面縮進量為0
    40. End With
    41. With .Range
    42. With .Font '字體格式
    43. .name = '宋體'
    44. .name = 'Times New Roman'
    45. .Color = wdColorAutomatic '自動字體顏色
    46. .Size = 12
    47. .Kerning = 0
    48. .DisableCharacterSpaceGrid = True
    49. End With
    50. With .ParagraphFormat '段落格式
    51. .CharacterUnitFirstLineIndent = 0 '取消首行縮進
    52. .FirstLineIndent = CentimetersToPoints(0) '取消首行縮進
    53. .LineSpacingRule = wdLineSpaceSingle '單倍行距 wdLineSpaceExactly '行距固定值
    54. '.LineSpacing = 20 '設置行間距為20磅,配合行距固定值
    55. .Alignment = wdAlignParagraphCenter '單元格水平居中
    56. .AutoAdjustRightIndent = False
    57. .DisableLineHeightGrid = True
    58. End With
    59. .Cells.VerticalAlignment = wdCellAlignVerticalCenter '單元格垂直居中
    60. End With
    61. '設置首行格式
    62. .Cell(1, 1).Select ' 選中第一個單元格
    63. With Selection
    64. .SelectRow '選中當前行
    65. Selection.Rows.HeadingFormat = wdToggle '自動標題行重復
    66. .Range.Font.Bold = False '表頭加粗黑體
    67. .Shading.ForegroundPatternColor = wdColorAutomatic '首行自動顏色
    68. '.Shading.BackgroundPatternColor = -603923969 '首行底紋填充
    69. End With
    70. '自動調整表格
    71. .Columns.PreferredWidthType = wdPreferredWidthAuto
    72. .AutoFitBehavior (wdAutoFitContent) '根據內容調整表格
    73. .AutoFitBehavior (wdAutoFitWindow) '根據窗口調整表格
    74. End With
    75. If i = 1 Then Exit For
    76. Next
    77. Err.Clear: On Error GoTo 0 '恢復錯誤捕捉
    78. Application.DisplayAlerts = True '開啟提示
    79. Application.ScreenUpdating = True '開啟屏幕刷新
    80. End Sub

    (5)修改圖注樣式(表注同理)

            修改圖注的樣式,我的思路是查找所有的圖片并獲取圖片的上一段文本,修改其樣式。修改表注同理,實現代碼如下。

    注:代碼中使用了InlineShape庫,只能查找Word文檔中樣式為嵌入式的圖片。

    1. Sub GetAllImageNextLineText() '修改所有圖注的樣式
    2. Dim shp As InlineShape
    3. Dim nextLine As Range
    4. For Each shp In ActiveDocument.InlineShapes
    5. If shp.Type = wdInlineShapePicture Then
    6. Set para = shp.Range.Paragraphs(1)
    7. Set nextPara = para.Next
    8. If Not nextPara Is Nothing Then
    9. '修改下一行文本的樣式
    10. With nextPara.Range
    11. .ParagraphFormat.Alignment = wdAlignParagraphCenter '文本居中
    12. .ParagraphFormat.LineSpacingRule = wdLineSpaceSingle '行距
    13. .Font.name = '黑體' '字體名稱
    14. .Font.Size = 12 '字體大小
    15. .ParagraphFormat.CharacterUnitFirstLineIndent = 0
    16. .ParagraphFormat.FirstLineIndent = CentimetersToPoints(0)
    17. End With
    18. End If
    19. End If
    20. Next shp
    21. End Sub

    (6)頁面設置

            這里就羅列的一些常用的頁面設置方法,僅供參考和copy。更多詳細的屬性可自行查閱開發文檔。

    代碼如下:

    1. Sub installPage() '修改頁面設置
    2. Dim doc As Document
    3. Set doc = ActiveDocument
    4. With doc.PageSetup
    5. .LineNumbering.Active = False
    6. .Orientation = wdOrientPortrait '頁面方向為縱向
    7. .topMargin = CentimetersToPoints(3.3) '上邊距
    8. .bottomMargin = CentimetersToPoints(3.3) '下邊距
    9. .LeftMargin = CentimetersToPoints(2.8) '左邊距
    10. .RightMargin = CentimetersToPoints(2.6) '右邊距
    11. .Gutter = CentimetersToPoints(0) '裝訂線
    12. .HeaderDistance = CentimetersToPoints(1.5) '頁眉
    13. .FooterDistance = CentimetersToPoints(1.75) '頁腳
    14. .PageWidth = CentimetersToPoints(21) '紙張寬
    15. .PageHeight = CentimetersToPoints(29.7) '紙張高
    16. .FirstPageTray = wdPrinterDefaultBin
    17. .OtherPagesTray = wdPrinterDefaultBin
    18. .SectionStart = wdSectionNewPage '節的起始位置:新建頁
    19. .OddAndEvenPagesHeaderFooter = False '不勾選“奇偶頁不同”
    20. .DifferentFirstPageHeaderFooter = False '不勾選“首頁不同”
    21. .VerticalAlignment = wdAlignVerticalTop '頁面垂直對齊方式為“頂端對齊”
    22. .SuppressEndnotes = False '不隱藏尾注
    23. .MirrorMargins = False '不設置首頁的內外邊距
    24. .TwoPagesOnOne = False
    25. .BookFoldPrinting = False
    26. .GutterPos = wdGutterPosLeft '裝訂線位于左側
    27. .LayoutMode = wdLayoutModeLineGrid '版式模式為“只指定行網格”
    28. End With
    29. End Sub

            到此,所有分享結束了,希望上述經歷和代碼可以幫助你們。還有更多功能和方法值得我和你們去研究,感謝瀏覽。有其他好的問題和經驗可以在評論區留言或私信我。?(?????)?

      本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發布,不代表本站觀點。請注意甄別內容中的聯系方式、誘導購買等信息,謹防詐騙。如發現有害或侵權內容,請點擊一鍵舉報。
      轉藏 分享 獻花(0

      0條評論

      發表

      請遵守用戶 評論公約

      類似文章 更多

      主站蜘蛛池模板: 久久精品国产国产精品四凭| 成人免费精品网站在线观看影片| 日韩人妻中文字幕精品| 中文字幕av无码免费一区| 亚洲 欧洲 无码 在线观看| 亚洲AV永久无码精品一区二区国产 | 亚洲人成无码网站久久99热国产| 日日噜噜夜夜爽爽| h无码精品3d动漫在线观看| 丁香五月婷激情综合第九色| 亚洲中文字幕无码久久精品1| 久久WWW免费人成一看片| 中文字幕一卡二卡三卡| 天堂资源中文最新版在线一区| 国产一区日韩二区欧美三区| 亚洲国产成人久久精品软件| 内射毛片内射国产夫妻| 国产成AV人片久青草影院| AAA级久久久精品无码片| 一区二区三区激情都市| AV区无码字幕中文色| 韩国免费a级毛片久久| 国产揄拍国产精品| 中文 在线 日韩 亚洲 欧美| 日本高清在线观看WWW色| 波多野结衣中文字幕一区二区三区| 青青国产揄拍视频| 中文字幕AV无码人妻| 国产亚洲精品自在久久蜜TV| 亚洲国产精品久久久天堂麻豆宅男 | 一区二区三区无码高清视频| 国产福利在线观看免费第一福利| 日本熟妇XXXX潮喷视频| 亚洲国产午夜精品理论片妓女| 丰满人妻AV无码一区二区三区| 亚洲欧美激情在线一区| 亚洲欧美日韩在线码| 一本色道久久东京热| 中文字幕人成乱码中文乱码 | 丰满爆乳在线播放| 国产日韩久久免费影院|