2016-08-10 6 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にこのコードがある場合、シート1で変更を加えた場合にのみ、このコードが有効になります。このコードをすべてのワークシートの後ろに追加するか、ワークブックレベルシート変更イベント 'Private Sub Workbook_SheetChange(ByVal Sh As Object、ByVal Target as Range)を使用するだけで、ワークブックオブジェクトでアクセスできます。 – cyboashu

+0

私のソリューションはあなたのケースで機能しましたか? – RCaetano

+1

@cyboashu、遅い返信のためにお詫び申し上げます。私は実際に両方の返信の組み合わせでこれを動作させることができたので、両方の入力に感謝します。 workbook_sheetの変更は、私が最終的に探していたブックのレベルシート変更イベントでした。あなたがそれを回答として受け入れると、私はそれを受け入れます。数日後に更新されない場合は、現在の回答を受け入れます。もう一度、助けてくれてありがとう! – dl00065

答えて

0

としては

を要求しました。したがって、Sheet1にこのコードがある場合、シート1で変更を加えた場合にのみ、このコードが有効になります。このコードをすべてのワークシートの後ろに追加するか、ワークブックレベルシートの変更イベントPrivate Sub 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 

HTH、あなたのコードは、特定のワークシートの変更のためにスコープされているため)

関連する問題