2012-04-26 8 views
1

シート名を切り捨てたとき:エラー私が使用してシートに名前を付けています

  arrayCollabName = Array("CBDeltaBlockStatus_SAP03_to_Delta01", "CBDeltaBlockStatus_SAP03_to_Delta02", "CBDeltaDeliveryInformation_SAP03_to_Delta01") 

      If Len(arrayCollabName(idx)) > 31 Then 
       ActiveSheet.Name = Left(arrayCollabName(idx), 31) 
      Else 
       ActiveSheet.Name = arrayCollabName(idx) 
      End If 

配列の第一では、名前が31文字に切り捨てられますとき、第二の名前が似ているとVBがエラーを投げている「シートの名前を変更できません別のシート、参照されるオブジェクトライブラリ、またはvisualbasicによって参照されるワークブックと同じ名前に変更します。

私はエラーなしでこれを行うとCBDeltaBlock_SAP03_to_Delta01CBDeltaBlock_SAP03_to_Delta02または任意の名前としてシートに名前を付けることができます任意の方法。

+0

はいできます。そのためには、エラー処理を使用するか、シートが(ループ内に)存在するかどうかを確認する必要があります。 –

答えて

0

シート名が既に存在する場合は、変更する例です。

Option Explicit 

Sub Sample() 
    Dim i As Long 
    Dim strShName As String 

    strShName = "BlahBlah" 

    Sheets.Add 

    Do Until DoesSheetExist(strShName) = False 
     i = Int((1000 * Rnd) + 1) 
     strShName = strShName & i 
    Loop 

    ActiveSheet.Name = strShName 
End Sub 

Function DoesSheetExist(ByVal strSheetName As String) As Boolean 
    Dim ws As Worksheet 
    On Error Resume Next 
    Set ws = Sheets(strSheetName) 
    On Error GoTo 0 
    If Not ws Is Nothing Then DoesSheetExist = True 
End Function 

上記の方法では、シートの最後に乱数が追加されます。あなたが昇順にしたい場合は、以下のコードを使用してください。

Option Explicit 

Sub Sample() 
    Dim i As Long 
    Dim strShName As String 

    strShName = "BlahBlah" 

    Sheets.Add 

    If DoesSheetExist(strShName) = True Then 
     i = 1 
     Do Until DoesSheetExist(strShName & i) = False 
      i = i + 1 
     Loop 
     strShName = strShName & i 
    End If 

    ActiveSheet.Name = strShName 
End Sub 

Function DoesSheetExist(ByVal strSheetName As String) As Boolean 
    Dim ws As Worksheet 
    On Error Resume Next 
    Set ws = Sheets(strSheetName) 
    On Error GoTo 0 
    If Not ws Is Nothing Then DoesSheetExist = True 
End Function 

:上記のコードは単なるサンプルコードです。エラー処理は上記のコードに組み込まれておらず、エラー処理は必須であることは言うまでもない。

関連する問題