Как исправить формулу application.counta? - PullRequest
0 голосов
/ 20 апреля 2020

Я пишу форму пользователя для ввода данных в электронную таблицу Excel, и у меня возникают проблемы с командой counta для регистрации пустой строки.

Я новичок в VBA и пытался искать альтернативы в Интернете без большого успеха, и, честно говоря, не зная, на что я смотрел, когда читал какой-то код.

Пожалуйста, ознакомьтесь с моим кодом ниже, и для некоторых целей он предназначен для управления номерами, отслеживания дат прибытия и отъезда гостей, стоимости номеров и если две комнаты используются рядом друг с другом. По какой-то причине ввод данных начинается в строке 25, и я не могу понять, почему, когда регистрируется 25 пустых строк над ячейкой:

Dim emptyRow As Long


emptyRow = Application.WorksheetFunction.CountA(Range("B:B")) + 1


Cells(emptyRow, 2).Value = txtRoomNum.Value
Cells(emptyRow, 3).Value = txtGuestName.Value
Cells(emptyRow, 4).Value = DTPicker1.Value
Cells(emptyRow, 5).Value = DTPicker2.Value

If opInter.Value = True Then
Cells(emptyRow, 7).Value = (Val(txtRev1.Text) + Val(txtRev2.Text) + Val(txtRev3.Text)) * 0.5

Cells(emptyRow, 12).Value = Val(txtChildren.Text) * 0.5
Cells(emptyRow, 13).Value = Val(txtAdults.Text) * 0.5

Else
Cells(emptyRow, 7).Value = (Val(txtRev1.Text) + Val(txtRev2.Text) + Val(txtRev3.Text))

Cells(emptyRow, 12).Value = txtChildren.Value
Cells(emptyRow, 13).Value = txtAdults.Value

End If

Cells(emptyRow, 8).Value = UCase(txtRateCode.Value)


If opRoomOnly.Value = True Then
Cells(emptyRow, 10).Value = "Yes"

Else

Cells(emptyRow, 10).Value = "No"

End If

If opInter = True Then
Cells(emptyRow, 11).Value = "Yes"

Else

Cells(emptyRow, 11).Value = "No"
End If

Unload Me

End Sub```



1 Ответ

0 голосов
/ 20 апреля 2020

Функция COUNTA() возвращает количество ячеек, которые не являются пустыми в данном диапазоне.

Я предполагаю, что вы хотите вставить данные в первую пустую строку на листе, поэтому вам нужно количество последняя непустая строка (+1) для вставки данных. Попробуйте это:

emptyRow = Cells(Rows.Count, "B").End(xlUp).Row + 1

Вот еще несколько примеров того, как найти последнюю строку / столбец на листе , https://www.thespreadsheetguru.com/blog/2014/7/7/5-different-ways-to-find-the-last-row-or-last-column-using-vba

...