ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 求助如何使用VBA定制水平居中的表格样式

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-4-18 22:18 | 显示全部楼层 |阅读模式
求助!先感谢!

我想通过VBA来生成 表格样式。但是生成的表格样式都不是“水平居中”,即文字在单元格内水平和垂直都是居中的。
水平居中通过设置段落格式即可解决,但是没找到垂直居中的属性或方法。

我是通过下面的代码添加表格样式mytab,但是没有找到属性和方法来设置 垂直也居中。
ActiveDocument.Styles.Add Name:="mytab", Type:=wdStyleTypeTable

网上搜索到的方法都是对已经插入的表格,通过操作表格对象的方式设置,好像也没有借鉴的意义。
Cells.VerticalAlignment = wdAlignVerticalTop

TA的精华主题

TA的得分主题

发表于 2024-4-19 08:17 | 显示全部楼层
录制一段宏看看就知道了

TA的精华主题

TA的得分主题

发表于 2024-4-19 09:04 | 显示全部楼层
示例如下:
    Range("A2:E13").Select   '选定单元格
    Selection.Font.name = "等线"   '单元格字体名称
    Selection.Font.Size = 14   '单元格字体大小
    Selection.Font.Color = RGB(255, 255, 255) '设置字体颜色
    Selection.Font.Bold = True   '单元格字体是否为粗体,可以是True或False两个值
    Selection.Font.Italic = True   '单元格字体是否为斜体,可以是True或False两个值
    Selection.Font.Underline = xlUnderlineStyleDouble   '单元格字体是否有下划线,取值True、False、xlUnderlineStyleDouble(双)、xlUnderlineStyleSingle(单)
    Selection.Font.Strikethrough = True   '单元格字体是否有删除线,可以是True或False两个值
    Selection.HorizontalAlignment = xlHAlignCenter   '水平居中:xlHAlignCenter,靠左:xlHAlignLeft,靠右:xlHAlignRight,默认:xlHAlignGeneral
    Selection.VerticalAlignment = xlVAlignCenter   '垂直居中:xlVAlignCenter;靠上:xlVAlignTop,靠上:xlVAlignBottom,默认:xlVAlignGeneral
    Selection.Interior.Color = RGB(100, 100, 100) '设置背景色
    Range("B1:E1").Select   '选定单元格
    Selection.Resize.Merge   '合并单元格
    Selection.RowHeight = 20    '行高
    Selection.ColumnWidth = 10    '列宽
    Selection.Value = "合并了单元格"    '单元格赋值 Value也可用 FormulaR1C1 (带公式赋值)

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-4-19 11:30 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
3190496160 发表于 2024-4-19 08:17
录制一段宏看看就知道了

我试了录制宏。录制过程中,在定制表格样式的时候确定选择了“文字垂直和水平居中”,但是录制完成后执行,文字始终是“左上角”效果。
以下是录制代码中截取 的部分,我猜想宏录制并没有正确录制“文字垂直和水平居中”这一步操作。

