Excel & VBA - изменение цвета вкладки, если первые 3 буквы имени вкладки = "xxx" - PullRequest
0 голосов
/ 26 сентября 2018

Новичок в VBA в Excel, но надеется получить некоторую помощь с макросом, пока я встаю.Любая помощь будет принята с благодарностью.

У меня есть рабочая книга, в которой я хотел бы автоматически раскрасить вкладки на основе названий вкладок.Мои имена вкладок / листов часто являются кодами.Некоторые из моих существующих имен листов (например):

  • CIS22ABC
  • CIS22CBA
  • NAS22XYZ
  • NAS22ZXY
  • MYДАННЫЕ
  • ADMIN и т. Д.

Я пытаюсь реализовать сценарий, который выполняется по всей книге (т. Е. В «ThisWorkbook»), который ищет первые 3 буквы каждого имени вкладки и делаетцвета вкладок на основе этих букв.Есть много листов, которые добавляются и удаляются постоянно, поэтому массив имен не будет работать.

Короче говоря, я надеюсь сделать следующее:

  • Еслипервые 3 буквы имени листа = "CIS", затем Tab.Color = RGB (0, 255, 255)
  • Если первые 3 буквы имени листа = "NAS", то Tab.Color = RGB (66, 134, 244)
  • Иначе ничего не делать!

Опять любая помощь будет отличной.Спасибо.

Ответы [ 3 ]

0 голосов
/ 26 сентября 2018

Это будет автоматически выполняться каждый раз, когда вы добавляете новый лист.

Существует большое количество событий, с которыми вы можете связать это, чтобы запускать макрос автоматически без вмешательства пользователя.Вот некоторые известные события, которые могут удовлетворить ваши потребности лучше, чем событие NewSheet, которое я использовал ниже: SheetChange, SheetBeforeDelete, SheetActivate и т. Д.


Этот код должен бытьпомещается в область кодирования под ThisWorkbook, а точнее лист или модуль в VBE.

Option Explicit

Private Sub Workbook_NewSheet(ByVal Sh As Object)

Dim ws As Worksheet

For Each ws In Worksheets
    Select Case Left(ws.Name, 3)
        Case "CIS"
            ws.Tab.Color = RGB(0, 255, 255)
        Case "NAS"
            ws.Tab.Color = RGB(66, 134, 244)
        'Case "ABC"
            'Add as many of these as you need inbetween _
             Select Case and End Select
    End Select
Next ws

End Sub
0 голосов
/ 26 сентября 2018

Это должно сработать.Сначала вам нужно сосчитать все листы, а затем пробежаться по каждому из них и проверить первые 3 буквы.Если это правда, вы можете покрасить его:

For i = 1 To Sheets.Count

   If Left(Sheets(i).Name, 3) = "CIS" Then
      Sheets(i).Tab.Color = RGB(0, 255, 255)
   End If

   If Left(Sheets(i).Name, 3) = "NAS" Then
      Sheets(i).Tab.Color = RGB(66, 134, 244)
   End If  

Next i
0 голосов
/ 26 сентября 2018

Попробуйте это:

Dim sheet As Worksheet
For Each sheet In ActiveWorkbook.Worksheets
Dim name As String
name = sheet.name

If Len(name) > 3 Then
    Dim bit As String
    bit = Mid(name, 1, 3)
    Select Case bit
        Case "CIS"

            sheet.Tab.Color = 16776960
        Case "NAS"
            'etc etc

    End Select

End If
Next
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...