Нужна помощь с Excel, VBA и пользовательскими формами, особенно в написании существующих данных

#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() там? Похоже, вам нужно точное соответствие…