ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

请word vba编程高手帮忙

[复制链接]

TA的精华主题

TA的得分主题

发表于 2007-5-14 23:43 | 显示全部楼层 |阅读模式
我是vba编程新手,想请问版主及版友们一个问题
我有一个word档,内容大致如下:

product 20001
abcdefghijklmnopqrstuvwxyz   <= 20001的产品概说
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz;
abcdefghijklmnopqrstuvwxyz;


abcdefghijklmnopqrstuvwxyz <= 20001的产品细述
bcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz;
abcdefghijklmnopqrstuvwxyz;
abcdefghijklmnopqrstuvwxyz;


product 20002
abcdefghijklmnopqrstuvwxyz <= 20002的产品概说
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz;


abcdefghijklmnopqrstuvwxyz <= 20002的产品细述
abcdefghijklmnopqrstuvwxyz;
abcdefghijklmnopqrstuvwxyz;
abcdefghijklmnopqrstuvwxyz;


product 20003
abcdefghijklmnopqrstuvwxyz <= 20003的产品概说
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz;
abcdefghijklmnopqrstuvwxyz;
abcdefghijklmnopqrstuvwxyz;


abcdefghijklmnopqrstuvwxyz  <= 20003的产品细述
bcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz;
abcdefghijklmnopqrstuvwxyz;
abcdefghijklmnopqrstuvwxyz;

............................


如上所示,每种产品第一行都有产品号码
紧接着是产品概说,空两行,再接着产品细述
接着空两行,就是下个产品

我想把每个产品的"产品概说"及"产品细述"分别以"产品编号"产生新目录,存放在其下
例如:

\20001\
\20001\产品概说.doc
\20001\产品细述.doc

\20002\
\20002\产品概说.doc
\20002\产品细述.doc

............................

请问有高手可以帮我解答吗?
感激不尽~~~

[此贴子已经被作者于2007-5-15 0:27:16编辑过]

TA的精华主题

TA的得分主题

发表于 2007-5-15 09:39 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

'做了一个不知道是否完全符合楼主的意思

Sub CreatDoc()
   Dim myRange As Range, int_Temp As Integer, str_Temp As String
   Dim ActiveDoc As Document, Doc_Temp As Document, ActPath As String
   Set ActiveDoc = ActiveDocument
   ActiveDoc.Characters.Last.InsertAfter Chr(13) & Chr(13)  '为了得到全部要查找的结果,在文档最后加两个空段
   ActPath = ActiveDoc.Path   '获得文档路径
   Set myRange = ActiveDoc.Content
   With myRange.Find
      .ClearFormatting
      .Text = "[!^13]*^13^13^13"
      .Forward = True
      .Format = False
      .Wrap = wdFindStop
      .MatchWildcards = True
   End With
   Do While myRange.Find.Execute
      int_Temp = int_Temp + 1
      Set Doc_Temp = Documents.Add
      If (int_Temp Mod 2) = 1 Then    '有产品号码
         str_Temp = Left(myRange.Paragraphs(1).Range.Text, myRange.Paragraphs(1).Range.Characters.Count - 1)
         On Error Resume Next
         MkDir ActPath & "\" & str_Temp & "\"
         Doc_Temp.Content.Text = myRange.Text
         Doc_Temp.Paragraphs(1).Range.Delete
         Doc_Temp.SaveAs ActPath & "\" & str_Temp & "\" & "产品概说"
         Doc_Temp.Close
      Else                            '无产品号码
         Doc_Temp.Content.Text = myRange.Text
         Doc_Temp.SaveAs ActPath & "\" & str_Temp & "\" & "产品细述"
         Doc_Temp.Close
      End If
   Loop
End Sub

[此贴子已经被作者于2007-5-15 9:47:32编辑过]

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-5-15 11:35 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
兄台实在令小弟太佩服了
程序执行无误

可否麻烦兄台另一件事
就是能不能在此程序中
用selection物件,代替range物件来改写呢?
因为在文件中有些地方有其它的物件
兄台的程式在处理完后,这些物件会消失不见
故想用selection,再copy,再paste
这样应当能符合所需
再次感谢兄台

[此贴子已经被作者于2007-5-15 13:22:43编辑过]

TA的精华主题

TA的得分主题

发表于 2007-5-15 14:06 | 显示全部楼层

'2楼的代码是针对文字的,不知道您的文档中是否还有其他什么对象.内容丢失不在于selection还是range,我现在将代码修改了一下,请楼主看看运行是否还有问题.如果还有问题的话,我想您最好能把原文件上传.以便分析,如果您的文件需要保密的话,可以将里面的文字修改后上传.

Sub CreatDoc()
   Dim myRange As Range, int_Temp As Integer, str_Temp As String
   Dim ActiveDoc As Document, Doc_Temp As Document, ActPath As String
   Set ActiveDoc = ActiveDocument
   ActiveDoc.Characters.Last.InsertAfter Chr(13) & Chr(13)  '为了得到全部要查找的结果,在文档最后加两个空段
   ActPath = ActiveDoc.Path   '获得文档路径
   Set myRange = ActiveDoc.Content
   With myRange.Find
      .ClearFormatting
      .Text = "[!^13]*^13^13^13"
      .Forward = True
      .Format = False
      .Wrap = wdFindStop
      .MatchWildcards = True
   End With
   Do While myRange.Find.Execute
      int_Temp = int_Temp + 1
      myRange.Copy
      Set Doc_Temp = Documents.Add
      If (int_Temp Mod 2) = 1 Then    '有产品号码
         str_Temp = Left(myRange.Paragraphs(1).Range.Text, myRange.Paragraphs(1).Range.Characters.Count - 1)
         On Error Resume Next
         MkDir ActPath & "\" & str_Temp & "\"
         Doc_Temp.Content.Paste
         Doc_Temp.Paragraphs(1).Range.Delete
         Doc_Temp.SaveAs ActPath & "\" & str_Temp & "\" & "产品概说"
         Doc_Temp.Close
      Else                            '无产品号码
         Doc_Temp.Content.Paste
         Doc_Temp.SaveAs ActPath & "\" & str_Temp & "\" & "产品细述"
         Doc_Temp.Close
      End If
   Loop
End Sub

[此贴子已经被作者于2007-5-15 14:19:16编辑过]

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-5-15 14:37 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
chylhr兄台
实在是太感谢您了
物件都可以copy至新档了
原来只要改成copy&paste就可以了

真羡幕您对vba编程可以随心所欲地自在遨游
弟不知还要历练多久才能有您功力的五成
再次感谢您..

弟继续加油研究中...



TA的精华主题

TA的得分主题

发表于 2007-5-15 14:47 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

只要楼主多向几位版主与论坛中的高手请教,更关键的是你自己的勤奋,相信你一定会有很大的进步.另外值得注意的是学习的路上一旦遇到难题,千万不要气馁.

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-17 22:15 , Processed in 0.029894 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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