добавление данных из пользовательской формы в таблицу - PullRequest
1 голос
/ 17 июня 2020

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

Sub Submit_Data()

    Dim iRow As Long

    If adminpanel.txtRowNumber.Value = "" Then

        iRow = student.Range("A" & Rows.Count).End(xlUp).Row + 1

    Else

        iRow = adminpanel.txtRowNumber.Value

    End If


    With student.Range("A" & iRow)

        .Offset(0, 0).Value = "=Row()-1"

        .Offset(0, 1).Value = adminpanel.Studentname.Value

        .Offset(0, 2).Value = adminpanel.Class.Value

        .Offset(0, 3).Value = adminpanel.School.Value

        .Offset(0, 4).Value = adminpanel.Mobile.Value

        .Offset(0, 5).Value = adminpanel.Email.Value

        .Offset(0, 6).Value = adminpanel.txtImagePath.Value   

    End With

    Call Reset_Form

    Application.ScreenUpdating = True

    MsgBox "data are done"

End Sub

1 Ответ

0 голосов
/ 22 июня 2020

Если вы работаете с Table / ListObject, тогда у него есть метод ListRows.Add, который вы должны использовать, когда вам нужно добавить новую строку. Из этой строки вы можете получить его свойство Range.

Sub Submit_Data()

    Dim iRow As Long, tblRow As Range, lo As ListObject
    
    Set lo = student.ListObjects(1) 'get a reference to your table

    If Len(adminpanel.txtRowNumber.Value) = 0 Then
        Set tblRow = lo.ListRows.Add.Range '<< add a new row and get its range
    Else
        'get a reference to the existing row
        iRow = CLng(adminpanel.txtRowNumber.Value)
        Set tblRow = Application.Intersect(student.Rows(iRow), _
                                           lo.DataBodyRange)
    End If
    
    'Fill the row in one operation using an array
    tblRow.Value = Array(tblRow.Row - 1, adminpanel.Studentname.Value, _
                    adminpanel.Class.Value, adminpanel.School.Value, _
                    adminpanel.Mobile.Value, adminpanel.Email.Value, _
                    adminpanel.txtImagePath.Value)
                    
    Reset_Form
    MsgBox "data are done"

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...