J'ai une macro pour importer plusieurs fichiers dans une seule feuille et leur donner des noms avec des caractères légaux. Ces fichiers et noms de fichiers varieront de temps en temps en fonction des besoins du projet. Je voudrais colorer le code comme les feuilles par nom de feuille.
Je dois donc parcourir toutes les feuilles à la recherche de phrases particulières. Comme toutes les feuilles contenant le mot «page», elles seraient colorées en bleu. Ainsi, les doublons de titre de page et les titres de page trop longs seraient tous deux des onglets bleus. Alors que les pages contenant la phrase H1 seraient toutes rouges. Donc H1 Duplicates et H1 Too Long seraient tous les deux des tabulations rouges.
Il y a des moments où un titre inclurait à la fois la page et H1, donc je dois faire une exception pour cela et choisir une couleur unique. P >
Je me rends compte que je dois parcourir toutes les feuilles en vérifiant leur existence et en indiquant ce que le nom contient et la couleur que je veux utiliser, mais je n'arrive pas à trouver une macro en un clic qui n'est pas Ce n'est pas un sous-marin privé pour accomplir cela.
Sub TabColor()
Sheets("canonicals missing").Tab.Color = vbBlack
Sheets("canonicals nonindexable canonic").Tab.Color = vbBlack
Sheets("h1 duplicate").Tab.Color = vbRed
Sheets("h1 missing").Tab.Color = vbRed
Sheets("h1 multiple").Tab.Color = vbRed
Sheets("h1 over 70 characters").Tab.Color = vbRed
Sheets("page titles duplicate").Tab.Color = vbBlue
Sheets("page titles missing").Tab.Color = vbBlue
Sheets("page titles over 65 characters").Tab.Color = vbBlue
Sheets("page titles same as h1").Tab.Color = vbBlue
End Sub
J'ai choisi la route exacte du titre car il y a des moments où ils contiennent deux mots-clés comme "page" et "h1", alors j'ai pensé il vaut mieux être explicite. Cependant, si ces titres n'existent pas, cela s'arrête. Les titres varieront toujours, il n'y a donc aucun moyen de garantir exactement quels seront les titres dans un lot donné de fichiers .xls. Je ne sais pas comment parcourir chaque feuille et vérifier son existence. Je suis très nouveau sur VBA et je trébuche.
3 Réponses :
Quelque chose comme ça peut-être?
Utiliser un pour chaque boucle sur la collection feuilles de calcul et instr pour rechercher une chaîne dans une chaîne.
Sub test_tabcol()
Dim w As Excel.Worksheet
For Each w In ThisWorkbook.Worksheets
If InStr(1, w.Name, "search for blue", vbTextCompare) <> 0 Then
w.Tab.Color = vbBlue
ElseIf InStr(1, w.Name, "search for red", vbTextCompare) <> 0 Then
w.Tab.Color = vbRed
Else
w.Tab.Color = xlNone
End If
Next w
End Sub
Voici une méthode qui colore les onglets en fonction de la couleur d'arrière-plan des cellules d'une feuille d'index. L'avantage de cette approche est que vous pouvez facilement modifier le texte de recherche et les couleurs. Le gif animé (cliquez pour une vue détaillée) me montre comment parcourir le code et les onglets de feuille sont colorés en fonction du texte dans les cellules colorées. Bien sûr, vous modifieriez le code en fonction de vos besoins.
Sub colorTabs()
Dim sh As Worksheet, r As Range
Set sh = ThisWorkbook.Worksheets("index")
Set r = sh.Range("A1")
While r <> ""
For Each sh In ThisWorkbook.Worksheets
If InStr(sh.Name, r) Then sh.Tab.ColorIndex = r.Interior.ColorIndex
Next sh
Set r = r.Offset(1, 0)
Wend
End Sub
Comme vous avez coloré les onglets qui ne contiennent pas page ou H1 dans vbBlack dans votre exemple, je suppose que vous recherchez quelque chose comme ça
Sub ColorIt()
Dim wks As Worksheet
For Each wks In ActiveWorkbook.Worksheets
' Black for all sheets
wks.Tab.Color = vbBlack
' Blue in case it contains 'page'
If InStr(1, wks.Name, "page") Then
wks.Tab.Color = vbBlue
End If
' Red in case it contains 'H1'
If InStr(1, wks.Name, "H1") Then
wks.Tab.Color = vbRed
End If
' Cyan (or another color) in case it contains 'page' and 'H1'
If InStr(1, wks.Name, "page") > 0 And InStr(1, wks.Name, "H1") > 0 Then
wks.Tab.Color = vbCyan
End If
Next wks
End Sub