2016-08-10 3 views
0

Я пытаюсь динамически изменять имя тега листа на основе значения ячейки на другом листе, «заголовок». Динамическое изменение работает хорошо, когда я делаю обновление с того же листа и изменения после нажатия ввода после изменения значения ячейки. Но когда эталонная ячейка находится на другом листе, после входа в игру нет изменений в теге листа, пока я не получу активный доступ к обновляемому листу и нажмите на листе. Есть ли способ обойти это? У меня около 20 листов, поэтому было бы сложно щелкнуть по каждому листу при внесении изменений. Вот мой код:Excel: динамически менять тег на основе значения ячейки на другом листе

Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range) 
    Set Target = Worksheet("Title").Range("A1") 
    If Target = "" Then Exit Sub 
    On Error GoTo Badname 
    ActiveSheet.Name = Left(Target, 31) 
    Exit Sub 
Badname: 
    MsgBox "Please revise the entry in A1." & Chr(13) _ 
    & "It appears to contain one or more " & Chr(13) _ 
    & "illegal characters." & Chr(13) 
    Range("A1").Activate 
End Sub 

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

Любые предложения будут оценены!

+2

, потому что вы кодируете область для изменения конкретного листа. Поэтому, если у вас есть этот код в Sheet1, только когда вы вносите изменения в sheet1, этот код будет в игре. Либо добавьте этот код за все листы, либо просто используйте событие изменения листа рабочей книги 'Private Sub Workbook_SheetChange (ByVal Sh As Object, ByVal Target As Range)' вы можете получить к нему доступ в объекте книги. – cyboashu

+0

Было ли мое решение работать на вашем деле? – RCaetano

+1

@cyboashu, извинения за поздний ответ (ушел). Мне действительно удалось получить эту работу с комбинацией обоих ответов, так что спасибо вам за вход. Изменение workbook_sheet было событием изменения листа рабочей книги, которое я в конечном счете искал, поэтому, если вы поместите это как ответ, я его приму. Если он не обновляется через несколько дней, я соглашусь с текущим ответом. Еще раз, спасибо за помощь! – dl00065

ответ

0

По просьбе

, потому что ваш код для области действия конкретного изменения рабочего листа. Поэтому, если у вас есть этот код в Sheet1, только когда вы вносите изменения в sheet1, этот код будет в игре. Либо добавьте этот код за все листы, либо просто используйте событие изменения листа рабочей книги. Частное подчинение Workbook_SheetChange (ByVal Sh As Object, ByVal Target As Range) вы можете получить к нему доступ в объекте рабочей книги.

0

Итак, у вас есть около 20 листов, поэтому было бы сложно щелкнуть по каждому листу, когда будет сделано изменение. Почему бы не перебрать все листы, чтобы обновить изменения? :)

Что-то вроде:

Dim sht As Worksheet 
Application.ScreenUpdating = False 
For Each sht In Worksheets 
    sht.Activate 
Next 
Application.ScreenUpdating = True 

НТН;)