2017-09-27 14 views
1

I16の値に基づいてワークシートの名前を変更したいと思っている以下のコードがあります。しかし、ターゲットアドレスが空白の場合は/何も私はサブを終了したい場合。 (コードのこの部分は機能しません)。ワークシート変更イベント

誰かがこの問題を解決する方法をアドバイスできれば、非常に感謝しています。

Private Sub Worksheet_Change(ByVal Target As Range) 

Dim KeyCells As Range 
Set KeyCells = Range("I16") 
Dim WSname As String 
WSname = Range("I16").Value 

If KeyCells Is Nothing Then Exit Sub 

Sheet23.Name = "BISSB" 
Sheet25.Name = "RMIB" 
Sheet26.Name = "MORIB" 
Worksheets(WSname).Name = "Stage 3 V1" 

End Sub 

答えて

1

代わりの

If KeyCells Is Nothing Then Exit Sub 

使用

If IsEmpty(KeyCells) Then Exit Sub 

のisEmpty関数は空白のセルをチェックするために使用することができます。セルが空白の場合はTRUE、それ以外の場合はFALSEを返します。

+0

これは完璧に機能しました! –

+0

@SeanBailey - あなたはようこそ! – Mrig

2

置き換えます

If Trim(WSname) = "" Then Exit Sub 

説明:あなたはすでにあなたのKeyCells範囲を設定するので、したがって、それはNothingになることはありません、あなたのコードでSet KeyCells = Range("I16")を使用して

If KeyCells Is Nothing Then Exit Sub 

を。 KeyCellsの範囲の値をチェックし、WSname文字列変数があるとします。

+0

おかげで、この仕事を! –

+1

@SeanBailey私は 'IsEmpty'関数を使って慎重になるでしょう、"隠れている "スペースに注意してください。その関数は空のセルを 'Empty'とみなさず、' Trim'オプションは全ての空白を取り除きます –

0

すでにKeyCellを宣言して「I16」に設定しています。 KeyCellsには​​既にセルが含まれているため、条件が正しく機能しないのはこのためです。 WSname = ""かどうかを調べるか、値が含まれているかどうかを確認してください。

0

変更イベントコードを使用する正しい方法は、コードが自動的にトリガーされ、いくつかのアクションを実行するように指示することです。

現在、シート上のセルが変更されるたびに、コードがトリガされ、コードで定義されたアクションが実行されます。

変更イベントコードをトリガし、セルI16が変更されたときにのみ事前定義されたアクションを実行し、コードごとにシート名を変更したいとします。右?

もしそうなら、あなたはこのような何かをしようとする...

Private Sub Worksheet_Change(ByVal Target As Range) 
If Target.CountLarge > 1 Then Exit Sub 
Dim KeyCells As Range 
Set KeyCells = Range("I16") 
Dim WSname As String 
WSname = Range("I16").Value 

If Not Intersect(Target, KeyCells) Is Nothing Then 
    If Target <> "" Then 
     Sheet23.Name = "BISSB" 
     Sheet25.Name = "RMIB" 
     Sheet26.Name = "MORIB" 
     Worksheets(WSname).Name = "Stage 3 V1" 
    End If 
End If 
End Sub 
関連する問題