2017-10-17 38 views
0

J'essaie d'écrire une macro qui me permettra de basculer entre les couleurs de police. Pour garder cela simple, disons simplement deux couleurs de police. Du noir au bleu ou bleu au noir.Code VBA pour basculer entre deux couleurs de police (ou cas) en fonction de la couleur de police actuelle

Cependant, je voudrais exceller pour dire à ma macro si elle a sélectionné la police noire ou bleue (soit dans la cellule actuelle ou juste en général). Et à partir de là, déterminez la couleur à changer. Ainsi, si la sélection de la couleur de la police sur la barre d'outils est noire, la police passera en bleu (en exécutant la partie appropriée du script ci-dessous). Et si la sélection de la couleur de la police sur la barre d'outils est bleue, cela va changer la police en noir (en exécutant la partie appropriée du script ci-dessous). Ci-dessous, j'ai le code pour changer les couleurs des polices en bleu ou en noir. Le problème ici est que je ne connais pas la syntaxe ou le code correct pour qu'Excel détermine la couleur de police actuellement sélectionnée dans la barre d'outils (ou la cellule, si cela n'est pas possible dans la barre d'outils). Déterminer la couleur de la police est la première partie de la macro qui est ce que j'ai des problèmes avec.

Appréciez l'aide!

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

'si Selection.font.ThemeColor = xlThemeColorAccent1 then' ... ? – SeanC

+0

Merci, appréciez l'aide. Votre déclaration si-alors fait vraiment l'affaire. Cependant, je remarque juste que, en essayant de simplifier mon problème pour être plus facilement compris, et donc encadrer cela dans un problème à deux cas (noir ou bleu) élimine certains des autres problèmes. Y at-il un moyen de déterminer la sélection de la couleur de police sur la barre d'outils? (Et non la cellule active elle-même, je commence à croire que ce n'est pas faisable.) – Growth128

+0

Ainsi, vous voulez savoir ce qu'un utilisateur a sélectionné actuellement pour la couleur de police , et pas seulement ce qui est dans la sélection actuelle? – SeanC

Répondre

1

À la suite de @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

Merci, votre méthode et SeanC font l'affaire. Je travaillais sur un problème un peu plus grand avec plus d'un cas, et j'ai négligé l'utilisation de déclarations if-then pour former un algo plus long. Merci encore! – Growth128

+0

Y at-il un moyen de déterminer la couleur de police sélectionnée dans la barre d'outils? (et non la cellule active elle-même, je commence à croire que ce n'est pas faisable.) – Growth128

+0

Non, je ne pense pas qu'il y ait un moyen facile de le faire. –

0

La seule façon que je peux penser serait une bidouille horrible utiliser Workbook_SheetChange pour obtenir la couleur de la police.

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

Nous vous remercions de l'aide et des suggestions! – Growth128

1

ici est un moyen de savoir quelle couleur est sélectionné dans le bouton

est une bidouille si

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

Nice. Peut-être choisir une cellule vide pour le faire: il y a un léger risque de formatage de la couleur de police en A1 ... –

+0

note: si vous choisissez une cellule à droite ou en bas, cela affectera 'Range.UsedRange' attribut d'une manière éventuellement indésirable (j'ai oublié le nom exact de l'attribut) – jsotola

+0

Merci, les travaux ci-dessus. J'ai été en mesure d'utiliser des parties de votre code ci-dessus pour résoudre cette erreur qui ne cesse de monter, et continuer à travailler. – Growth128