2013-06-28 1 views
1

J'utilisant la macro Recorder les éléments suivants:Avoir forme conditionnelle blancs de saut macro dans Excel

Application.ScreenUpdating = False 

    Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlBetween, _ 
     Formula1:="=0", Formula2:="=19.5" 
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority 
    With Selection.FormatConditions(1).Font 
     .Bold = False 
     .Italic = True 
     .ColorIndex = 4 

    End With 
    Selection.FormatConditions(1).StopIfTrue = True 

    Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlBetween, _ 
     Formula1:="=19.6", Formula2:="=34.4" 
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority 
    With Selection.FormatConditions(1).Font 
     .Bold = False 
     .Italic = True 
     .ThemeColor = xlThemeColorDark1 
     .TintAndShade = -0.499984740745262 
    End With 
    Selection.FormatConditions(1).StopIfTrue = False 

With Selection 
     .HorizontalAlignment = xlCenter 
     .VerticalAlignment = xlBottom 
     .WrapText = False 
     .Orientation = 0 
     .AddIndent = False 
     .IndentLevel = 0 
     .ShrinkToFit = False 
     .ReadingOrder = xlContext 
     .MergeCells = False 
    End With 
Selection.FormatConditions(1).StopIfTrue = False 

Puis-je utiliser une macro pour couper toutes les conditions et ne laisser que la mise en forme. Cependant, peu importe ce que j'ai fait, Isblank, ajoutant une autre condition de mise en forme conditionnelle pour ne fonctionner que sur des espaces, après la mise en forme conditionnelle, la mise en forme est verte (0-19.5 verte, mais il n'y avait rien dans la cellule).

Existe-t-il un moyen d'ajouter une ligne de saut à cette macro? S'il est vide, je veux qu'il passe à la cellule suivante. Je n'ai pas de gammes, c'est pourquoi tout est dans la sélection.

Répondre

0

Si la mise en forme est tout ce que vous voulez, utilisez la macro que vous avez enregistrée ici et copiez simplement le code qui provoque le formatage.

With Selection.FormatConditions(1).Font 
     .Bold = False 
     .Italic = True 
     .ThemeColor = xlThemeColorDark1 
     .TintAndShade = -0.499984740745262 
End With 

Ce bloc de code semble avoir une partie de la mise en forme que vous voudrez peut-être. En outre, étant donné que vous travaillez avec une sélection au lieu de chaque cellule individuellement, il est plus difficile de rechercher une cellule vide. Autant que je sache, vous ne pouvez pas le faire parce que vous traitez la sélection comme une gamme entière. Une cellule est aussi une gamme. Quelqu'un me corrige si j'ai tort.

+0

je dois appliquer la mise en forme sur un autre ensemble de données, mais sans les conditions, donc je ne peux pas simplement utiliser la macro pour formater les données (car ce ne serait pas correct). Je pourrais utiliser une formule mais mes données ne sont pas de la même taille ou au même endroit à chaque fois ... – user2532928

1

Vous pouvez parcourir chaque cellule de la sélection et appliquer uniquement le format si la cellule n'est pas vide.

Option Explicit 

Sub test() 

Dim cel As Range 

Application.ScreenUpdating = False 
On Error Resume Next 

For Each cel In Selection 
    If cel <> "" Then 

    cel.FormatConditions.Add Type:=xlCellValue, Operator:=xlBetween, _ 
     Formula1:="=0", Formula2:="=19.5" 
    cel.FormatConditions(cel.FormatConditions.Count).SetFirstPriority 
    With cel.FormatConditions(1).Font 
     .Bold = False 
     .Italic = True 
     .ColorIndex = 4 

    End With 
    cel.FormatConditions(1).StopIfTrue = True 

    cel.FormatConditions.Add Type:=xlCellValue, Operator:=xlBetween, _ 
     Formula1:="=19.6", Formula2:="=34.4" 
    cel.FormatConditions(cel.FormatConditions.Count).SetFirstPriority 
    With cel.FormatConditions(1).Font 
     .Bold = False 
     .Italic = True 
     .ThemeColor = xlThemeColorDark1 
     .TintAndShade = -0.499984740745262 
    End With 
    cel.FormatConditions(1).StopIfTrue = False 

With cel 
     .HorizontalAlignment = xlCenter 
     .VerticalAlignment = xlBottom 
     .WrapText = False 
     .Orientation = 0 
     .AddIndent = False 
     .IndentLevel = 0 
     .ShrinkToFit = False 
     .ReadingOrder = xlContext 
     .MergeCells = False 
    End With 
cel.FormatConditions(1).StopIfTrue = False 

End If 

Next cel 
Application.ScreenUpdating = True 
End Sub 
+0

Hm, je pensais que ça pourrait marcher mais quand j'utilise trouver remplacer le format de couleur de vert à **, il devient blanc cellules en ** avec un formatage vert. Aussi après que j'utilise ma macro pour couper le formatage quand je tape des nombres dans cette cellule, c'est vert. Je pense que ma macro de mise en forme conditionnelle (que je ne peux pas poster ici) conserve le formatage tout en supprimant les conditions dans l'ordre, et le résultat "par défaut" est le vert. Si j'ajoute une condition pour formater la police vide si la cellule est vide, est-ce que cela aiderait? – user2532928

+0

J'ai lu votre commentaire cinq fois. Je n'ai toujours aucune idée de ce que tu veux dire. La macro que j'ai publiée effectue les actions de formatage que vous avez dans votre macro. Cela ne s'applique tout simplement pas aux cellules vides. C'était la question et c'est la réponse. Si vous avez un autre problème, posez une nouvelle question. – teylyn

+0

Désolé, ce n'était pas clair. Étape 1: Appliquez la macro ci-dessus. Étape 2: Appliquez mes conditions de coupe et ne laissez que la macro de formatage. Étape 3: utilisez find et remplacez tout le format vert de l'échantillon faible par **. Dans cette situation, toutes les cellules vides contiennent maintenant un ** au lieu d'être vide, ce qui est mon problème. Le find find pense qu'il y a un formatage vert dans les cellules vides (résultat de la première macro). – user2532928

0

je suis tombé sur un problème similaire au conditionnel moi-même mise en forme, avec des cellules qui sont vides ou ont une valeur de chaîne, où je voulais ignorer l'ancien.

J'ai trouvé que les fonctions de mise en forme conditionnelle ne fonctionnent pas correctement avec ADDRESS(), mais que je pourrais écrire des fonctions définies par l'utilisateur à utiliser avec = AND(), qui contourneraient le problème.

Public Function CellContent() As Variant 

    On Error Resume Next 

    CellContent = Application.Caller.value 

End Function 

Public Function Cell_HasContent() As Boolean 

    On Error Resume Next 

    If Application.Caller.value = "" Then 
    Cell_HasContent = False 
    Else 
    Cell_HasContent = True 
    End If 

End Function 

Les instructions Resume Next sont critiques. Si vous essayez de vérifier que tous les non-blancs ont une valeur de dire, 2, vous pouvez vérifier avec:

Formula1:="=AND(CellContent()=2,CellHasContent())" 
Questions connexes