Список Excel заполняется неправильно

#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
  

Подчеркивания не требуются.