Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在VBA中将字体大小减少1步_Vba_Excel_Ms Word_Font Size - Fatal编程技术网

在VBA中将字体大小减少1步

在VBA中将字体大小减少1步,vba,excel,ms-word,font-size,Vba,Excel,Ms Word,Font Size,在VBA中,是否有一种简单的方法将Word/Excel等中的字体大小减少1步 因此,如果我的字体大小是48,我可以根据标准Word 2007字体组中的字体下拉列表轻松地将其减少到36,而不是将字体大小减少12-我不知道下一个字体大小是什么 因此,与其通过float显式设置字体大小,不如: MyText.Font.Size = 36; 我可以做一些类似于: MyText.Font.Size -= Reduce by 1 step;.... forgive the pseudo code! 使

在VBA中,是否有一种简单的方法将Word/Excel等中的字体大小减少1步

因此,如果我的字体大小是48,我可以根据标准Word 2007字体组中的字体下拉列表轻松地将其减少到36,而不是将字体大小减少12-我不知道下一个字体大小是什么

因此,与其通过float显式设置字体大小,不如:

MyText.Font.Size = 36;
我可以做一些类似于:

MyText.Font.Size -= Reduce by 1 step;....  forgive the pseudo code!
使用对象的方法:


相反的是
MyText.Font.Grow

您可以选择字体和格式。

对于Excel,您可以选中“格式”工具栏上的“字体大小”组合框。这是2003年的东西,我认为它在2007年和以后仍然可以工作,但我没有它可以测试

Sub FontShrink(rng As Range)

    Dim i As Long
    Dim ctl As CommandBarComboBox

    Set ctl = Application.CommandBars("Formatting").Controls("Font Size:")

    If rng.Font.Size > CDbl(ctl.List(ctl.ListCount)) Then
        'if it's bigger than the biggest, make it the biggest
        rng.Font.Size = ctl.List(ctl.ListCount)
    Else
        For i = ctl.ListCount To 2 Step -1
            If rng.Font.Size > CDbl(ctl.List(i)) Then
                rng.Font.Size = CDbl(ctl.List(i))
                Exit For
            ElseIf rng.Font.Size = CDbl(ctl.List(i)) Then
                rng.Font.Size = CDbl(ctl.List(i - 1))
                Exit For
            End If
        Next i
    End If
End Sub

谢谢安德斯,这正是我需要的。但是,我还需要在Powerpoint 2007中执行此操作,而收缩方法在文本框形状上不可用,因此“myTextBox.TextFrame.TextRange.Font.Size.Shrink”不可用--有什么想法吗?非常感谢,JoeThanks Jean François,请看我上面的评论,Joeun幸运的是,微软的一些杰出的开发人员决定,
Font.Shrink
Font.Grow
只能在Word中使用,不能在PowerPoint或Excel中使用。恐怕您无法按任意步骤减小字体大小,例如
MyText.font.size=MyText.font.size-2
。并不是说下拉列表中列出的字体大小不那么随意……当然可以,您知道我可以通过什么方式访问字体大小列表吗。非常感谢你为什么要这样做?为什么获得与下拉列表中列出的相同的字体大小如此重要?嗯,客户端。请允许我重新表述一下:客户为什么要这样做?我正在以编程方式向powerpoint幻灯片添加一个文本框-他们希望字体大小比幻灯片标题小2步。。我在最初的问题中没有提到Powerpoint,因为我天真地认为我可以将Word/Excel代码转换为Powerpoint-收缩方法正是我所需要的,可惜它不在Powerpoint中:-/Brilliant+1请注意,如果初始字体大小不是列表的一部分,例如,如果是17,则此选项不起作用。如果ctl.List(i)>=rng.Font.Size,则更改为
,以处理此类情况。好的JFC。编辑代码,使其在介于两者之间时进入下一级别。
Sub FontShrink(rng As Range)

    Dim i As Long
    Dim ctl As CommandBarComboBox

    Set ctl = Application.CommandBars("Formatting").Controls("Font Size:")

    If rng.Font.Size > CDbl(ctl.List(ctl.ListCount)) Then
        'if it's bigger than the biggest, make it the biggest
        rng.Font.Size = ctl.List(ctl.ListCount)
    Else
        For i = ctl.ListCount To 2 Step -1
            If rng.Font.Size > CDbl(ctl.List(i)) Then
                rng.Font.Size = CDbl(ctl.List(i))
                Exit For
            ElseIf rng.Font.Size = CDbl(ctl.List(i)) Then
                rng.Font.Size = CDbl(ctl.List(i - 1))
                Exit For
            End If
        Next i
    End If
End Sub