ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

关于多项内容的替换问题

[复制链接]

TA的精华主题

TA的得分主题

发表于 2005-4-30 07:09 | 显示全部楼层

我略作修饰了一下,你运行一下:

Option Compare Text '不区分大小写 Option Explicit '显式变量声明 Sub PrintInWordPages() Dim WdApp As Word.Application, WdDoc As Word.Document, i As Word.Range Dim DocFullName As String, FindString As String, PageItem As String, DelText As String Dim Fcount As Integer, J As Integer, FindString1 As String On Error Resume Next '忽略错误 With Sheet10 .Cells(1, 16).FormulaR1C1 = "=DATE(YEAR(NOW()),MONTH(NOW()),0)" '写上月末日期 .Cells(1, 17).FormulaR1C1 = "=YEAR(RC[-1])&IF(LEN(MONTH(RC[-1]))=1,""0""&MONTH(RC[-1]),MONTH(RC[-1]))&DAY(RC[-1])" FindString = .[m1] '获得搜索字符 Sheet3.Cells(1, 18) = .Cells(1, 17) End With Sheet3.Activate Sheet3.Range(Cells(1, 18), Cells(1, 18)).NumberFormatLocal = "@" '获得文档路径 DocFullName = ThisWorkbook.Path & "\往来对账单\" & Sheet3.Cells(1, 18) & ".Doc" ' MsgBox (FindString) '如果找不到该文档,则友情提示并退出程序 ' If Dir(DocFullName) = "" Then MsgBox "Excel没有找到" & DocFullName & " ,请确认WORD文档名是否正确!", vbExclamation, "Warnning": Exit Sub Set WdApp = New Word.Application '定义一个新的WORD Application ' WdApp.Visible = True '显示程序窗口 '定义一个WdDoc文档,为指定打开的文档 Set WdDoc = WdApp.Documents.Open(FileName:=DocFullName, PasswordDocument:="gzw212535") With WdDoc With .Styles(wdStyleNormal).Font If .NameFarEast = .NameAscii Then .NameAscii = "" End If .NameFarEast = "" End With With .PageSetup .Orientation = wdOrientPortrait .TopMargin = CentimetersToPoints(0.9) .BottomMargin = CentimetersToPoints(1.2) .LeftMargin = CentimetersToPoints(1.4) .RightMargin = CentimetersToPoints(1.4) .PageWidth = CentimetersToPoints(24) .PageHeight = CentimetersToPoints(28) .VerticalAlignment = wdAlignVerticalTop .BookFoldPrintingSheets = 1 .GutterPos = wdGutterPosLeft .LayoutMode = wdLayoutModeLineGrid End With DelText = "In case error*changed." With .Content.Find '查找 .ClearFormatting '清除查找格式 .MatchWildcards = True '使用通配符 '全部替换为空格 .Execute FindText:=DelText, ReplaceWith:="", Replace:=wdReplaceAll End With For Each i In .Words '遍历每个词组 If i Like "[A-Z]*" And Not i Like "*#*" Then i = VBA.Space(Len(i)) Next With .Content.Find '查找 .ClearFormatting '清除查找格式 '将如NO.等形式的.替换为空格 .Execute FindText:=" .", ReplaceWith:=" ", Replace:=wdReplaceAll End With With .Content.Find '在全文中查找 .ClearFormatting '清除查找格式 For J = 6 To 0 Step -1 '循环 FindString1 = VBA.Space(2 ^ J) & "^p" '生成指定的查找项目文字 '全部替换" .Execute FindText:=FindString1, ReplaceWith:="^p", Replace:=wdReplaceAll Next End With .Close True End With WdApp.Quit '退出WORD Set WdApp = Nothing '释放对象变量 End Sub '----------------------

注:由于你调整WORD文档页面设置,故WORD主程序窗口我没有将VISIBLE属性设置为TRUE.另,你的EXCEL中的代码也不是很精简,需要进一步改进.

WORD中的代码与EXCEL中还是有比较大的区别的,不能生搬硬套的.

TA的精华主题

TA的得分主题

 楼主| 发表于 2005-5-1 18:18 | 显示全部楼层

[em04],本人不是科班出身,是半路出家的,水平较次,目前还基本处于温饱线以下,有些时候为了能弄饱肚子,就顾不到吃像了,等到阔了,再讲究讲究品味吧!呵呵!谢谢斑主!

  还想问一个关于“品味”的问题,为什么这段代码运行的速度这么慢?(300页左右的文档需要15分钟。)

TA的精华主题

TA的得分主题

发表于 2005-5-2 06:11 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

你的这种情况,本来就比较特殊,就是英文与数字一起时,不可以删除,这样,只能以遍历的形式解决。

我重新再修饰了一下,我实测为:四页纸3秒(直接在WORD中)

