当前位置: 首页 > news >正文

VBA操作WORD(六)另存为不含宏的文档

Sub 另存为不含宏的文档()Application.DisplayAlerts = False	Application.ScreenUpdating = FalseDim oDoc As DocumentSet oDoc = Word.ActiveDocumentDim oRng As RangeSet oRng = oDoc.ContentDim sPath As String'默认存储路径,当前用户桌面,注释掉的是当前文档路径sPath = Environ("userprofile") & "\Desktop\" 'Word.ActiveDocument.Path & "\"'处理文件名Dim strDocName As StringstrDocName =ActiveDocument.Paragraphs(1).Range.Text '包含一个回车符strDocName = Replace(strDocName, Chr(13), "") 'chr(10)'删除句末回车符,没有trim空格'采用复制内容到新文档的形式,避免将宏代码带到新文档oRng.SelectoRng.CopyDim oDocTemp As DocumentSet oDocTemp = Word.Documents.AddWith oDocTemp.Application.Selection.PasteEnd With'Dim vrtSelectedItem As VariantDim fDialog As FileDialogSet fDialog = Application.FileDialog(msoFileDialogSaveAs)With fDialog.AllowMultiSelect = False.Filters.Clear '不清空会造成多次添加.Filters.Add "Word文件", "*.doc;*.docx;*.docm", 1.InitialFileName = sPath '& strDocName 'Left(vrtSelectedItem, Len(vrtSelectedItem) - 5)'返回值-1表示按下确认按钮。如果没有判断,那么无论点击哪个按钮,均会保存文件到磁盘。If .Show = -1 Then'Set oDocTemp = Application.Documents.Save(vrtSelectedItem, ReadOnly:=True)'vrtSelectedItem为空'.Execute'execute是SaveAs对话框配套的保存命令,执行的是直接另存为操作,会把宏代码带到新文档。改为调用SaveAs2方法完成存储操作'.SelectedItems.Item(1)是对话框文件名修改后的名字。SelectedItems(1)为nulloDocTemp.SaveAs2 filename:=.SelectedItems.Item(1), FileFormat:=wdFormatDocumentDefaultoDocTemp.Close FalseEnd IfEnd WithSet fDialog = NothingApplication.ScreenUpdating = TrueApplication.DisplayAlerts = True
End Sub

上面代码需要注意地方两点,也是浪费我很多时间的地方,一是如果采用标题之类作为文件名,因为包括了回车符(换行符)导致代码一直报错,需要先删掉才能保存成功。

第二点,微软官方文档SaveAs2例子的人机交互有点不是很友好,直接用InputBox让用户输入文件名(见中间注释掉的代码)。所以考虑用dialog弹出另存的对话框,由用户选择文件类型和修改文件名(默认默认为文件内容的第一行(标题),减少手工劳动),但又有新的问题,dialog的.execute命令会直接将当前文档另存为新文档,导致VBA宏代码等也跟着到新文档,徒增文件体积。而我希望不要把宏代码带到新文档,采用声明一个新的文档对象,并且把当前文档的内容复制过去的形式,再使用了SaveAs2方法另存为新生成的文档对象。

上面的代码很好的结合了两方的优点,解决了缺点,完美!上面的处理方法是原创,反正我没看到过类似的解决方案。

中间注释掉对文件名处理部分,留给有需要的人参考。

'摘抄自微软官方文档的一个例子Dim intPos As IntegerintPos = InStrRev(strDocName, ".")'此处删除后缀名,后续另存为对话框中选择文件类型后再加上后缀名If intPos = 0 Then' 如果文档还未保存,问用户输入文件名strDocName = InputBox("请输入要保存的文件名:")Else'删除原来的后缀名并添加新的后缀名strDocName = Left(strDocName, intPos - 1)strDocName = strDocName & ".docx"End If
http://www.lryc.cn/news/98661.html

相关文章:

  • 分享69个Java源码,总有一款适合您
  • 《cool! autodistill帮你标注数据训练yolov8模型》学习笔记
  • Rust vs Go:常用语法对比(十)
  • SliverPersistentHeader组件 实现Flutter吸顶效果
  • Nginx性能优化配置
  • 杭州多校2023“钉耙编程”中国大学生算法设计超级联赛(4)
  • 音视频入门之音频采集、编码、播放
  • 在 Linux 系统中,如何发起POST/GET请求
  • 文心一言大数据模型-文心千帆大模型平台
  • django学习笔记(1)
  • postgresql主从搭建
  • 将Parasoft和ChatGPT相结合会如何?
  • Go text/template详解:使用指南与最佳实践
  • Stable Diffusion在各种显卡上的加速方式测试,最高可以提速211.2%
  • Java读取外链图片忽略ssl验证转为base64
  • 系统架构设计师 10:软件架构的演化和维护
  • Windows 11 绕过 TPM 方法总结,通用免 TPM 镜像下载 (2023 年 7 月更新)
  • EXCEL,如何比较2个表里的数据差异(使用数据透视表)
  • 字节抖音小程序,使用 uniapp 调起内置支付
  • django模板继承和组件了解
  • 首屏优化,给以图片为背景的元素增加相似背景,优化用户体验,background-image 绘制规则
  • 【用户体验分析报告】 按需加载组件,导致组件渲染卡顿,影响交互体验?组件拆包预加载方案来了!
  • idea 关闭页面右侧预览框/预览条
  • CSS3 Flexbox
  • 东南大学轴承故障诊断(Python代码,CNN模型,适合复合故障诊断研究)
  • ubuntu--Motrix
  • PHP 3des加解密新旧方法可对接加密
  • 【朴素贝叶斯-新闻主题分类】
  • 安卓面试问题记录
  • php-golang-jsonrpc2.0 rpc-codec/jsonrpc2和tivoka/tivoka实践