Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.03.2010, 12:55   #1
KOSTIK1
Форумчанин
 
Аватар для KOSTIK1
 
Регистрация: 06.10.2009
Сообщений: 193
Вопрос Добавить только не существующие значения.

Доброго дня всем! Есть код -
Код:
Private Sub CommandButton1_Click()    'Добавить строки
    Application.ScreenUpdating = False
    Dim iLastRow As Long
    Dim sh As Worksheet
    Set sh = Sheets("Структура")
    If Me.ComboBox1 = "" Then MsgBox "Не введён отдел", vbCritical, "Ошибка": Exit Sub
    If Me.ComboBox2 = "" Then MsgBox "Не введена должность", vbCritical, "Ошибка": Exit Sub

    iLastRow = sh.Cells(Rows.Count, 1).End(xlUp).Row
    sh.Cells(iLastRow + 1, 1) = UserForm1.ComboBox1
    sh.Cells(iLastRow + 1, 2) = UserForm1.ComboBox2
    sh.Range("a2:b" & iLastRow + 1).Sort key1:=sh.Range("a1"), order1:=xlAscending, key2:=sh.Range("b1"), order2:=xlAscending, SortMethod:=xlPinYin

    Application.ScreenUpdating = True
    MsgBox ("Информация добавлена")
End Sub
Он вставляет данные из двух ComboBox'ов, что нужно добавить чтобы данные не дублировались, то есть, если уже имеется значение ComboBox2 в соответствующем столбце, тогда не вставлять, а просто вывести типа MsgBox ("Уже имеется")? Спасибо заранее.
Вложения
Тип файла: zip ДобавитьУдалитьИтог.zip (34.7 Кб, 10 просмотров)
С Уважением, Костик
KOSTIK1 вне форума Ответить с цитированием
Старый 25.03.2010, 14:17   #2
The_Prist
Участник клуба
 
Аватар для The_Prist
 
Регистрация: 17.07.2009
Сообщений: 1,088
По умолчанию

В этом куске:

Код:
 iLastRow = sh.Cells(Rows.Count, 1).End(xlUp).Row
    sh.Cells(iLastRow + 1, 1) = UserForm1.ComboBox1
    sh.Cells(iLastRow + 1, 2) = UserForm1.ComboBox2
    sh.Range("a2:b" & iLastRow + 1).Sort key1:=sh.Range("a1"), order1:=xlAscending, key2:=sh.Range("b1"), order2:=xlAscending, SortMethod:=xlPinYin
добавить
Код:
 iLastRow = sh.Cells(Rows.Count, 1).End(xlUp).Row
 If Not sh.Range("a2:b" & iLastRow + 1).Find(UserForm1.ComboBox1, , xlValues, xlWhole) Is Nothing Then MsgBox "Есть"
Ну и для второго Combo
WebMoney - R298726502453; Яндекс.Деньги - 41001332272872
www.excel-vba.ru
The_Prist вне форума Ответить с цитированием
Старый 25.03.2010, 15:00   #3
KOSTIK1
Форумчанин
 
Аватар для KOSTIK1
 
Регистрация: 06.10.2009
Сообщений: 193
По умолчанию

Спасибо The_Prist! Только у меня что то не получается, сообщения выходят, но и строки всё же дублируются(или я чтото не туда вставил?). Немного уточню, если есть строка(столбцы А и В) с сочетанием Комбобокс1(А)+Комбобокс2(В), тогда содержимое (Комбобокс1+Комбобокс2) вносится не должно, тогда MsgBox "Есть" и End Sub. Спасибо.
С Уважением, Костик
KOSTIK1 вне форума Ответить с цитированием
Старый 25.03.2010, 15:10   #4
The_Prist
Участник клуба
 
Аватар для The_Prist
 
Регистрация: 17.07.2009
Сообщений: 1,088
По умолчанию

