截断工作表名称时出错

时间:2012-04-26 14:57:50

标签: excel excel-vba vba

我使用以下方式命名工作表:

            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个字符时,第1个和第2个名称相似,并且VB抛出错误“无法将工作表重命名为与另一个工作表,引用的对象库或visualbasic引用的工作簿相同的名称。 “

我可以毫无错误地执行此操作,并将工作表命名为 CBDeltaBlock_SAP03_to_Delta01 CBDeltaBlock_SAP03_to_Delta02 或任何所需名称。

1 个答案:

答案 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

注意:以上代码只是示例代码。错误处理尚未包含在上面的代码中,不用说错误处理是必须的:)

相关问题