#excel #vba
#excel #vba
Вопрос:
В настоящее время я разрабатываю систему ввода данных на своем рабочем месте, используя пользовательские формы для удобства ввода, и немного застрял на некоторых кодировках. Я хочу, чтобы он проверил, есть ли номер ссылки, вставленный в форму, в уже сохраненных данных, и если нет, добавьте данные в виде новой строки. Я справился с этим аспектом, но застрял на следующей части — над записью существующих данных, если присутствует ссылочный номер. Мой код пока
Sub savebutton_click ()
Dim emptyrow As Long
Dim r as Excel.Range
Set r = sheets("data").range("a:a").find(what:=Auditref.Text.LookAt:=xlPart, MatchCase:= True)
If r Is Nothing then
emptyrow = WorksheetFunction.CountA(range("a:a")) 1
Cells(emptyrow, 1).value = auditref.value
Cells(emptyrow, 2).value = datereview. Value
Else
k = Auditref.Value
Cells(kRow, 2).value = datereview.value
End if
End sub
Это вызывает ошибку в точке cells (kRow, 2), и я не знаю, как это отсортировать.
Есть идеи?
Комментарии:
1.
krow
не определено. Разве это не должно бытьr.row
в любом случае? Вам также следует повсюду использовать ссылки на таблицы.2. По какой-то причине я подумал, что мне снова придется определить что-то в качестве ссылки аудита. Определяет ли k как ссылку аудита, а затем объединяет его со строкой, не выполняется ли поиск строки, в которой находится номер ссылки (это была моя логика, которая вполне могла быть неправильной). Я внесу изменения, как предложено, и посмотрю, сработает ли это
3. У вас нет проблем с пробелом в
Worsheet Function
?4. Это была бы опечатка, ее нет в коде, который я запускаю
Ответ №1:
Что-то вроде этого будет работать:
Dim sht as worksheet, r as range
set sht = sheets("data")
Set r = sht.range("a:a").find(what:=Auditref.Text, _
LookAt:=xlPart, MatchCase:= True)
If r Is Nothing then set r = sht.cells(sht.rows.count, 1).end(xlup).offset(1, 0)
with r.entirerow
.cells(1).value = auditref.value
.Cells(2).value = datereview.value
end with
Вы уверены, что хотите xlPart
в Find()
там? Похоже, вам нужно точное соответствие…