UserForm Run-time-error | Ошибка приложения или объекта - PullRequest
1 голос
/ 22 марта 2019

Я сделал UserForm с Excel. Он имеет TextBoxes и CheckBoxes и командные кнопки. UserForm начинается с TextBoxes, после чего появляются некоторые CheckBox и продолжается TextBox. cmdAddData_click для отправки данных на лист. Я много искал, но я здесь новичок.

Когда я хочу отправить данные, это дает

ошибка времени выполнения, ошибка приложения или объекта.

Ценим за помощь.

Private Sub cmdAddData_Click()
lastrow = ThisWorkbook.Worksheets("00. Active Customers").Cells(Rows.Count, 1).End(xlUp).Row

ThisWorkbook.Worksheets("00. Active Customers").Cells(lastrow + 1, 0).Value = txtDate.Text
ThisWorkbook.Worksheets("00. Active Customers").Cells(lastrow + 1, 1).Value = txtName.Text

'after 34 textboxes, now for checkboxes

If cbxADSL.Value = True Then
ThisWorkbook.Worksheets("00. Active Customers").Cells(lastrow + 1, 35).Value = "Yes"
Else
ThisWorkbook.Worksheets("00. Active Customers").Cells(lastrow + 1, 35).Value = "No"
End If


If cbxAlarm.Value = True Then
ThisWorkbook.Worksheets("00. Active Customers").Cells(lastrow + 1, 36).Value = "Yes"
Else
ThisWorkbook.Worksheets("00. Active Customers").Cells(lastrow + 1, 36).Value = "No"
End If


'after checkboxes, now for textboxes

ThisWorkbook.Worksheets("00. Active Customers").Cells(lastrow + 1, 122).Value = txtFirstContact.Text
ThisWorkbook.Worksheets("00. Active Customers").Cells(lastrow + 1, 123).Value = txtLastContact.Text


End Sub

1 Ответ

0 голосов
/ 22 марта 2019

Проблема Cells(lastrow + 1, 0).

Cells используется как Cells(row, column), но нумерация столбцов начинается с 1, а столбец 0 не существует.

Более того, вы можете уменьшить свой код, используя С оператором и функцией IIf :

Private Sub cmdAddData_Click()
    With ThisWorkbook.Worksheets("00. Active Customers")
        lastrow = .Cells(.Rows.Count, 1).End(xlUp).Row

        .Cells(lastrow + 1, 0).Value = txtDate.Text '<-- column number must be fixed
        .Cells(lastrow + 1, 1).Value = txtName.Text

        'after 34 textboxes, now for checkboxes
        .Cells(lastrow + 1, 35).Value = IIf(cbxADSL.Value, "Yes", "No")
        .Cells(lastrow + 1, 36).Value = IIf(cbxAlarm.Value, "Yes", "No")    

        'after checkboxes, now for textboxes
        .Cells(lastrow + 1, 122).Value = txtFirstContact.Text
        .Cells(lastrow + 1, 123).Value = txtLastContact.Text
    End With
End Sub
...