Добрый день. Суть такая: есть файл, через форму вносятся данные которые падают в таблицу на скрытом листе, запись идет по первой пустой ячейке
Код
Dim A As Long
With Sheets("Данные")
A = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
.Cells(A, 1).Value = TextBox17.Value
.Cells(A, 3).Value = ComboBox1.Value
End With
TextBox17.Value = ""
ComboBox1.Value = ""
Далее со скрытого листа все тянется на доступный для пользователя лист)
Может возникнуть такая ситуация, что внесут повторно Дата и Смена при этом все запишется в новую строку и данные задвоятся.
Как сделать перезапись данных если пользователь вводит существующие данные в таблице по 2 параметрам Дата+Смена
With Sheets("Данные")
If WorksheetFunction.CountIfs(.Columns(1), TextBox17.Value, .Columns(3), ComboBox1.Value) = 0 Then
A = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
.Cells(A, 1).Value = TextBox17.Value
.Cells(A, 3).Value = ComboBox1.Value
End If
End With
Dim ws As Worksheet
Dim lastRow As Long
Dim foundRow As Long
Dim i As Long
Set ws = Sheets("Данные")
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
foundRow = 0
' Поиск совпадения по "Дате" и "Смене"
For i = 1 To lastRow
If ws.Cells(i, 1).Value = TextBox17.Value And _
ws.Cells(i, 3).Value = ComboBox1.Value Then
foundRow = i
Exit For
End If
Next i
If foundRow > 0 Then
With ws
.Cells(foundRow, 1).Value = TextBox17.Value
.Cells(foundRow, 3).Value = ComboBox1.Value
End With
Else
lastRow = lastRow + 1
With ws
.Cells(lastRow, 1).Value = TextBox17.Value
.Cells(lastRow, 3).Value = ComboBox1.Value
End With
End If
Dim arr As Variant
arr = .Cells(1, 1).Resize(.UsedRange.Rows.Count, 3).Value
For A = 1 To UBound(arr, 1)
If (CStr(arr(A, 1)) = TextBox17.Value _
And CStr(arr(A, 3)) = ComboBox1.Value) _
Or IsEmpty(arr(A, 1)) Then Exit For
Next
If IsEmpty(.Cells(A, 1).Value) Then .Cells(A, 1).Resize(, 3).FormulaR1C1 = Array(TextBox17.Value, .Cells(A, 2).FormulaR1C1, ComboBox1.Value)
И в сообщении #11 вы написали 2 одинаковых блока для foundRow и lastRow. Если появится тяга к рефакторингу, то эти два блока надо свести к одному. Пример можно посмотреть в сообщении #10.