Y a-t-il un moyen de convertir le formatage conditionnel en formatage statique dans Excel? P>
J'essaie d'exporter une gamme de feuille Excel vers un nouveau classeur, avec une apparence identique, mais aucune formule, des liens, etc. Le problème ici est que j'ai un formatage conditionnel qui s'appuie sur des calculs extérieurs à la portée exportée. p>
J'ai essayé d'enregistrer le classeur à .html, assez curieusement, le formatage des spectacles dans IE mais pas lors de la réouverture dans Excel. P>
7 Réponses :
L'idée suivante a été prise d'ici , bien que modifié pour adapter de nouvelles structures de formatage conditionnel et votre Besoins.
Cela fonctionne comme ceci: Compte tenu d'un classeur avec une formatage conditionnel (effectuez une copie de la tienne), vous mettez dans Sub A () la gamme de cellules que vous souhaitez transformer de la mise en forme conditionnelle et droite et exécutez la macro. Après cela, supprimez simplement manuellement les formats conditionnels et Presto! P>
Désolé pour la longueur du code ... La vie est parfois comme ceci :( p>
Merci, je vais essayer que lundi. Jolie folle qu'il n'y a pas de propriété .isactive sur la formatCondition (ou une voie directe d'obtenir le format calculé d'une cellule).
@Martin, vous devriez vérifier la première fois que la réponse @chris n'est pas suffisante. C'est plus facile (mais vous êtes obligé de supprimer toutes vos formules de la gamme)
J'ai fini simplement à changer mes conditionnels pour créer uniquement un lien vers des cellules à l'intérieur de la zone que je veux exporter, ils devraient donc continuer à travailler. Votre réponse est la solution générique à ce problème, donc je l'ai sélectionnée comme la réponse correcte.
Je remarque qu'aucune des solutions ici ne semble fonctionner si le format conditionnel a été défini à l'aide d'une formule. -_- Ugh
Je déteste-le quand les gens disent "Hey, pourquoi tu ne faisais-tu pas cela tout ce genre de choses", mais je vais juste le jeter là-bas: quand je voulais faire cela dans le passé, je ' Je l'ai fait en copiant la première fois la feuille de calcul en question, puis copier et coller les formules comme des valeurs (sans déplacer leur emplacement du tout). Cela gèlera évidemment le formatage conditionnel, mais signifie également que la recalisation du cahier du cahier ne vous laissera plus que des valeurs qui ne sont plus appropriées pour le formatage qui est assis sur eux. P>
Si cela ne fonctionne pas, le code de Belisarius semble super. P>
Pas mal du tout s'il ne violait pas les besoins des autres OP. +1
THX - Les valeurs de copie font partie du plan. Un problème ici est que je n'ai besoin que d'une partie de la feuille et de supprimer les autres rangées / colonnes, mais la condition relie les cellules situées à l'extérieur de cette partie. Un autre problème (mineur) avec les valeurs de copie est qu'il tue n'importe quel formatage des sous-cellules dans les cellules de texte.
Je viens d'essayer cela dans Excel 2010 B> et cela ne semble pas fonctionner. Pouvez-vous détailler les étapes que vous prenez pour copier une gamme de cellules avec un formatage conditionnel dans une feuille de calcul différente. Quand je colle valeurs i>, le formatage est complètement perdu, lorsque je colle valeurs et formatage de source i>, le formatage conditionnel i>, les règles code> sont également copiées sur le nouveau feuille :(.
Désolé, en fait - je n'ai pas fait cela très clair. J'ai édité la réponse.
Merci à Belisarius pour la réponse très utile! Cependant, il circule dans un bogue dans Excel 2003, où l'interrogation de la formule de formatage conditionnelle sur n'importe quelle cellule dans une sélection multiple / étendue renvoie la formule de la première cellule dans cette sélection! Pour contenter de cela, je devais annuler n'importe quelle sélection au début et le restaurer à la fin. J'ai également changé son sous-programme en une fonction qui prend une gamme et renvoie le nombre de cellules modifiées et ajouté un sous-programme d'enveloppe qui l'applique à la sélection actuelle et supprime tout formatage conditionnel (puisqu'il n'est plus nécessaire). Vous n'avez donc plus besoin de Pour la modifier à un code difficile de votre plage cible.
Option Explicit Sub FreezeConditionalFormattingOnSelection() Call FreezeConditionalFormatting(Selection) Selection.FormatConditions.Delete End Sub Public Function FreezeConditionalFormatting(rng As Range) Rem Originally posted by http://stackoverflow.com/users/353410/belisarius Rem at http://stackoverflow.com/questions/4692918/excel-make-conditional-formatting-static Rem Modified 2012-04-20 by gcl to: Rem (a) be a function taking target range as an argument, and Rem (b) to cancel any multiple selection before processing in order to work around a bug Rem in Excel 2003 wherein querying the formula on any cell in a multiple/extended selection Rem returns the conditional formatting on the first cell in that selection! Rem (c) return number of cells that it modified. Dim iconditionno As Integer Dim rgeCell As Range Dim nCFCells As Integer Dim rgeOldSelection As Range Set rgeOldSelection = Selection 'new nCFCells = 0 For Each rgeCell In rng rgeCell.Select 'new If rgeCell.FormatConditions.Count <> 0 Then iconditionno = ConditionNo(rgeCell) If iconditionno <> 0 Then rgeCell.Interior.ColorIndex = rgeCell.FormatConditions(iconditionno).Interior.ColorIndex rgeCell.Font.ColorIndex = rgeCell.FormatConditions(iconditionno).Font.ColorIndex nCFCells = nCFCells + 1 End If End If Next rgeCell rgeOldSelection.Select 'new FreezeConditionalFormatting = nCFCells End Function Private Function ConditionNo(ByVal rgeCell As Range) As Integer Rem posted by http://stackoverflow.com/users/353410/belisarius Rem at http://stackoverflow.com/questions/4692918/excel-make-conditional-formatting-static Dim iconditionscount As Integer Dim objFormatCondition As FormatCondition For iconditionscount = 1 To rgeCell.FormatConditions.Count Set objFormatCondition = rgeCell.FormatConditions(iconditionscount) Select Case objFormatCondition.Type Case xlCellValue Select Case objFormatCondition.Operator Case xlBetween: If Compare(rgeCell.Value, ">=", objFormatCondition.Formula1) = True And _ Compare(rgeCell.Value, "<=", objFormatCondition.Formula2) = True Then _ ConditionNo = iconditionscount Case xlNotBetween: If Compare(rgeCell.Value, "<=", objFormatCondition.Formula1) = True And _ Compare(rgeCell.Value, ">=", objFormatCondition.Formula2) = True Then _ ConditionNo = iconditionscount Case xlGreater: If Compare(rgeCell.Value, ">", objFormatCondition.Formula1) = True Then _ ConditionNo = iconditionscount Case xlEqual: If Compare(rgeCell.Value, "=", objFormatCondition.Formula1) = True Then _ ConditionNo = iconditionscount Case xlGreaterEqual: If Compare(rgeCell.Value, ">=", objFormatCondition.Formula1) = True Then _ ConditionNo = iconditionscount Case xlLess: If Compare(rgeCell.Value, "<", objFormatCondition.Formula1) = True Then _ ConditionNo = iconditionscount Case xlLessEqual: If Compare(rgeCell.Value, "<=", objFormatCondition.Formula1) = True Then _ ConditionNo = iconditionscount Case xlNotEqual: If Compare(rgeCell.Value, "<>", objFormatCondition.Formula1) = True Then _ ConditionNo = iconditionscount If ConditionNo > 0 Then Exit Function End Select Case xlExpression If Application.Evaluate(objFormatCondition.Formula1) Then ConditionNo = iconditionscount Exit Function End If End Select Next iconditionscount End Function Private Function Compare(ByVal vValue1 As Variant, _ ByVal sOperator As String, _ ByVal vValue2 As Variant) As Boolean If Left(CStr(vValue1), 1) = "=" Then vValue1 = Application.Evaluate(vValue1) If Left(CStr(vValue2), 1) = "=" Then vValue2 = Application.Evaluate(vValue2) If IsNumeric(vValue1) = True Then vValue1 = CDbl(vValue1) If IsNumeric(vValue2) = True Then vValue2 = CDbl(vValue2) Select Case sOperator Case "=": Compare = (vValue1 = vValue2) Case "<": Compare = (vValue1 < vValue2) Case "<=": Compare = (vValue1 <= vValue2) Case ">": Compare = (vValue1 > vValue2) Case ">=": Compare = (vValue1 >= vValue2) Case "<>": Compare = (vValue1 <> vValue2) End Select End Function
J'ai ramassé cet ajout sur Excel.Tips.com pour faire ce travail pour Excel 2010 et l'adapter à la version de GCL de Belisarius's. Substituez cette ligne sous le boîtier de xlexpression: avec ceci: p> Il rend la formule propogue correctement et à travers correctement. P > p>
Je continue à obtenir une erreur "variable non définie" lorsque je fais cela.
@Lorenzo: Vous devrez ajouter DIM F3 en tant que chaîne code> au début du code pour définir la variable F3. Notez également que vous devrez "traduire" la formule provenant du formatage conditionnel (CF) si vous utilisez une locale non anglais d'Excel. (Voir Cette réponse pour traduire)
J'ai mis en place l'addition de Belisarius et de Cameron en avant. Vous devez choisir la zone que vous souhaitez geler (de grandes sélections pourraient prendre un certain temps). J'ai remarqué s'il y a des erreurs Excel sur les cellules, cela pourrait provoquer une exception, mais sinon cela fonctionne bien sur Excel 2010. Au fait, merci à tous!
Cette approche semble bien fonctionner. Je ne l'ai implémenté que pour les couleurs de fond.
Sub FixColor() Dim r For Each r In Selection r.Interior.Color = r.DisplayFormat.Interior.Color Next r Selection.FormatConditions.Delete End Sub
C'est parfait, une solution beaucoup plus simple que les autres solutions de l'Excel moderne! Facilement adaptable à d'autres propriétés également si vous devez, notez qu'il supprimera également des cellules fusionnées dans la gamme
Je vous suggère une approche beaucoup plus facile qui fonctionnera tout le temps. J'ai aussi essayé fort avec VBA mais il était si difficile que je suis resté au milieu.
Pour convertir le formatage conditionnel en statique, nous allons d'abord convertir Excel en HTML (page Web), puis retour à Excel. Veuillez suivre l'approche ci-dessous. P> dans le processus de sauvegarde du classeur Excel au format HTML, le programme "Bandes" Tout le formatage conditionnel et le rend explicite (absolu). Cependant, vous devez être conscient que ce processus fait également la même chose avec vos formules, ce qui permet de sauver tout comme valeur, à la place. P> p>
Vous pourriez être capable de copier depuis le navigateur HTML et Coller-> Spécial juste le formatage. Si cela ne fonctionne pas, copiez-le du navigateur et de coller dans une feuille Excel vide et de la copie et collez le formatage.