Новости:

Теперь на форум можно залогиниться / зарегистрироваться с помощью ВКонтакте. Уже существующие пользователи могут связать свою учетную запись с аккаунтом ВКонтакте одним кликом в профиле пользователя http://forum.msexcel.ru/index.php?action=profile;area=account

Главное меню

Проверка наличия уникальности имени листа в книге Excel

Автор vladturbo, 17.02.2011, 11:56

« назад - далее »

vladturbo

Добрый день.
Существует необходимость по клику на кнопке (размещенной на Лист1) создавать новый лист, присваивать ему имя из ячейки А1 Лист1, в ячейку А1 вновь созданного листа вставлять данные из ячейки А1 Лист1. Все это работает - вот код макроса:

Private Sub CommandButton1_Click()
Range("A1").Select
Selection.Copy
Dim Msg As String, MyString As String
    Dim Btns As Integer
    Dim Title As String, Help As String
    Dim NmbCont As Integer, Result As Integer
    Title = " Добавление нового сотрудника "
    Msg = " Добавить сотрудника ? "
    Btns = vbYesNo + vbDefaultButton2
    Result = MsgBox(Msg, Btns, Title, NmbCont)
    If Result = vbYes Then
    MyString = "Да"
        Set sh = ActiveSheet
        Sheets.Add after:=Sheets(Sheets.Count)
        Sheets(Sheets.Count).Name = sh.Range("A1")
        ActiveSheet.Paste
        Application.CutCopyMode = False
        Sheets("Лист1").Select
        Range("A1").Select
                    If Result = vbAbort Then
                    MyString = "Нет"
                    End If
                    End If
                    Application.CutCopyMode = False
End Sub
Теперь нужно, что бы осуществлялась проверка, и если лист с таким именем уже существует происходит возврат к Листу1 с выдачей сообщения об ошибке
Спасибо.

Prist

Здравствуйте.
Я вот здесь описывал, как проверить наличие листа в книге.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
www.excel-vba.ru
Просто СПАСИБО [+оказать+]
Считаешь СПАСИБО мало? Яндекс.Деньги: 41001332272872; WM: R298726502453

vladturbo

Спасибо, однако используя Ваш код создается Лист с очередным текущим №  Лист4, Лист5, или Лист6 и т.п. (если имя Листа совпадает с уже существующим), если имя Листа не совпадает с существующими, выполняется необходимое мне условие создается Лист с нужным именем (имя берется из ячейки А1 Лист1).

GWolf

А давайте попробуем вот так:

Private Sub CommandButton1_Click()
    Dim nameWS As String
    Dim ws As Worksheet
   
    With ThisWorkbook
        nameWS = .ActiveSheet.Cells(1, 1)
       
        If nameWS = "" Then
            MsgBox "Имя листа не определено!" & Chr(10) & _
                   "Задайте другое имя. А я прерываю работу.", vbCritical + vbOKOnly, ""
            Exit Sub
        End If
       
        flag = False
        For Each ws In .Worksheets
            If ws.Name = nameWS Then
                flag = True
            End If
        Next
       
        If flag = True Then
            MsgBox "Лист с именем:" & Chr(10) & nameWS & Chr(10) & "уже существует." & Chr(10) & _
                   "Задайте другое имя. А я прерываю работу.", vbCritical + vbOKOnly, ""
            Exit Sub
        Else
            ySNo = MsgBox("Добавить сотрудника?", vbExclamation + vbYesNo, "Добавление нового сотрудника")
            If ySNo = 6 Then
                       
                Sheets.Add after:=Sheets(Sheets.Count)
                Sheets(Sheets.Count).Name = nameWS
                       
                .Worksheets(nameWS).Cells(1, 1) = nameWS
                       
                nameWS = ""
                       
                Sheets("Лист1").Select
                Range("A1").Select
            Else
                Exit Sub
            End If
        End If
    End With
End Sub
Путей к вершине - множество. Этот один из многих!

Prist

#4
Цитата: vladturbo от 17.02.2011, 12:54
Спасибо, однако используя Ваш код создается Лист с очередным текущим №  Лист4, Лист5, или Лист6 и т.п. (если имя Листа совпадает с уже существующим), если имя Листа не совпадает с существующими, выполняется необходимое мне условие создается Лист с нужным именем (имя берется из ячейки А1 Лист1).
А Вы уверены, что все прочитали? Или Вы не стали утруждать себя прочтением далее, чем одной строки? Там функция приведена - Sh_Exist, которая возвращает True, если лист существует и False если нет. Так же там есть пример кода проверки через эту функцию.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
www.excel-vba.ru
Просто СПАСИБО [+оказать+]
Считаешь СПАСИБО мало? Яндекс.Деньги: 41001332272872; WM: R298726502453

vladturbo


GWolf

Цитата: vladturbo от 17.02.2011, 13:30
GWolf  благодарю за исчерпывающий ответ!


Нэма за що! - Пожалуйста, по украински!  ;D ;)

Удачи! Обращайтесь.
Путей к вершине - множество. Этот один из многих!