【问题标题】:VBA code to toggle between two font colors (or cases) based on current font color基于当前字体颜色在两种字体颜色(或大小写)之间切换的 VBA 代码
【发布时间】:2018-03-29 15:34:26
【问题描述】:

我正在尝试编写一个允许我在字体颜色之间切换的宏。为了简单起见,我们只说两种字体颜色。从黑色到蓝色或从蓝色到黑色。

但是,我希望 excel 告诉我的宏是选择了黑色还是蓝色字体(在当前单元格中或一般情况下)。然后从那里确定要更改为哪种颜色。

因此,如果工具栏上的字体颜色选择为黑色,它将运行将字体更改为蓝色(通过运行以下脚本的适当部分)。如果工具栏上的字体颜色选择为蓝色,它将运行将字体更改为黑色(也可以通过运行以下脚本的适当部分)。

下面,我有将字体颜色更改为蓝色或黑色的代码。 这里的问题是我不知道正确的语法或代码让 excel 确定工具栏上当前选择的字体颜色(或单元格,如果在工具栏上这样做是不可能的)。确定字体颜色是我遇到问题的宏的第一部分。

感谢您的帮助!

Sub toggle()

'need code to determine font color, then to execute appropriate code below
With Selection.font
    .ThemeColor = xlThemeColorAccent1
    .TintAndShade = 0
End With
Exit Sub
blackpath:

With Selection.font
    .ThemeColor = xlThemeColorLight1
    .TintAndShade = 0
End With

End Sub

【问题讨论】:

  • if Selection.font.ThemeColor = xlThemeColorAccent1 then ...?
  • 谢谢,感谢您的帮助。您的 if-then 语句绝对可以解决问题。但是,我只是注意到,通过尝试简化我的问题以便更容易理解,因此将其框定为 2-case 问题(黑色或蓝色)会消除一些其他问题。有没有办法确定工具栏上的字体颜色选择?(而不是活动单元格本身,我开始相信这是不可行的。)
  • 那么,您想知道用户当前为字体颜色选择了什么,而不仅仅是当前选择的内容?
  • 是的,没错。这是我要解决的更大问题的一部分。如何确定在工具栏上选择的字体颜色(开始或其他属性)(在任何特定的选定单元格上都不需要)?我真的开始认为这在 vba 中是不可行的,因为 vba 只是应用或提取一个对象或属性,而工具栏更像是一个应用选定颜色的菜单。 (如果这有意义的话。)

标签: excel vba fonts colors case


【解决方案1】:

从@SeanC 开始:

Sub toggle()

    With Selection.font
        If .ThemeColor = xlThemeColorLight1 Then
            .ThemeColor = xlThemeColorAccent1
            .TintAndShade = 0
        ElseIf .ThemeColor = xlThemeColorAccent1 Then
            .ThemeColor = xlThemeColorLight1
            .TintAndShade = 0
        End If
    End With

End Sub

【讨论】:

  • 谢谢您,您的方法和 SeanC 都可以解决问题。实际上,我正在处理一个稍微大一点的问题,涉及多个案例,并忽略了使用 if-then 语句来形成更长的算法如何提供帮助。再次感谢!
  • 有没有办法确定工具栏上选择的字体颜色? (而不是活动细胞本身,我开始相信这是不可行的。)
  • 不,我认为没有简单的方法可以做到这一点。
【解决方案2】:

这是一种找出按钮中选择了哪种颜色的方法

虽然是个杂牌

Option Explicit

Sub test()
    Dim aaa As Long
    Dim fontColorButton As Long

    aaa = Range("a1").Font.Color

    Range("a1").Select
    Application.CommandBars.ExecuteMso ("FontColorPicker")  ' click the "font color" button
                                                            ' get the command name from the "customize ribbon" dialog
    fontColorButton = Range("a1").Font.Color
    Range("a1").Font.Color = aaa

    Debug.Print fontColorButton

End Sub

【讨论】:

  • 不错。也许选择一个空单元格来做到这一点:A1 中存在混合字体颜色格式的风险很小......
  • 注意:如果你选择一个向右或向下的单元格,它会以一种可能不受欢迎的方式影响Range.UsedRange 属性(我忘记了确切的属性名称)
  • 谢谢你,上面的作品。我能够使用您上面的部分代码来解决这个不断出现的错误,并继续工作。
  • 你在说什么错误?请在您的问题中添加说明。这对以后的参考很重要
【解决方案3】:

我能想到的唯一方法是一个可怕的组合:使用Workbook_SheetChange 获取当前字体颜色。

Option Explicit

Dim CurCol As Long ' default is: -16776961 you could set this on Workbook_Open

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    CurCol = Target.Font.Color
End Sub

【讨论】:

  • 感谢您的帮助和建议!
猜你喜欢
  • 2012-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-23
  • 1970-01-01
  • 2016-03-09
  • 1970-01-01
相关资源
最近更新 更多