ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 328|回复: 8

[求助] AI给的公文附件代码运行不了.font.size=16看上去不错,但是提示错误,请大神们看一下

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-7-1 21:13 | 显示全部楼层 |阅读模式
本帖最后由 小声说话666 于 2023-7-1 22:50 编辑

公文附件及附件下大标题的宏
目的是 找到所有 附件开头的段落,先把附件换成附  件,然后把  附件和附件1 、2、3……  设置为黑体16磅,然后把 附件下段尾不含标题的段落设为22为22磅,宋体。以下是AI给的代码,   运行到    .Font.Size = 16  就报错了,下一句 黑体那一句也报错, 注释掉后.Font.Size = 22 也错了,求大神修改一下代码为盼。

Sub FormatAttachments()
    Dim para As Paragraph
    Dim rng As range
    Dim i As Integer
   
    '遍历文档中的每一个段落
    For Each para In ActiveDocument.Paragraphs
        Set rng = para.range
        rng.Start = rng.Start + 1 '跳过段落开头的段落标记
        
        '判断段落是否以“附件”开头
        If InStr(1, rng.Text, "附件") = 1 Then
        
            '将“附件”替换为“附 件”
            rng.Text = Replace(rng.Text, "附件", "附 件")
            
            '设置符合条件的段落格式
            If InStr(1, rng.Text, "附 件") = 1 Or _
            (InStr(1, rng.Text, "附件") = 1 And IsNumeric(Mid(rng.Text, 4))) Then
                With rng.ParagraphFormat
                    .LeftIndent = InchesToPoints(0)
                    .SpaceBefore = 0
                    .SpaceAfter = 0
                    .Alignment = wdAlignParagraphLeft
                    .LineSpacingRule = wdLineSpaceSingle
                    .Font.Size = 16
                    .Font.Name = "黑体"
                End With
            End If
            
            '设置附件后的段落格式
            If (InStr(1, rng.Text, "附件") = 1 And IsNumeric(Mid(rng.Text, 4))) Then
                For i = rng.Start + Len(rng.Text) To ActiveDocument.range.End
                    If Mid(ActiveDocument.range(i, i + 1).Text, 1, 1) = "。" Or _
                    Mid(ActiveDocument.range(i, i + 1).Text, 1, 1) = "," Or _
                    Mid(ActiveDocument.range(i, i + 1).Text, 1, 1) = ";" Or _
                    Mid(ActiveDocument.range(i, i + 1).Text, 1, 1) = ":" Or _
                    Mid(ActiveDocument.range(i, i + 1).Text, 1, 1) = "?" Or _
                    Mid(ActiveDocument.range(i, i + 1).Text, 1, 1) = "!" Then
                        Exit For
                    ElseIf i = ActiveDocument.range.End Then
                        With ActiveDocument.range(rng.End, rng.End + 1).ParagraphFormat
                            .SpaceBefore = 0
                            .SpaceAfter = 0
                            .Alignment = wdAlignParagraphCenter
                            .LineSpacingRule = wdLineSpaceSingle
                            .Font.Size = 22
                            .Font.Name = "宋体"
                        End With
                    End If
                Next i
            End If
            
        End If
    Next para
End Sub

AI 解释代码:

这段VBA代码是用来格式化Word文档中的附件段落的。具体的操作如下:

1. 遍历文档中的每一个段落。
2. 对于每个段落,首先将其范围(rng)设置为段落内容的范围,然后将范围的起始位置增加1,以跳过段落开头的段落标记。
3. 判断段落是否以“附件”开头。如果是,执行以下操作:
   - 将“附件”替换为“附 件”。
   - 判断段落的内容是否是以“附 件”开头,或者以“附件”开头且第三个字符是数字。如果是,设置符合条件的段落格式:
     - 左边距设为0英寸
     - 前后的空格设为0
     - 对齐方式设为左对齐
     - 行间距设为单倍
     - 字体大小设为16号
     - 字体名称设为“黑体”

4. 判断段落的内容是否以“附件”开头且第三个字符是数字。如果是,执行以下操作:
     - 遍历段落后面的文本,直到文档范围的末尾。
     - 如果遇到标点符号(.、,、;、:、?、!), 跳出循环。
     - 如果遍历到文档的末尾(也就是段落的内容后面没有标点符号),设置附件后的段落格式:
       - 前后的空格设为0
       - 对齐方式设为居中对齐
       - 行间距设为单倍
       - 字体大小设为22号
       - 字体名称设为“宋体”

这段代码的作用是在Word文档中将附件段落进行特殊格式化,更好地展示附件的信息。


附件.rar

10.26 KB, 下载次数: 9

TA的精华主题

TA的得分主题

发表于 2023-7-2 09:57 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 batmanbbs 于 2023-7-2 11:23 编辑

image.png


修改后代码虽然可以执行,但是没有效果,需要把这句去掉或者注释掉

image.png


