ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 旧式窗体域如何全选后设置

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-5-19 22:31 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
batmanbbs 发表于 2023-5-19 11:09
就你的代码应该可以不用重复,但我个人觉得这是养成良好习惯的问题。

比如我上面的提到的查询前执行.C ...

谢谢您耐心指导我,我仍把这代码放在原位,但作为注释备用。

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-5-20 20:35 | 显示全部楼层
本帖最后由 OKJSJSF 于 2023-5-21 21:08 编辑

基本定稿
Sub 窗体域打印设置()
    Dim i As Byte, ff As FormField
    With ActiveDocument
        If .ProtectionType <> wdNoProtection Then .Unprotect
        On Error Resume Next     '单击关闭、取消按钮或录入超范围数字时不出错,返回对话框重录
        Do
            i = InputBox("下框中可录数字1234与对应的打印效果:" & vbCr & "1  加灰色底纹             2  加下划线、字形加粗" & vbCr & "3  取消前二项设置      4  其它设置", "参数设置", 1)
            If i = 1 Or i = 2 Or i = 3 Or i = 4 Then Exit Do     '如果录入小数,VBA会自动取整,有点不明不白程序就执行了,所以变量类型可以改为占用系统资源更大的小数
        Loop
        Select Case i
            Case 1
                For Each ff In .FormFields
                    With ff.Range
                        .Shading.Texture = wdTexture15Percent
                        .Font.Underline = wdUnderlineNone
                        .Font.Bold = False
                    End With
                Next
            Case 2
                For Each ff In .FormFields
                    With ff.Range
                        .Shading.Texture = wdTextureNone
                        .Font.Underline = wdUnderlineSingle
                        .Font.Bold = True
                    End With
                Next
            Case 3
                For Each ff In .FormFields
                    With ff.Range
                        .Shading.Texture = wdTextureNone     '无底纹
                        .Font.Underline = wdUnderlineNone     '无下划线
                        .Font.Bold = False     '字形常规
                    End With
'                    ff.Range.Select
'                    Selection.ClearFormatting     '删除字符格式与段落格式相当于恢复默认正文样式,不行
'                    Selection.ClearCharacterDirectFormatting    '删除字符格式不会恢复默认字号
                Next
            Case Else
'                .DeleteAllEditableRanges wdEditorEveryone
                Application.ScreenUpdating = False
                For Each ff In .FormFields
                    ff.Range.Select     '当窗体域个数稍多时,一旦采用对象的.select方法,数据刷新明显可见,关闭屏幕刷新后效果稍好点
                    Selection.Range.Editors.Add wdEditorEveryone     '逐个增加用户可编辑区域
                Next
                Application.ScreenUpdating = True
                .SelectAllEditableRanges wdEditorEveryone
                .DeleteAllEditableRanges wdEditorEveryone
                .Application.Dialogs(wdDialogFormatFont).Show     '打开字体设置对话框
                .FormFields(1).Select     '我习惯于执行完毕后定位第一个窗休而不是最后一个。奇怪的是用代码sendkeys "^{home}",true不能返回文档开头,手工快捷键却可以
        End Select
        .Protect Type:=wdAllowOnlyFormFields, NoReset:=True
        MsgBox "执行完毕。"        
    End With
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-5-24 22:05 | 显示全部楼层
初次使用WORD宏,发现与EXCEL有点区别。
一、把代码放在快速访问工具栏命令中,最方便,任何文档打开都可享用宏功能。
二、把代码放在选项卡命令中,必须加载后才能享用。这个宏代码先放在空文档中,另存为模板文件,才能被加载。这个加载是加载“模板文档”文件,不象EXCEL是加载“加载宏工作簿”文件。加载时,活动文档不能处于保护状态。所以,我前面的“窗体域打印设置”宏必须完善一下,增加:
if activedocument.formfields.count=0 then
msgbox"本文没有窗体域。"
exit sub
end if
这个问题导致我在加载我的“窗体域打印设置”宏时弄了很多次,无法加载,最后才发现是文档保护的原因造成。文档保护后,开发工具选项卡的模板组中的文档模板按钮变灰色了,无法打开“模板和加载项”对话框。既使采用手工重新选择模板文件加载,单击确定后实际仍无法加载。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-12-27 04:08 , Processed in 0.034504 second(s), 6 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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