Предотвращение дублирования значения

#excel #vba

#excel #vba

Вопрос:

Я пытаюсь создать новый рабочий лист и переименовать его в соответствии с годами. Предотвращение дублирования значений за год, похоже, работает нормально, пока я не добавил больше кодов ниже Else Sheets.Add.Name = "B. BBB " amp; strNewName . Теперь ошибка появляется всякий раз, когда я вводил одно и то же значение для имени листа. Как я могу это исправить?

 Sub NewWorksheetBBB()

    Dim strNewName As String
    Dim ws As Worksheet
    Dim boolFound As Boolean

    strNewName = InputBox("Please enter a valid year for BBB!", "Year")

    For Each ws In Worksheets
        If ws.Name Like strNewName Then boolFound = True: Exit For
    Next ws

    If boolFound = True Then
        MsgBox ("Year Already Exists! Please enter a new year!")
        Sheets(strNewName).Select
    Else
        Sheets.Add.Name = "B. BBB " amp; strNewName
    End If

    Sheets("BBB").Activate
    Sheets("BBB").Cells.Select
    Sheets("BBB").Cells.Copy

    Sheets("B. BBB " amp; strNewName).Activate
    Sheets("B. BBB " amp; strNewName).Range("A1").Select
    Sheets("B. BBB " amp; strNewName).Paste

    Application.CutCopyMode = False
    Application.ScreenUpdating = False

    Dim ShCount As Integer, i As Integer, j As Integer

    ShCount = Sheets.count

    For i = 1 To ShCount - 1
        For j = i   1 To ShCount
            If UCase(Sheets(j).Name) < UCase(Sheets(i).Name) Then
                Sheets(j).Move before:=Sheets(i)
            End If
        Next j
    Next i

    Application.ScreenUpdating = True

End Sub
 

Комментарии:

1. В строке If ws.Name Like strNewName вы проверяете, является ли какое-либо имя листа точным strNewName. Я думаю, вы хотите Like выполнить другой поиск, но вы предоставляете ему только strNewName, а не какой-либо шаблон для поиска. Для работы в шаблоне должны быть некоторые подстановочные Like знаки.

2. С какими ошибками вы сталкиваетесь?

Ответ №1:

Мне удалось это исправить. Я должен включить имя строки "B. BBB" amp; в цикл.

 Sub NewWorksheetBBB()
Dim strNewName As String
Dim ws As Worksheet
Dim boolFound As Boolean

strNewName = InputBox("Please enter a valid year for BBB!", "Year")    

For Each ws In Worksheets

If ws.Name Like "B. BBB " amp; strNewName Then boolFound = True: Exit For

Next

If boolFound = True Then
MsgBox ("Year Already Exists! Please enter a new year!")

Else

Sheets.Add.Name = "B. BBB " amp; strNewName