2015-09-15 5 views
1

Я работаю над панелью/статистикой для сотрудников моей компании, и я столкнулся с икотой с одним из моих кодов. Вот немного фона для началаИзменение имени одного листа при изменении другого

У каждого сотрудника есть 2 листа со своей другой статистикой.

Первый лист всегда отображается и содержит макрос, который будет скрывать и активировать второй лист (так что книга не становится слишком неуправляемой.) Когда вы щелкаете второй лист, у меня есть макрос, который скроет (он использует workbook_Sheetdeactivate, чтобы закрыть лист, если он имеет свойство, связанное с 2-го листа)

имя вкладки первого листом добавляются в ячейку (в моем случае range("A62")) с формулой "=MID(CELL("filename",A1),FIND("]",CELL("filename",A1))+1,255)".

Затем я делаю эту ячейку равной range("A1") на втором листе. Я хочу, чтобы имя второго листа равнялось range("A1") & «Достижения», так что на втором листе мы можем ссылаться на мои макросы на первом листе. (Пример: если sheet1 является «Bobby», sheet2 является «Bobby Achievements»)

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

Вот код:

dim ws as worksheet 

'Sorting through each sheet to find "Achievement Sheets" 
For Each ws in Workbook 
    If ws.range("W1").Value = "Achievement Lists" Then 
     ws.name = ws.Range("A1") & " Achievements" 
    End if 
Next ws 

ответ

0

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

Private Sub Worksheet_Calculate() 
    If Range("A1") & " Achievements" <> Me.Name Then 
     Me.Name = Range("A1") & " Achievements" 
    End If 
End Sub 

или использовать «SheetCalculate событие в объекте рабочей книги:

Private Sub Workbook_SheetCalculate(ByVal Sh As Object) 
    On Error Resume Next 
    If Sh.Range("W1").Value = "Achievement Lists" Then 
     If Sh.Range("A1").Value & " Achievements" <> Sh.Name Then 
      Sh.Name = Sh.Range("A1") & " Achievements" 
     End If 
    End If 
End Sub 
+0

Да, я думал сделать что-то подобное (я не один, чтобы не быть немного сырой, ха-ха). Проблема в том, что я хочу, чтобы этот код работал для любого сотрудника, который я добавляю с помощью другого макроса. Если бы один код мог работать для всей книги, а не один, я бы добавил к каждому листу, намного лучше для меня –

+0

Хорошо Просто сделало кучу больше исследований, похоже, что это единственный способ, который я могу найти для этого. Я заставлю его работать, спасибо за помощь! –

+0

В объекте рабочей книги вы можете использовать событие SheetCalculate. Обновленный ответ для разработки. – hughg

Смежные вопросы