Я привел строку для общего понимания, как это сделать. Тогда полностью:
Код:
Private Sub CommandButton1_Click()    'Добавить строки
    Application.ScreenUpdating = False
    Dim iLastRow As Long
    Dim sh As Worksheet
    Set sh = Sheets("Структура")
    If Me.ComboBox1 = "" Then MsgBox "Не введён отдел", vbCritical, "Ошибка": Exit Sub
    If Me.ComboBox2 = "" Then MsgBox "Не введена должность", vbCritical, "Ошибка": Exit Sub

    iLastRow = sh.Cells(Rows.Count, 1).End(xlUp).Row
    With sh.Range("a2:b" & iLastRow + 1)
        If Not .Find(UserForm1.ComboBox1, , xlValues, xlWhole) Is Nothing Then
            MsgBox "Уже ж есть такое! - " & UserForm1.ComboBox1 & " Зачем нам два?!", vbExclamation, "Лишнее": Exit Sub
        Else
            sh.Cells(iLastRow + 1, 1) = UserForm1.ComboBox1
        End If

        If Not .Find(UserForm1.ComboBox2, , xlValues, xlWhole) Is Nothing Then
            MsgBox "Уже ж есть такое! - " & UserForm1.ComboBox2 & " Зачем нам два?!", vbExclamation, "Лишнее": Exit Sub
        Else
            sh.Cells(iLastRow + 1, 2) = UserForm1.ComboBox2
        End If
        .Sort key1:=sh.Range("a1"), order1:=xlAscending, key2:=sh.Range("b1"), order2:=xlAscending, SortMethod:=xlPinYin
    End With
    Application.ScreenUpdating = True
    MsgBox ("Информация добавлена")
End Sub
WebMoney - R298726502453; Яндекс.Деньги - 41001332272872
www.excel-vba.ru
The_Prist вне форума Ответить с цитированием
Старый 25.03.2010, 15:28   #5
KOSTIK1
Форумчанин
 
Аватар для KOSTIK1
 
Регистрация: 06.10.2009
Сообщений: 193
По умолчанию

Спасибо ещё раз, но тогда я не могу внести в "Отдел" новую "Должность", а это мне необходимо.
С Уважением, Костик

Последний раз редактировалось KOSTIK1; 25.03.2010 в 15:32.
KOSTIK1 вне форума Ответить с цитированием
Старый 25.03.2010, 15:38   #6
KOSTIK1
Форумчанин
 
Аватар для KOSTIK1
 
Регистрация: 06.10.2009
Сообщений: 193
По умолчанию

Разобрался! Подправил
Код:
Private Sub CommandButton1_Click()    'Добавить строки
    Application.ScreenUpdating = False
    Dim iLastRow As Long
    Dim sh As Worksheet
    Set sh = Sheets("Структура")
    If Me.ComboBox1 = "" Then MsgBox "Не введён отдел", vbCritical, "Ошибка": Exit Sub
    If Me.ComboBox2 = "" Then MsgBox "Не введена должность", vbCritical, "Ошибка": Exit Sub

    iLastRow = sh.Cells(Rows.Count, 1).End(xlUp).Row
    With sh.Range("a2:b" & iLastRow + 1)
        If Not .Find(UserForm1.ComboBox2, , xlValues, xlWhole) Is Nothing Then
            MsgBox "Уже ж есть такое! - " & UserForm1.ComboBox2 & " Зачем нам два?!", vbExclamation, "Лишнее": Exit Sub
        Else
            sh.Cells(iLastRow + 1, 1) = UserForm1.ComboBox1
            sh.Cells(iLastRow + 1, 2) = UserForm1.ComboBox2
        End If
        .Sort key1:=sh.Range("a1"), order1:=xlAscending, key2:=sh.Range("b1"), order2:=xlAscending, SortMethod:=xlPinYin
    End With
    Application.ScreenUpdating = True
    MsgBox ("Информация добавлена")
End Sub
Спасибо!!!!!!!!
С Уважением, Костик
KOSTIK1 вне форума Ответить с цитированием
Старый 25.03.2010, 16:26   #7
KOSTIK1
Форумчанин
 
Аватар для KOSTIK1
 
Регистрация: 06.10.2009
Сообщений: 193
По умолчанию

Прошу ещё помогите! Теперь если такая должность есть, не могу внести её в другой отдел, нужно что бы
Цитата:
если есть строка(столбцы А и В) с сочетанием Комбобокс1(А)+Комбобокс2(В)
только тогда не добавлялась должность, а в другие отделы эта должность вноситься могла. Спасибо.
С Уважением, Костик
KOSTIK1 вне форума Ответить с цитированием
Старый 25.03.2010, 17:12   #8
The_Prist
Участник клуба
 