Sub tab_style()
    ActiveDocument.Styles.Add Name:="mytab", Type:=wdStyleTypeTable '添加表格样式
    With ActiveDocument.Styles("mytab").Font '设置表格中字体属性
        .NameFarEast = "宋体" '将东亚文字(如中文)环境下的字体设为“宋体”。
        .NameAscii = "Times New Roman" '将ASCII字符环境(如英文、数字等)下的字体设为“Times New Roman”。
        .NameOther = "Times New Roman" '将非东亚、非ASCII字符环境下的字体名称设为“Times New Roman”。
        .Name = "Times New Roman" '统一设置所有字符环境下的字体为“Times New Roman”。此行可能与前面三行重复,但确保了字体名称的一致性。
        .Size = 10.5 '设置字体大小为10.5磅。
        .Bold = False '禁用粗体效果。
        .Italic = False '禁用斜体效果。
        .Underline = wdUnderlineNone '取消下划线效果,其中wdUnderlineNone是Word内置的常量,表示无下划线。
        .UnderlineColor = wdColorAutomatic '设置下划线颜色为自动(通常为文本颜色),但由于上一行已禁用了下划线,此处设置不影响实际效果。
        .StrikeThrough = False '禁用删除线效果。
        .DoubleStrikeThrough = False '禁用双删除线效果。
        .Outline = False '禁用外框轮廓效果。
        .Emboss = False '禁用浮雕效果。
        .Shadow = False '禁用阴影效果。
        .Hidden = False '确保文本不被隐藏。
        .SmallCaps = False '禁用小型大写字母效果。
        .AllCaps = False '禁用全大写字母效果。
        .Color = wdColorAutomatic '设置文本颜色为自动(通常为黑色),即不指定特定颜色。
        .Engrave = False '禁用雕刻效果。
        .Superscript = False '禁用上标效果。
        .Subscript = False '禁用下标效果。
        .Scaling = 100 '设置字体缩放比例为100%,即不进行额外缩放。
        .Kerning = 1 '设置字间距调整(字偶距)为1 pt。数值越大,相邻字符之间的距离越宽。
        .Animation = wdAnimationNone '禁用动画效果。
        .DisableCharacterSpaceGrid = False '保持字符网格功能启用,即允许Word根据字体和字号自动调整字符间距。
        .EmphasisMark = wdEmphasisMarkNone '不添加任何强调标记(如着重号等)。
        .Ligatures = wdLigaturesNone '禁用连字(如ff、fi、fl等字母组合的特殊呈现形式)。
        .NumberSpacing = wdNumberSpacingDefault '使用默认的数字间距设置。
        .NumberForm = wdNumberFormDefault '使用默认的数字形式设置。
        .StylisticSet = wdStylisticSetDefault '使用默认的风格集(某些OpenType字体提供的额外样式选项)。
        .ContextualAlternates = 0 '关闭上下文交替字形(某些OpenType字体根据周围字符自动选择更合适的字形)。值为0表示不启用。
    End With
    With ActiveDocument.Styles("mytab").ParagraphFormat '设置表格中段落属性
        .LeftIndent = CentimetersToPoints(0) '将左缩进设置为0厘米(转换为点数)
        .RightIndent = CentimetersToPoints(0) '将右缩进设置为0厘米(转换为点数)。
        .SpaceBefore = 0 '段前间距设为0磅。
        .SpaceBeforeAuto = False '关闭自动段前间距。
        .SpaceAfter = 0 '段后间距设为0磅。
        .SpaceAfterAuto = False '关闭自动段后间距。
        .LineSpacingRule = wdLineSpaceSingle '设置行距规则为单倍行距。
        .Alignment = wdAlignParagraphLeft '段落对齐方式设为左对齐。
        .WidowControl = True '启用孤行控制(避免段末只剩一两行出现在下一页顶部)。
        .KeepWithNext = False '关闭“与下段同页”选项,允许段落分页。
        .KeepTogether = False '关闭“段落不拆分”选项,允许段落跨页。
        .PageBreakBefore = False '取消段前分页。
        .NoLineNumber = False '开启行号显示(如果文档已启用行号功能)。
        .Hyphenation = True '启用自动断字功能。
        .FirstLineIndent = CentimetersToPoints(0) '首行缩进设为0厘米(转换为点数)。
        .OutlineLevel = wdOutlineLevelBodyText '将段落设定为正文级别(非大纲级别)。
        .CharacterUnitLeftIndent = 0 '以字符为单位的左缩进设为0。
        .CharacterUnitRightIndent = 0 '以字符为单位的右缩进设为0。
        .CharacterUnitFirstLineIndent = 0 '以字符为单位的首行缩进设为0。
        .LineUnitBefore = 0 '以行高为单位的段前间距设为0。
        .LineUnitAfter = 0 '以行高为单位的段后间距设为0。
        .MirrorIndents = False '关闭左右缩进镜像(即左侧缩进不会影响右侧缩进)。
        .TextboxTightWrap = wdTightNone '文本框紧密环绕设置为“无紧密环绕”。
        .CollapsedByDefault = False '不默认折叠该样式段落(在大纲视图中)。
        .AutoAdjustRightIndent = True '启用自动调整右缩进(根据文本方向和对齐方式)。
        .DisableLineHeightGrid = False '不关闭基于网格的行距调整。
        .FarEastLineBreakControl = True '启用东亚语言(如中文、日文)的换行控制。
        .WordWrap = True '启用自动换行。
        .HangingPunctuation = True '启用悬挂标点(某些标点符号超出常规边界)。
        .HalfWidthPunctuationOnTopOfLine = False '禁止半角标点置于行首。
        .AddSpaceBetweenFarEastAndAlpha = True '在东亚文字与字母间添加额外空格。
        .AddSpaceBetweenFarEastAndDigit = True '在东亚文字与数字间添加额外空格。
        .BaseLineAlignment = wdBaselineAlignAuto '基线对齐方式设为自动。
    End With
    ActiveDocument.Styles("mytab").NoSpaceBetweenParagraphsOfSameStyle = False '保留默认的段间距(即不取消段间距)
    ActiveDocument.Styles("mytab").ParagraphFormat.TabStops.ClearAll '删除所有段落已定义的水平对齐位置,使得使用此样式的段落不再受之前设置的制表符影响
    ActiveDocument.Styles("mytab").Frame.Delete '使用该样式的文本将不再受到框架的影响。
    With ActiveDocument.Styles("mytab").Table
        .TableDirection = 1 '将表格方向设置为从左到右(水平方向)。在Word中,1代表水平方向,0代表垂直方向(从上到下)。
        .TopPadding = CentimetersToPoints(0) '设置表格内部单元格与表格边框之间的上边距为0厘米。CentimetersToPoints函数用于将厘米值转换为Word使用的点数单位。
        .BottomPadding = CentimetersToPoints(0) '设置表格内部单元格与表格边框之间的下边距为0厘米。
        .LeftPadding = CentimetersToPoints(0.1) '设置表格内部单元格与表格边框之间的左边距为0.1厘米。
        .RightPadding = CentimetersToPoints(0.1) '设置表格内部单元格与表格边框之间的右边距为0.1厘米。
        .Alignment = wdAlignRowCenter '将表格中的所有行内容居中对齐。
