#excel #vba #listbox
#excel #vba #Список
Вопрос:
Я следил за учебным пособием и играл с разработкой полностью автоматизированной формы ввода пользовательских данных.
Видео, за которым я следил, PSB:
https://www.youtube.com/watch?v=P53T6oxgUVAamp;ab_channel=TheDataLabs
После загрузки его файлов и пошагового выполнения кода я по-прежнему получаю желтую подсветку над конкретным разделом инструкции ELSE в разделе Clear ()? Кроме того, мой список не обновляется корректно, он заменяет предыдущую запись следующей сохраненной записью.
Пожалуйста, просмотрите приведенный ниже код
Sub Clear()
Dim iRow As Long
iRow = [Counta(Room Access 2!A:A)] '''Identify Last Row as per tutorial''
With Frm_Room_Access_2
.Surname_Txtbx.Value = ""
.Rank_Cmbobx.Value = ""
.Section_Txtbx.Value = ""
.Extention_Txtbx.Value = ""
.Service_Number_Txtbx.Value = ""
.Due_Time_Txtbx.Value = ""
.OpBtn_Time_as_Now.Value = False
.SerialNo_Txtbx.Value = ""
If iRow > 1 Then
.List_Database.RowSource = "Room Access 2!A2:G" amp; iRow
Else
.List_Database.RowSource = "Room Access 2!A2:G" '''' Keeps Highlighting Error ''''
End If
End With
End Sub
Sub Submit()
Dim sh As Worksheet
Dim iRow As Long
Set sh = ThisWorkbook.Sheets("Room Access 2")
If Frm_Room_Access_2.SerialNo_Txtbx.Value = "" Then
iRow = [Counta(Room Access 2!A:A)] 1
Else
iRow = Frm_Room_Access_2.SerialNo_Txtbx.Value
End If
With sh
.Cells(iRow, 1) = iRow - 1
.Cells(iRow, 2) = Frm_Room_Access_2.Surname_Txtbx.Value
.Cells(iRow, 3) = Frm_Room_Access_2.Service_Number_Txtbx.Value
.Cells(iRow, 4) = Frm_Room_Access_2.Rank_Cmbobx.Value
.Cells(iRow, 5) = Frm_Room_Access_2.Section_Txtbx.Value
.Cells(iRow, 6) = Frm_Room_Access_2.Extention_Txtbx.Value
.Cells(iRow, 7) = IIf(Frm_Room_Access_2.OpBtn_Time_as_Now.Value = True And Frm_Room_Access_2.Due_Time_Txtbx.Value = "", Now(), Frm_Room_Access_2.Due_Time_Txtbx.Value)
End With
End Sub
Проблемы, которые я хочу решить, во-первых, почему в моем списке не добавляется еще одна запись под первой записью, она просто заменяет первую запись при сохранении. Требуется ли для этого другой метод?
Во-вторых, почему в коде подчеркивается, что оператор Else неверен, несмотря на следование руководству и правильную репликацию кода в соответствии с моими конкретными потребностями.
Любые советы будут с благодарностью приняты.
Комментарии:
1. «Доступ к комнате 2! A2: G» не является допустимым диапазоном — он должен быть G something.
2. Вероятно
"Room Access 2!A2:G2"
3. Не думайте о том, насколько надежен этот источник, поскольку COUNTA — не лучший способ найти последнюю пустую строку.
4. Спасибо вам, даже когда я пытаюсь использовать «G2», все равно флаги и ошибка
5.
"'Room Access 2'!A2:G2"
?
Ответ №1:
Последняя ячейка с текстом в столбце может быть найдена с помощью
Range("B" amp; 1).End(xlDown).Offset(1, 0).Select
Смещение (1, 0) выделяет ячейку ниже, чтобы вы могли скопировать в нее данные.
Для выбора листа используйте:
Worksheets("Room Access 2").Select
Подчеркивания не требуются.