Option Compare Text '不区分大小写 Option Explicit '显式变量声明 Sub PrintInWordPages() Dim WdApp As Word.Application, WdDoc As Word.Document, i As Word.Range Dim DocFullName As String, FindString As String, PageItem As String, DelText As String Dim Fcount As Integer, J As Integer, FindString1 As String, aPar As Word.Paragraph On Error Resume Next '忽略错误 With Sheet10 .Cells(1, 16).FormulaR1C1 = "=DATE(YEAR(NOW()),MONTH(NOW()),0)" '写上月末日期 .Cells(1, 17).FormulaR1C1 = "=YEAR(RC[-1])&IF(LEN(MONTH(RC[-1]))=1,""0""&MONTH(RC[-1]),MONTH(RC[-1]))&DAY(RC[-1])" FindString = .[m1] '获得搜索字符 Sheet3.Cells(1, 18) = .Cells(1, 17) End With Sheet3.Activate Sheet3.Range(Cells(1, 18), Cells(1, 18)).NumberFormatLocal = "@" '获得文档路径 DocFullName = ThisWorkbook.Path & "\往来对账单\" & Sheet3.Cells(1, 18) & ".Doc" ' MsgBox (FindString) '如果找不到该文档,则友情提示并退出程序 ' If Dir(DocFullName) = "" Then MsgBox "Excel没有找到" & DocFullName & " ,请确认WORD文档名是否正确!", vbExclamation, "Warnning": Exit Sub Set WdApp = New Word.Application '定义一个新的WORD Application ' WdApp.Visible = True '显示程序窗口 '定义一个WdDoc文档,为指定打开的文档 Set WdDoc = WdApp.Documents.Open(FileName:=DocFullName, PasswordDocument:="gzw212535") With WdDoc DelText = "In case error*changed." With .Content.Find '查找 .ClearFormatting '清除查找格式 .MatchWildcards = True '使用通配符 '全部替换为空格 .Execute FindText:=DelText, ReplaceWith:="", Replace:=wdReplaceAll End With For Each aPar In .Paragraphs If aPar.Range Like "*[A-Z]*" Then For Each i In aPar.Range.Words '遍历每个词组 If i Like "[A-Z]*" And Not i Like "*#*" Then i = VBA.Space(Len(i)) Next End If Next With .Content.Find '查找 .ClearFormatting '清除查找格式 '将如NO.等形式的.替换为空格 .Execute FindText:=" .", ReplaceWith:=" ", Replace:=wdReplaceAll End With With .Content.Find '在全文中查找 .ClearFormatting '清除查找格式 For J = 6 To 0 Step -1 '循环 FindString1 = VBA.Space(2 ^ J) & "^p" '生成指定的查找项目文字 '全部替换 "" .Execute FindText:=FindString1, ReplaceWith:="^p", Replace:=wdReplaceAll Next End With .Content.Font.Name = "宋体" With .PageSetup .Orientation = wdOrientPortrait .TopMargin = CentimetersToPoints(0.9) .BottomMargin = CentimetersToPoints(1.2) .LeftMargin = CentimetersToPoints(1.4) .RightMargin = CentimetersToPoints(1.4) .PageWidth = CentimetersToPoints(24) .PageHeight = CentimetersToPoints(28) .GutterPos = wdGutterPosLeft .LayoutMode = wdLayoutModeLineGrid End With .Close True End With WdApp.Quit '退出WORD Set WdApp = Nothing '释放对象变量 End Sub '----------------------

也就是300页纸的文档,五分钟应该可以解决(我的电脑太次)

[此贴子已经被作者于2005-5-2 6:16:10编辑过]

TA的精华主题

TA的得分主题

发表于 2005-5-2 12:58 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

TA的精华主题

TA的得分主题

 楼主| 发表于 2005-5-3 18:59 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

还要请教守柔斑主两个问题:

1、为什么老是提示第一节有内容在可打印区域之外,我只有调整了页边距才能使用它不显示,但是这样的话其它的内容又不能在一行,可我查看之后,没有发现什么需要打印的东西在可找印区域之外啊?(这就是我为什么要把空格全部删除的目的,守柔斑主能不能查看一下我前面上传的文档,看看是什么问题。)

2、我把左页边距都设置成0了,可我在EPSON -1600KH型打印机上打印的内容距纸的左边距还有4CM左右,可是我已把打印机背面上纸的卡口槽已经调到最右了,我上网下载了其手册,但只有能上下调整距离,而没有左右调整的,不知守柔斑主对此可有研究。

  非常感激守柔斑主!

TA的精华主题

TA的得分主题

发表于 2005-5-4 06:18 | 显示全部楼层

此问题,网友有相当数量的提问,但基本与打印机的功能设置有关,我也无法解决。

由于大多数打印机都无法打印到纸张边缘,因此需要有最小的页边距宽度设置。如果页边距设置得太窄,Microsoft Word 会显示消息“有一处或多处页边距设在了页面的可打印区域之外”。若要防止某些文本丢失,单击“调整”以自动增加页边距宽度。如果忽略此消息而试图打印文档,Word 将显示另一条消息询问是否继续。 在我的模拟打印中,必须将左右页边距设置为2.9CM时才能正确打印.(这相当于最小值,而且我看了一下,你的页面为自定义纸张设置)

TA的精华主题

TA的得分主题

 楼主| 发表于 2005-5-4 19:45 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

守柔斑主,经过实测,我发现在不同的段落中,其右缩进是不同的,我调整了一下,在自定义纸张24CM*28CM大小中,左边距为0.2CM,右边距为1.22CM,WORD不再提示第一节有内容在可打印区域之外。是否正确,不敢确定,仅做探讨。

第二个问题,诚如斑主所言,8号上班,我去把打印机的手册找出来,研究一下,我想应该有可以左右调整的功能。如有发现,当及时报告!

TA的精华主题

TA的得分主题

 楼主| 发表于 2005-5-5 20:50 | 显示全部楼层

经过今天的实测,问题应该是出在我替换加入了手动换页符,如果把它拖曳黑了,就发现了。

第二个与打印机的送纸选项有关!

我问题已全部解决了!再次感谢守柔斑主!

TA的精华主题

TA的得分主题

发表于 2005-5-10 05:35 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
以下是引用班长在2005-5-5 20:50:00的发言:

经过今天的实测,问题应该是出在我替换加入了手动换页符,如果把它拖曳黑了,就发现了。

第二个与打印机的送纸选项有关!

我问题已全部解决了!再次感谢守柔斑主!

谢谢班长同志!这是一个很好的问题发现,我也受教了.
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-14 14:59 , Processed in 0.030998 second(s), 5 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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