Мое сознание сломано. Я провел дней, пытаясь выяснить, почему это происходит:Нахождение последнего пустого ряда, не работающего только на одном листе
После заполнения формы пользователя есть кнопка для заполнения соответствующей электронной таблицы. Лист определяется первым полем со списком (catSel.value
). Чтобы найти последнюю пустую строку, я использую часть кода rngSrch
ниже.
На одном листе If Application.WorksheetFunction.CountA(Acell.EntireRow) = 0
возвращается как ложное и firstBlankRow = Acell.row
не запускается.
Я пробовал удаление листа и создание нового (копирование, которое работает), изменение имени и комментирование/изменение кода.
Любые идеи, почему это происходит? Также ws.Range("A" & firstBlankRow) = Me.equipId.value
возвращается с Run-time Error ‘1004’: method ‘Range’ of object ’_worksheet’ failed
Private Sub AddCont_Click()
Dim firstBlankRow As Long
Dim ws As Worksheet
Dim srchRng As Range
Dim Acell As Range
Set ws = Worksheets(CatSel.value)
On Error GoTo Err
With ws
Set srchRng = .UsedRange.Columns(1).Find("")
If Not srchRng Is Nothing Then
Set srchRng =.UsedRange.Columns(1).SpecialCells(xlCellTypeBlanks)
For Each Acell In srchRng
If Application.WorksheetFunction.CountA(Acell.EntireRow) = 0 Then
firstBlankRow = Acell.row
Exit For
End If
Next
Else
If Application.WorksheetFunction.CountA(Cells(.Rows.Count, 1).EntireRow) = 0 Then
MsgBox "Please start a new sheet"
Else
firstBlankRow = .UsedRange.SpecialCells(xlCellTypeBlanks).row + 1
End If
End If
'Equipment ID
ws.Range("A" & firstBlankRow) = Me.equipId.value
'Parent or Next Level
ws.Range("B" & firstBlankRow) = Me.NextLev.value
'Keyword
ws.Range("C" & firstBlankRow) = Me.KeySel.value
'Cost Center
ws.Range("E" & firstBlankRow) = Me.CostSel.value
'Department
ws.Range("F" & firstBlankRow) = Me.DepartSel.value
'Location 1
ws.Range("G" & firstBlankRow) = Me.Loc1.value
'Location 2
ws.Range("H" & firstBlankRow) = Me.Loc2.value
'Location 3
ws.Range("I" & firstBlankRow) = Me.Loc3.value
'Location 4
ws.Range("J" & firstBlankRow) = Me.Loc4.value
'Beginning of specs
'L5
ws.Range("L" & firstBlankRow) = Me.L3Sel.value
'M5
ws.Range("M" & firstBlankRow) = Me.M3Sel.value
'N5
ws.Range("N" & firstBlankRow) = Me.N3sel.value
'O5
ws.Range("O" & firstBlankRow) = Me.O3Sel.value
'P5
ws.Range("P" & firstBlankRow) = Me.P3Sel.value
'Q5
ws.Range("Q" & firstBlankRow) = Me.Q3Sel.value
'R5
ws.Range("R" & firstBlankRow) = Me.R3Sel.value
'S5
ws.Range("S" & firstBlankRow) = Me.S3Sel.value
'T5
ws.Range("T" & firstBlankRow) = Me.T3Sel.value
'U5
ws.Range("U" & firstBlankRow) = Me.U3Sel.value
MsgBox ("successfully Added")
End With
Err: MsgBox ("something went wrong")
End Sub
Так что это работал! НО, Он попал в первую пустую ячейку в столбце A. Любой способ заставить это искать первую полностью пустую строку? –
@ShawnTaylor - Судя по данным, которые вы помещали в листы, я ожидал, что столбец A будет всегда заполняться, если что-то было в строке, но я обновил ответ, чтобы удовлетворить ситуацию, когда ни один из столбцов в строке может быть гарантировано заполнено. – YowE3K