2017-10-17 91 views
0

我正在尝试编写一个允许我在字体颜色之间切换的宏。为了保持这个简单,让我们只说两种字体颜色。从黑色到蓝色或蓝色到黑色。基于当前字体颜色在两种字体颜色(或案例)之间切换的VBA代码

但是,我想让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 
+0

办法'如果Selection.font.ThemeColor = xlThemeColorAccent1 then' ... ? – SeanC

+0

谢谢,感谢帮助。你的if-then语句肯定会做到这一点。不过,我只是注意到,通过试图简化我的问题使其更容易理解,因此将其划分为2个案例(黑色或蓝色)可以消除其他一些问题。有没有办法确定工具栏上的字体颜色选择?(而不是活动单元本身,我开始相信这是不可行的。) – Growth128

+0

因此,您想知道用户当前选择的字体颜色,而不仅仅是目前的选择? – SeanC

回答

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 
+0

谢谢你,你的方法和SeanC都做到了。实际上,我正在处理一个稍大的问题,涉及多个案例,并忽略了如何使用if-then语句形成更长的算法可以提供帮助。再次感谢! – Growth128

+0

有没有办法确定在工具栏上选择的字体颜色? (而不是活动单元本身,我开始相信这是不可行的。) – Growth128

+0

不,我不认为有一个简单的方法来做到这一点。 –

0

我能想到的唯一的办法将是一个可怕的杂牌组装电脑:使用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 
+0

谢谢您的帮助和建议! – Growth128

1

这里是要找出哪些颜色的按钮

选择它是一个杂牌虽然

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 
+0

不错。也许可以选择一个空单元格来做到这一点:在A1中有混合字体颜色格式的风险很小...... –

+0

注意:如果你选择单元格向右或向下移动,它将影响'范围。UsedRange'属性可能是不可取的方式(我忘记了确切的属性名称) – jsotola

+0

谢谢上述作品。我能够使用上述代码的一部分来解决这个不断出现的错误,并继续工作。 – Growth128