ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[分享] 表格处理(宏)

[复制链接]

TA的精华主题

TA的得分主题

发表于 2012-3-11 02:34 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 413191246se 于 2012-4-23 17:33 编辑

[code=vb]Sub 表格处理()
' 若光标在表格内则处理光标所在表格;否则将处理所有表格(仅限规则表格!)
    On Error Resume Next
    Dim i As Long
    i = ActiveDocument.Tables.Count
    If i = 0 Then MsgBox "当前文档无表格!", vbOKOnly + vbCritical, "表格处理": Exit Sub
    Dim a As Long, b As Long, c As String, h As String, s As String, t As Table, n As Long
    c = MsgBox("是:自动    否:自定义    取消:放弃", vbYesNoCancel + vbExclamation, "表格处理")
    If c = vbYes Then
        h = 0.9
        s = 12
        a = 1
        b = 1
    ElseIf c = vbNo Then
        h = InputBox("请输入表格行高值:(0.7-1.2 厘米比较美观)", "表格处理", "0.9")
        If h = "" Then Exit Sub
        s = InputBox("请输入表格内文字字号:(比正文小半号比较美观)" & vbCr & "三号/16磅,小三/15磅,四号/14磅,小四/12磅,五号/10.5磅", "表格处理", "12")
        If s = "" Then Exit Sub
        If MsgBox("根据内容调整表格吗?", vbYesNo + vbExclamation, "自动调整") = vbYes Then a = 1
        If MsgBox("所有表格表头加粗吗?", vbYesNo + vbExclamation, "表头加粗") = vbYes Then b = 1
    Else
        Exit Sub
    End If
    If Selection.Information(wdWithInTable) = True Then Selection.Tables(1).Select: n = 1
    For Each t In ActiveDocument.Tables
        If n = 1 Then Set t = Selection.Tables(1) Else t.Select
        t.Range.Font.Color = wdColorBlue
' 表格标准化
        With t
            With .Rows
                .WrapAroundText = False
                .Alignment = wdAlignRowLeft
                .HeightRule = wdRowHeightAtLeast
                .Height = CentimetersToPoints(h)
            End With
            .AutoFitBehavior (wdAutoFitWindow)
            .AutoFitBehavior (wdAutoFitWindow)
            With .Range
                With .Cells
                    .DistributeWidth
                    .VerticalAlignment = wdCellAlignVerticalCenter
                End With
                .Font.Size = s
                With .ParagraphFormat
                    .Alignment = wdAlignParagraphCenter
                    .CharacterUnitFirstLineIndent = 0
                    .FirstLineIndent = CentimetersToPoints(0)
                    .Space1
                End With
            End With
            .Shading.BackgroundPatternColor = wdColorAutomatic
' 根据内容调整表格
            If a = 1 Then
                .AutoFitBehavior (wdAutoFitContent)
                .AutoFitBehavior (wdAutoFitContent)
            End If
            .Select
            .AutoFitBehavior (wdAutoFitWindow)
            .AutoFitBehavior (wdAutoFitWindow)
' 表头加粗
            If b = 1 Then
                With .Rows(1).Range.Font
                    .Name = "黑体"
                    .Name = "Times New Roman"
                    .Bold = True
                    .Color = wdColorRed
                End With
            End If
        End With
    Next
    If n <> 1 Then Selection.MoveLeft Unit:=wdCharacter, Count:=1
End Sub[/code]

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-3-13 23:58 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-4-6 09:44 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
顶以更新!

TA的精华主题

TA的得分主题

发表于 2012-4-6 12:36 | 显示全部楼层
本帖最后由 sqhsqhli 于 2012-4-6 12:38 编辑

ActiveDocument.Range.Font.Color = vbRed

这是range对象的一个优点

不过我还真不太明白ActiveDocument.Range和ActiveDocument.content的区别在哪儿

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-4-6 14:56 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
老弟,你这像 VB6 语言啊!我还是倾向于以“录制宏”后的 VBA 代码为准,再加上个人编辑,我用颜色都用 wdColorRed 这样的。只要效果一样,哪个都行啊。

TA的精华主题

TA的得分主题

发表于 2012-4-6 15:36 | 显示全部楼层
sqhsqhli 发表于 2012-4-6 12:36
ActiveDocument.Range.Font.Color = vbRed

这是range对象的一个优点

这个问题很有意思。
仔细检查了一下对象浏览器中Document对象的Range,包含显示隐含成员,均未发现有Document对象的Range属性,只有Document对象的Range方法。相比如Selection对象,Paragraph对象,它们是有Range属性的。
鉴于此,Range方法作用于Document对象时,如果缺省Start参数,它值默认为0,如果缺少End参数,它的默认值为文档结束位置。
Sub Example()
    With ThisDocument
        .Range(End:=10).Select    ''''选中文档前10个字符
        '等同于
        .Range(Start:=0, End:=10).Select
        .Range(Start:=10).Select    ''''从选中第11个字符开始至文档结束区域
        ''''等同于
        .Range(Start:=10, End:=.Content.End).Select
    End With
End Sub
ActiveDocument.Range是方法,通过Range方法返回一个Range对象;ActiveDocument.content是属性,通过Content属性返回一个Range对象。两者意义不同,但都返回了Activedocument.StoryRanges(wdMainTextStory)这个Range对象,当然您也可以反向理解,都返回了Content属性所指向的Range.

Range.jpg

TA的精华主题

TA的得分主题

发表于 2012-4-7 08:06 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2012-4-7 20:16 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
好好想一想

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-4-9 02:20 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2012-4-9 19:29 | 显示全部楼层
本帖最后由 konggs 于 2012-4-9 19:32 编辑
守柔 发表于 2012-4-6 15:36
这个问题很有意思。
仔细检查了一下对象浏览器中Document对象的Range,包含显示隐含成员,均未发现有Doc ...


守兄说的对。
对于VB或者说VBA这种缺少参数,带来的方便性显而易见,大大的方便了我们。

我在学习其他语言时,发现这种缺省的参数,也有他的两面性:即太多的“不严谨”的特性,将导致结果的“不确定”性,必须靠经验来记忆变成了“必须”。
所以,有时候觉得,严谨的语法可能更有利于我们的学习。

不知老大同意否?

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

本版积分规则

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

GMT+8, 2024-12-29 19:13 , Processed in 0.025386 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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