'        .Spacing = 0 '设置表格行之间的间距为0,即相邻行之间没有额外的垂直间距。
        .AllowPageBreaks = True '允许表格跨页断行。允许表格在必要时分页显示。
        .AllowBreakAcrossPage = True '允许表格跨页断行。允许单个单元格的内容跨越页面边界。
        .LeftIndent = CentimetersToPoints(0) '设置表格相对于其所在段落的左缩进为0厘米,即表格与段落左侧对齐。
        .RowStripe = 0 '设置表格的行间条纹(交替背景色)设置为无(值为0),即取消表格的交替颜色效果。
        .ColumnStripe = 0 '设置表格的列间条纹(交替背景色)设置为无(值为0),即取消表格的交替颜色效果。
    End With
    With ActiveDocument.Styles("mytab").Table
        With .Shading
            .Texture = wdTextureNone '将表格背景纹理设置为无纹理(即纯色填充)。
            .ForegroundPatternColor = wdColorAutomatic '将表格前景图案颜色设置为自动(默认系统颜色)。
            .BackgroundPatternColor = wdColorAutomatic '将表格背景图案颜色设置为自动(默认系统颜色)。
        End With
        With .Borders(wdBorderHorizontal) '设置水平边框。
            .LineStyle = wdLineStyleSingle '将边框线型设为单实线。
            .LineWidth = wdLineWidth050pt '将边框线宽设为0.5磅。(较细)。
            .Color = wdColorAutomatic '将边框颜色设为自动(默认系统颜色)。
        End With
        With .Borders(wdBorderVertical) '设置垂直边框。
            .LineStyle = wdLineStyleSingle '将边框线型设为单实线。
            .LineWidth = wdLineWidth050pt '将边框线宽设为0.5磅。(较细)。
            .Color = wdColorAutomatic '将边框颜色设为自动(默认系统颜色)。
        End With
        With .Borders(wdBorderLeft) '设置左边框。
            .LineStyle = wdLineStyleSingle '将边框线型设为单实线。
            .LineWidth = wdLineWidth150pt '将边框线宽设为1.5磅(较粗)。
            .Color = wdColorAutomatic '将边框颜色设为自动(默认系统颜色)。
        End With
        With .Borders(wdBorderRight) '设置右边框。
            .LineStyle = wdLineStyleSingle '将边框线型设为单实线。
            .LineWidth = wdLineWidth150pt '将边框线宽设为1.5磅(较粗)。
            .Color = wdColorAutomatic '将边框颜色设为自动(默认系统颜色)。
        End With
        With .Borders(wdBorderTop) '设置上边框。
            .LineStyle = wdLineStyleSingle '将边框线型设为单实线。
            .LineWidth = wdLineWidth150pt '将边框线宽设为1.5磅(较粗)。
            .Color = wdColorAutomatic '将边框颜色设为自动(默认系统颜色)。
        End With
        With .Borders(wdBorderBottom) '设置下边框。
            .LineStyle = wdLineStyleSingle '将边框线型设为单实线。
            .LineWidth = wdLineWidth150pt '将边框线宽设为1.5磅(较粗)。
            .Color = wdColorAutomatic '将边框颜色设为自动(默认系统颜色)。
        End With
        .Borders.Shadow = False '取消表格边框阴影效果。
    End With

……


后面的是进一步定制“第一行”、“第一列”、“偶数行”、“偶数列”等,我并不需要定制到这一步,后面就省略了。

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-4-19 11:33 | 显示全部楼层
tanglf188 发表于 2024-4-19 09:04
示例如下:
    Range("A2:E13").Select   '选定单元格
    Selection.Font.name = "等线"   '单元格字体 ...

非常感谢您的回复,不过我是要在Word中定制表格样式。
您给出的Excel的方式是由参考意义的,我也想过。但是定制表格样式,是没有可选对象的,所以selection是没法执行的。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-5-3 21:46 , Processed in 0.042926 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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