PS:AI提供的这段代码还有其他问题,而且效率也比较低,就别在上面浪费精力了。现在来看,AI对于简单单一的要求还是可以完成的,稍稍复杂点的还是不行,提问者自己还是需要懂得一点编程知识才行。

TA的精华主题

TA的得分主题

发表于 2023-7-2 10:28 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
有点明白了,楼主是要公文排版,附件用黑体,附件后的标题用宋体字。
上面的代码肯定无法满足你的需求。

PS:如果知道Quicker这个软件,可以试试我编写的一个"公文排版"动作,应该可以满足你的需求

TA的精华主题

TA的得分主题

发表于 2023-7-2 10:38 | 显示全部楼层
你的示例中有两点不符合公文要求,所以用我的动作实现不了:

一是附件3中标题中带有。,不认为是标题
二是根据党政公文国家标准,附件中是没有空格的
1.gif

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-7-2 12:03 | 显示全部楼层
batmanbbs 发表于 2023-7-2 10:38
你的示例中有两点不符合公文要求,所以用我的动作实现不了:

一是附件3中标题中带有。,不认为是标题

那一处 附件3 后带标点就是为了验证代码。

附件3可以变成黑体,但下边不能做为大标题。  


现在是这个代码修改后,只能把附件变黑体了,附件下的后边大标题没有变成22磅。我用的是WORD 2016  和 WPS2019,  不知道那里出错了

TA的精华主题

TA的得分主题

发表于 2023-7-2 17:28 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 batmanbbs 于 2023-7-2 17:36 编辑
小声说话666 发表于 2023-7-2 12:03
那一处 附件3 后带标点就是为了验证代码。

附件3可以变成黑体,但下边不能做为大标题。  

因为代码有问题啊,我在上面已经说过了。

如果你能听明白,自己改也行。识别。,;:?!之类的时候,代码没有判断段落符(就算判断,如果遇到空行也会有问题),导致每次循环都到文档结束位置,而文档结束前肯定会有。,之类符号的,所以代码一直就都没有执行过设置标题的步骤。

PS:代码问题多,效率低,改也没有什么意义。另外,遇到"附件:+文件名"这样的格式,识别也有问题,根据党政公文国标,这样的属于附件说明,不应该设置成黑体,而应该是正文字体。

TA的精华主题

TA的得分主题

发表于 2023-7-2 21:14 | 显示全部楼层
小声说话666 发表于 2023-7-2 12:03
那一处 附件3 后带标点就是为了验证代码。

附件3可以变成黑体,但下边不能做为大标题。  

还是帮你改了一下,参照AI的思路可以执行,效率吗,呵呵,就不考虑了
  1. Sub FormatAttachments()
  2.     Dim para As Paragraph
  3.     Dim i&, rEnd&
  4.     For Each para In ActiveDocument.Paragraphs
  5.         With para.Range
  6.             If InStr(.Text, "附件") = 1 Then
  7.                 With .ParagraphFormat
  8.                     .LeftIndent = 0
  9.                     .Alignment = wdAlignParagraphLeft
  10.                 End With
  11.                 With .Font
  12.                     .Size = 16
  13.                     .Name = "黑体"
  14.                 End With
  15.                 rEnd = 0
  16.                 For i = ActiveDocument.Range(0, .End + 1).Characters.Count To ActiveDocument.Characters.Count
  17.                     If ActiveDocument.Characters(i) Like "[。,;:?!]" Then
  18.                         Exit For
  19.                     ElseIf ActiveDocument.Characters(i) = Chr(13) Then
  20.                         rEnd = ActiveDocument.Characters(i).Start
  21.                     End If
  22.                 Next i
  23.                 If rEnd <> 0 Then
  24.                     With ActiveDocument.Range(.End, rEnd)
  25.                         With .ParagraphFormat
  26.                             .LeftIndent = 0
  27.                             .Alignment = wdAlignParagraphCenter
  28.                         End With
  29.                         With .Font
  30.                             .Size = 22
  31.                             .Name = "宋体"
  32.                         End With
  33.                     End With
  34.                 End If
  35.             End If
  36.         End With
  37.     Next para
  38.     Set para = Nothing
  39. End Sub
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-7-3 23:19 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
batmanbbs 发表于 2023-7-2 21:14
还是帮你改了一下,参照AI的思路可以执行,效率吗,呵呵,就不考虑了

非常感谢,已经可以对附件后的无标点段落行进行操作了。

但发现还有一点小问题。就是象:“附件: XXXX”   还有 “ 附件:1.XXXX "  等这些情况,后边段后不含标点的也被处理了。

如果加上回车 按instr(.text, “附件1” & vBcr)后,就只能处理 附件1 后边的段落,其他的就不能处理,不知道 "附件" 这里怎么才能使用通配符?

TA的精华主题

TA的得分主题

发表于 2023-7-4 12:29 | 显示全部楼层
修改了一下,直接发消息给你了
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-24 07:47 , Processed in 0.034227 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表