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によって参照されているワークブックと同じ名前に変更できません」というエラーをスローすると、1番目と2番目の名前は似ています。

いずれにせよ、エラーなしでこれを実行し、シートにCBDeltaBlock_SAP03_to_Delta01およびCBDeltaBlock_SAP03_to_Delta02または任意の名前を付けることができます。

4

1 に答える 1

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

:上記のコードは単なるサンプルコードです。エラー処理は上記のコードに組み込まれていません。言うまでもなく、エラー処理は必須です:)

于 2012-04-26T16:21:10.803 に答える