ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

在excel中用VBA代码操作word文档

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-11-3 12:43 | 显示全部楼层 |阅读模式
Sub 调试()
   Dim AppWord As Object 'word程序对象
   Dim MyWord As Object 'word文档对象
   Dim mf

   Dim MySheet As Worksheet '用于输出的工作表对象
   Dim R_sc As Long '输出行

   Dim fso As Object 'fso对象
   Dim InputPath, Cha, StrT, Str(1 To 70) As String '提取数据的文件夹路径

   Dim S_start As Long '选取字符的开始位置
   Dim S_end As Long '选取字符的结尾位置
   Dim i, j, k, n, m As Integer
   Set MySheet = ThisWorkbook.Sheets("调试")
   MySheet.Range("A3:H2000").Clear '清空输出表
   StrT = ""
   InputPath = ThisWorkbook.Path
   mf = Dir(ThisWorkbook.Path & "\*田径运动会*.doc*")
   Set AppWord = CreateObject("Word.Application")
   AppWord.Visible = False '不显示word窗体
   If mf <> "" Then
      Set MyWord = AppWord.Documents.Open(ThisWorkbook.Path & "\" & mf)
      With AppWord.Selection.Find
         '.HomeKey unit:=0 '光标置于文件首
         'With .Find
            .ClearFormatting
            .Text = "七("
            .Replacement.Text = "初一("
            .Forward = True
            .Wrap = wdFindStop
            .MatchWildcards = True
            .Execute Replace:=wdReplaceAll
         'End With
      End With
   Else
      MsgBox "没有这个Word文档!", 16, "警告......"
   End If
end sub
这段代码目的是为了替换word文档中的"七("为"初一(",运行时能定位到第一个"七(",但不能执行替换,请大师指点!

TA的精华主题

TA的得分主题

发表于 2023-11-4 00:52 | 显示全部楼层
AI 写的代码吗?看代码:前半部分除了删除a3:H2000外不知道你要干嘛;后半部分处理WORD文档肯定有问题,而且是低级错误,对象都用错了。至少要将 With AppWord.Selection.Find 改成  With MyWord.Content.Find,不过代码其他地方也有问题,没有示例,无法帮你调试。

TA的精华主题

TA的得分主题

发表于 2023-11-4 12:15 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-11-4 12:37 | 显示全部楼层

Sub 调试()
   Dim AppWord As Object 'word程序对象
   Dim MyWord As Object 'word文档对象
   Dim mf

   Dim MySheet As Worksheet '用于输出的工作表对象
   Dim R_sc As Long '输出行

   Dim fso As Object 'fso对象
   Dim InputPath, Cha, StrT, Str(1 To 70) As String '提取数据的文件夹路径

   Dim S_start As Long '选取字符的开始位置
   Dim S_end As Long '选取字符的结尾位置
   Dim i, j, k, n, m As Integer
   Set MySheet = ThisWorkbook.Sheets("调试")
   MySheet.Range("A3:H2000").Clear '清空输出表
   StrT = ""
   InputPath = ThisWorkbook.Path
   mf = Dir(ThisWorkbook.Path & "\*田径运动会*.doc*")
   Set AppWord = CreateObject("Word.Application")
   AppWord.Visible = False '不显示word窗体
   If mf <> "" Then
      Set MyWord = AppWord.Documents.Open(ThisWorkbook.Path & "\" & mf)
      MsgBox "YGD"
      If Not MyWord Is Nothing Then
         With MyWord.Content.Find
            .ClearFormatting
            .Text = "七("
            .Replacement.Text = "初一("
            .Forward = True
            .Wrap = wdFindStop
            .MatchWildcards = True
            .Execute Replace:=wdReplaceAll
         End With
      End If
   Else
      MsgBox "没有这个Word文档!", 16, "警告......"
   End If
   i = 0
   j = 3
   k = 0
   n = 1
   '遍历word文档中的字符并赋值给变量Cha
   For i = 0 To MyWord.Range.End
      If i < MyWord.Range.End Then '当i = MyWord.Range.End Then时不能执行Cha = MyWord.Range(i, i + 1)
         Cha = MyWord.Range(i, i + 1) '从第i个字符开始获取i+1个字符
         StrT = StrT & Cha
      Else
         AppWord.Documents.Save
         MyWord.Close
         Set MyWord = Nothing
         AppWord.Application.Quit
         Set MySheet = Nothing
         Set AppWord = Nothing
         Set fso = Nothing
      End If
   Next
   Str(1) = Mid(StrT, InStr(StrT, "甲组男子100米"), InStr(StrT, "甲组男子200米") - InStr(StrT, "甲组男子100米"))
   Str(2) = Mid(StrT, InStr(StrT, "甲组男子200米"), InStr(StrT, "甲组男子400米") - InStr(StrT, "甲组男子200米"))
   Str(3) = Mid(StrT, InStr(StrT, "甲组男子400米"), InStr(StrT, "甲组男子800米") - InStr(StrT, "甲组男子400米"))
   Str(4) = Mid(StrT, InStr(StrT, "甲组男子800米"), InStr(StrT, "甲组男子1500米") - InStr(StrT, "甲组男子800米"))
   Str(5) = Mid(StrT, InStr(StrT, "甲组男子1500米"), InStr(StrT, "甲组男子5000米") - InStr(StrT, "甲组男子1500米"))
   Str(6) = Mid(StrT, InStr(StrT, "甲组男子5000米"), InStr(StrT, "甲组男子跳高") - InStr(StrT, "甲组男子5000米"))
   Str(7) = Mid(StrT, InStr(StrT, "甲组男子跳高"), InStr(StrT, "甲组男子助跑跳远") - InStr(StrT, "甲组男子跳高"))
   Str(8) = Mid(StrT, InStr(StrT, "甲组男子助跑跳远"), InStr(StrT, "甲组男子立定三级跳") - InStr(StrT, "甲组男子助跑跳远"))
   Str(9) = Mid(StrT, InStr(StrT, "甲组男子立定三级跳"), InStr(StrT, "甲组男子助跑三级跳") - InStr(StrT, "甲组男子立定三级跳"))
   Str(10) = Mid(StrT, InStr(StrT, "甲组男子助跑三级跳"), InStr(StrT, "甲组男子铅球") - InStr(StrT, "甲组男子助跑三级跳"))
   Str(11) = Mid(StrT, InStr(StrT, "甲组男子铅球"), InStr(StrT, "甲组女子100米") - InStr(StrT, "甲组男子铅球"))
   Str(12) = Mid(StrT, InStr(StrT, "甲组女子100米"), InStr(StrT, "甲组女子200米") - InStr(StrT, "甲组女子100米"))
   Str(13) = Mid(StrT, InStr(StrT, "甲组女子200米"), InStr(StrT, "甲组女子400米") - InStr(StrT, "甲组女子200米"))
   Str(14) = Mid(StrT, InStr(StrT, "甲组女子400米"), InStr(StrT, "甲组女子800米") - InStr(StrT, "甲组女子400米"))
   Str(15) = Mid(StrT, InStr(StrT, "甲组女子800米"), InStr(StrT, "甲组女子1500米") - InStr(StrT, "甲组女子800米"))
   Str(16) = Mid(StrT, InStr(StrT, "甲组女子1500米"), InStr(StrT, "甲组女子3000米") - InStr(StrT, "甲组女子1500米"))
   Str(17) = Mid(StrT, InStr(StrT, "甲组女子3000米"), InStr(StrT, "甲组女子跳远") - InStr(StrT, "甲组女子3000米"))
   Str(18) = Mid(StrT, InStr(StrT, "甲组女子跳远"), InStr(StrT, "甲组女子跳高") - InStr(StrT, "甲组女子跳远"))
   Str(19) = Mid(StrT, InStr(StrT, "甲组女子跳高"), InStr(StrT, "甲组女子立定三级跳") - InStr(StrT, "甲组女子跳高"))
   Str(20) = Mid(StrT, InStr(StrT, "甲组女子立定三级跳"), InStr(StrT, "甲组女子助跑三级跳") - InStr(StrT, "甲组女子立定三级跳"))
   Str(21) = Mid(StrT, InStr(StrT, "甲组女子助跑三级跳"), InStr(StrT, "甲组女子铅球") - InStr(StrT, "甲组女子助跑三级跳"))
   Str(22) = Mid(StrT, InStr(StrT, "甲组女子铅球"), InStr(StrT, "乙组男子100米") - InStr(StrT, "甲组女子铅球"))
   Str(23) = Mid(StrT, InStr(StrT, "乙组男子100米"), InStr(StrT, "乙组男子200米") - InStr(StrT, "乙组男子100米"))
   Str(24) = Mid(StrT, InStr(StrT, "乙组男子200米"), InStr(StrT, "乙组男子400米") - InStr(StrT, "乙组男子200米"))
   Str(25) = Mid(StrT, InStr(StrT, "乙组男子400米"), InStr(StrT, "乙组男子800米") - InStr(StrT, "乙组男子400米"))
   Str(26) = Mid(StrT, InStr(StrT, "乙组男子800米"), InStr(StrT, "乙组男子1500米") - InStr(StrT, "乙组男子800米"))
   Str(27) = Mid(StrT, InStr(StrT, "乙组男子1500米"), InStr(StrT, "乙组男子5000米") - InStr(StrT, "乙组男子1500米"))
   Str(28) = Mid(StrT, InStr(StrT, "乙组男子5000米"), InStr(StrT, "乙组男子跳远") - InStr(StrT, "乙组男子5000米"))
   Str(29) = Mid(StrT, InStr(StrT, "乙组男子跳远"), InStr(StrT, "乙组男子跳高") - InStr(StrT, "乙组男子跳远"))
   Str(30) = Mid(StrT, InStr(StrT, "乙组男子跳高"), InStr(StrT, "乙组男子助跑三级跳") - InStr(StrT, "乙组男子跳高"))
   Str(31) = Mid(StrT, InStr(StrT, "乙组男子助跑三级跳"), InStr(StrT, "乙组男子铅球") - InStr(StrT, "乙组男子助跑三级跳"))
   Str(32) = Mid(StrT, InStr(StrT, "乙组男子铅球"), InStr(StrT, "乙组女子100米") - InStr(StrT, "乙组男子铅球"))
   Str(33) = Mid(StrT, InStr(StrT, "乙组女子100米"), InStr(StrT, "乙组女子200米") - InStr(StrT, "乙组女子100米"))
   Str(34) = Mid(StrT, InStr(StrT, "乙组女子200米"), InStr(StrT, "乙组女子400米") - InStr(StrT, "乙组女子200米"))
   Str(35) = Mid(StrT, InStr(StrT, "乙组女子400米"), InStr(StrT, "乙组女子800米") - InStr(StrT, "乙组女子400米"))
   Str(36) = Mid(StrT, InStr(StrT, "乙组女子800米"), InStr(StrT, "乙组女子1500米") - InStr(StrT, "乙组女子800米"))
   Str(37) = Mid(StrT, InStr(StrT, "乙组女子1500米"), InStr(StrT, "乙组女子3000米") - InStr(StrT, "乙组女子1500米"))
   Str(38) = Mid(StrT, InStr(StrT, "乙组女子3000米"), InStr(StrT, "乙组女子跳远") - InStr(StrT, "乙组女子3000米"))
   Str(39) = Mid(StrT, InStr(StrT, "乙组女子跳远"), InStr(StrT, "乙组女子跳高") - InStr(StrT, "乙组女子跳远"))
   Str(40) = Mid(StrT, InStr(StrT, "乙组女子跳高"), InStr(StrT, "乙组女子铅球") - InStr(StrT, "乙组女子跳高"))
   Str(41) = Mid(StrT, InStr(StrT, "乙组女子铅球"), InStr(StrT, "乙组女子助跑三级跳") - InStr(StrT, "乙组女子铅球"))
   Str(42) = Mid(StrT, InStr(StrT, "乙组女子助跑三级跳"), InStr(StrT, "丙组男子100米") - InStr(StrT, "乙组女子助跑三级跳"))
   Str(43) = Mid(StrT, InStr(StrT, "丙组男子100米"), InStr(StrT, "丙组男子200米") - InStr(StrT, "丙组男子100米"))
   Str(44) = Mid(StrT, InStr(StrT, "丙组男子200米"), InStr(StrT, "丙组男子400米") - InStr(StrT, "丙组男子200米"))
   Str(45) = Mid(StrT, InStr(StrT, "丙组男子400米"), InStr(StrT, "丙组男子800米") - InStr(StrT, "丙组男子400米"))
   Str(46) = Mid(StrT, InStr(StrT, "丙组男子800米"), InStr(StrT, "丙组男子1500米") - InStr(StrT, "丙组男子800米"))
   Str(47) = Mid(StrT, InStr(StrT, "丙组男子1500米"), InStr(StrT, "丙组男子3000米") - InStr(StrT, "丙组男子1500米"))
   Str(48) = Mid(StrT, InStr(StrT, "丙组男子3000米"), InStr(StrT, "丙组男子跳远") - InStr(StrT, "丙组男子3000米"))
   Str(49) = Mid(StrT, InStr(StrT, "丙组男子跳远"), InStr(StrT, "丙组男子铅球") - InStr(StrT, "丙组男子跳远"))
   Str(50) = Mid(StrT, InStr(StrT, "丙组男子铅球"), InStr(StrT, "丙组男子助跑三级跳") - InStr(StrT, "丙组男子铅球"))
   Str(51) = Mid(StrT, InStr(StrT, "丙组男子助跑三级跳"), InStr(StrT, "丙组女子100米") - InStr(StrT, "丙组男子助跑三级跳"))
   Str(52) = Mid(StrT, InStr(StrT, "丙组女子100米"), InStr(StrT, "丙组女子200米") - InStr(StrT, "丙组女子100米"))
   Str(53) = Mid(StrT, InStr(StrT, "丙组女子200米"), InStr(StrT, "丙组女子400米") - InStr(StrT, "丙组女子200米"))
   Str(54) = Mid(StrT, InStr(StrT, "丙组女子400米"), InStr(StrT, "丙组女子800米") - InStr(StrT, "丙组女子400米"))
   Str(55) = Mid(StrT, InStr(StrT, "丙组女子800米"), InStr(StrT, "丙组女子1500米") - InStr(StrT, "丙组女子800米"))
   Str(56) = Mid(StrT, InStr(StrT, "丙组女子1500米"), InStr(StrT, "丙组女子3000米") - InStr(StrT, "丙组女子1500米"))
   Str(57) = Mid(StrT, InStr(StrT, "丙组女子3000米"), InStr(StrT, "丙组女子跳远") - InStr(StrT, "丙组女子3000米"))
   Str(58) = Mid(StrT, InStr(StrT, "丙组女子跳远"), InStr(StrT, "丙组女子铅球") - InStr(StrT, "丙组女子跳远"))
   Str(59) = Mid(StrT, InStr(StrT, "丙组女子铅球"), InStr(StrT, "丙组女子助跑三级跳") - InStr(StrT, "丙组女子铅球"))
   Str(60) = Mid(StrT, InStr(StrT, "丙组女子助跑三级跳"), Len(StrT) - InStr(StrT, "丙组女子助跑三级跳"))
   For i = 1 To 60
      j = 1
      Do
         'k = InStr(Str(i), "")
         'n = InStr(Str(i), "")
         'm = InStr(Str(i), "")
         'Str(i) = Right(Str(i), Len(Str(i)) - 1)
         Sheets("调试").Cells(3 + i - 1, 1) = Str(i)
         Exit Do
      Loop Until Len(Str(i)) = 2
   Next

   'Do
   'Loop Until Len(StrT) = 0
End Sub
这是还没有完善的全部代码,第一楼的只是无关问题的代码删除了而已,谢谢!但问题还是存在!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

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

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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