Аватар для The_Prist
 
Регистрация: 17.07.2009
Сообщений: 1,088
По умолчанию

Так что ли?

Код:
Private Sub CommandButton1_Click()    'Добавить строки
    Application.ScreenUpdating = False
    Dim iLastRow As Long
    Dim sh As Worksheet, rFndRng As Range
    Set sh = Sheets("Структура")
    If Me.ComboBox1 = "" Then MsgBox "Не введён отдел", vbCritical, "Ошибка": Exit Sub
    If Me.ComboBox2 = "" Then MsgBox "Не введена должность", vbCritical, "Ошибка": Exit Sub

    iLastRow = sh.Cells(Rows.Count, 1).End(xlUp).Row
    Set rFndRng = sh.Range("a2:a" & iLastRow + 1).Find(UserForm1.ComboBox1, , xlValues, xlWhole)
    If Not rFndRng Is Nothing Then
        If rFndRng.Offset(, 1).Value = UserForm1.ComboBox2 Then
            MsgBox "Уже ж есть такое! - " & UserForm1.ComboBox1 & " Зачем нам два?!", vbExclamation, "Лишнее": Exit Sub
        Else
            sh.Cells(iLastRow + 1, 1) = UserForm1.ComboBox1
            sh.Cells(iLastRow + 1, 2) = UserForm1.ComboBox2
        End If
    Else
        sh.Cells(iLastRow + 1, 1) = UserForm1.ComboBox1
        sh.Cells(iLastRow + 1, 2) = UserForm1.ComboBox2
    End If
    sh.Range("a2:b" & iLastRow + 1).Sort key1:=sh.Range("a1"), order1:=xlAscending, key2:=sh.Range("b1"), _
                                         order2:=xlAscending, SortMethod:=xlPinYin

    Application.ScreenUpdating = True
    MsgBox ("Информация добавлена")
End Sub
Или я вообще не так понял?
WebMoney - R298726502453; Яндекс.Деньги - 41001332272872
www.excel-vba.ru

Последний раз редактировалось The_Prist; 25.03.2010 в 17:17.
The_Prist вне форума Ответить с цитированием
Старый 25.03.2010, 17:29   #9
KOSTIK1
Форумчанин
 
Аватар для KOSTIK1
 
Регистрация: 06.10.2009
Сообщений: 193
По умолчанию

Принцип такой, в каждом "отделе" может быть только по одной например "уборщице" если я хочу добавить ещё раз "уборщицу" то эта "Должность" в выбранном "отделе" дублироваться не должна. Примерно так.
С Уважением, Костик
KOSTIK1 вне форума Ответить с цитированием
Старый 25.03.2010, 17:30   #10
The_Prist
Участник клуба
 
Аватар для The_Prist
 
Регистрация: 17.07.2009
Сообщений: 1,088
По умолчанию

Цитата:
Сообщение от KOSTIK1 Посмотреть сообщение
Принцип такой, в каждом "отделе" может быть только по одной например "уборщице" если я хочу добавить ещё раз "уборщицу" то эта "Должность" в выбранном "отделе" дублироваться не должна. Примерно так.
Ну так вариант выше не подходит? Хотя, наверное, не очень. Т.к. в результате, у Вас и отделы и должности дублируются в каждом столбце. Т.е. надо делать цикл по всем должностям одного отдела, чтобы понять - есть ли там уже такая или нет.
WebMoney - R298726502453; Яндекс.Деньги - 41001332272872
www.excel-vba.ru
The_Prist вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
автоматически добавить ссылку для редактирования значения поля в базе? bush007 PHP 13 14.12.2009 13:19
Одни из jpg файлов реальные JPEG а другие только название. как загрузиь только картинки? AgressiveBehavior Общие вопросы Delphi 1 16.09.2009 09:39
В яцейках есть x=1 x=2 Как убрать x= и оставить только значения Володя Минск Microsoft Office Excel 2 29.10.2008 04:57
В ячейках есть x=1 x=2 Как убрать x= и оставить только значения Володя Минск Microsoft Office Excel 2 27.10.2008 20:54
начал учить только-только - нужна ваша помошь vanDJ Помощь студентам 20 18.12.2007 21:53