2014-01-31 3 views
0

Я делаю форму ввода данных через VBA excel. Я очень новичок в этом и не смог получить сколько-нибудь значимых результатов поиска, поскольку я не знал, что я пытаюсь сделать.Проверить строку для нескольких значений из Excel

В любом случае, форма, которую я создаю, предназначена для того, чтобы пользователи могли вводить данные, собранные в результате текущих аудитов, и когда нажата кнопка «Сохранить», данные из текстовых полей и комбинированных ящиков записываются в новую строку в книге Excel. В моей форме есть четыре поля, которые идентифицируют каждый элемент данных (Год, Квартал, День, Уорд), а затем остальные данные. Я пытаюсь получить некоторый код, чтобы сначала проверить, существует ли строка с теми же значениями, что и в книге, для предотвращения дублирования записей.

например. Таблица содержит следующие данные -
YEAR - КВАРТАЛ ---- ДЕНЬ --- Уорда


2013 ---------- 1 --------- Понедельник - ICU
2013 ---------- 2 --------- Понедельник - ICU
2013 ---------- 3 ----- ---- Понедельник - ICU
2013 ---------- 4 --------- Понедельник - ICU
2014 ---------- 1- -------- Понедельник - ICU

И пользователь вводит новую запись со следующими значениями

Год - 2014
квартал - 1
дня - понедельник
Уорд - ICU

Мне нужен код, который дал бы результат (Msgbox говоря дубликат записи и т.д.)

но если они вошел тот, который был

Год - 2014
Квартал -
день - понедельник
Уорд - ICU

Все в порядке, и они могут нажать кнопку «сохранить»

Я ценю вашу помощь (извините за глупый вопрос!)

+1

Одним из способов является «Автофильтр» листа на основе значений текстового поля.Если есть какие-то строки, вы дублируете их. На SO есть много ответов об использовании 'AutoFilter', который должен дать вам место для начала –

ответ

0

Вот код фрагмент (Function IsDuplicate()), который пробегает диапазон до первой пустой строки (точнее первой строки, где первый столбец пуст) и сравнивает 4 ключевых поля с 4 параметрами, которые вы предоставляете.

Вы можете позвонить по этому вопросу с помощью кнопки «Сохранить» и, в зависимости от результата, продолжить запись и закрыть форму или отказаться от записи и отобразить MsgBox.

Sub Test() 
Dim DTab As Range 

    Set DTab = ActiveSheet.[B3] ' define start of data table 

    If IsDuplicate(DTab, 1, 1, 1, 1) Then  ' your form input here instead of 1,1,1,1 
     MsgBox ("duplicate") 
     ' stay in form 
    Else 
     MsgBox ("unique") 
     ' write record and close form 
    End If 
End Sub 

Private Function IsDuplicate(DRange As Range, P1 As Variant, P2 As Variant, P3 As Variant, P4 As Variant) As Boolean 
Dim Idx As Long 

    IsDuplicate = False 
    Idx = 2       ' 1st row is header 

    Do While DRange(Idx, 1) <> "" ' break at 1st blank row 
     If DRange(Idx, 1) = P1 And _ 
      DRange(Idx, 2) = P2 And _ 
      DRange(Idx, 3) = P3 And _ 
      DRange(Idx, 4) = P4 Then 
      IsDuplicate = True 
      Exit Do 
     End If 
     Idx = Idx + 1 
    Loop 

End Function 

enter image description here

Вам нужна эта функция довольно часто .... иногда хочется вернуться Idx вместо просто True/False вернуть номер записи - если вы должны решить, следует ли вставить/Добавить или обновить запись.

Смежные вопросы