Userform - Ошибка несоответствия типов

Я новичок в кодировании (2 месяца), и я в основном копировать код из сети. Для контекста, я следую некоторым инструкциям отсюда, как обновить значения в моей рабочей таблице с помощью userform,

Первый бит в порядке, я могу вытащить данные из моего листа обратно в userform где я могу редактировать, но попытка обновить данные на листе приводит к ошибке "несоответствие типов". Код ниже, когда я нажимаю кнопку "обновить"

Private Sub cmdupdate_Click()

If Me.cmbslno.Value = "" Then

MsgBox "SL No Can Not be Blank!!!", vbExclamation, "SL No"

Exit Sub

End If

Sheets("Sheet 1").Select

Dim rowselect As String

rowselect = Me.cmbslno.Value


Cells(rowselect, 2) = Me.TextBoxdate.Value

Cells(rowselect, 3) = Me.TextBoxraisedby.Value

Cells(rowselect, 5) = Me.ComboBoxsite.Value

Cells(rowselect, 6) = Me.ComboBoxfacility.Value

Cells(rowselect, 7) = Me.ComboBoxpdriver.Value

Cells(rowselect, 8) = Me.TextBoxissue.Value

Cells(rowselect, 9) = Me.TextBoxconsequence.Value

Cells(rowselect, 10) = Me.TextBoxmitigation.Value

Cells(rowselect, 11) = Me.TextBoximpact.Value

Cells(rowselect, 12) = Me.TextBoxlikely.Value

Cells(rowselect, 13) = Me.TextBoximpact.Value



End Sub

Я получаю несоответствие типов на Cells(rowselect, 2) = Me.TextBoxdate.Value stage, Me.cmbslno.Value короткий числовой unique ID,

Я скопировал это руководство точно - кроме переименования вещей соответственно - поэтому понятия не имел, в чем проблема.

Помощь будет принята с благодарностью.

2 ответа

Cells Свойство принимает 2 аргумента, оба из которых должны быть числовыми:

Вы должны убедиться, что значение Me.cmbslno.Value является числовым (или преобразован в число), и что переменная, которую вы используете в настоящее время, rowselect, объявлен как Long,

Dim rowselect As Long
If IsNumeric(Me.cmbslno.Value) Then
    rowselect = Me.cmbslno.Value
    Cells(rowselect, 2) = Me.TextBoxdate.Value
    '...
End If

2 возможные проблемы:

  1. выбор строки меньше 1
  2. Некоторые проблемы с выбором.

Попробуйте это так:

Option Explicit

Private Sub cmdupdate_Click()

    If Me.cmbslno.Value = "" Then

        MsgBox "SL No Can Not be Blank!!!", vbExclamation, "SL No"

        Exit Sub

    End If

    Dim rowselect As Long
    rowselect = Me.cmbslno.Value

    If rowselect < 1 Then MsgBox "WRONG VALUE"

    With Worksheets("Sheet 1")
        .Cells(rowselect, 2) = Me.TextBoxdate.Value
        .Cells(rowselect, 3) = Me.TextBoxraisedby.Value
        .Cells(rowselect, 5) = Me.ComboBoxsite.Value
        .Cells(rowselect, 6) = Me.ComboBoxfacility.Value
        .Cells(rowselect, 7) = Me.ComboBoxpdriver.Value
        .Cells(rowselect, 8) = Me.TextBoxissue.Value
        .Cells(rowselect, 9) = Me.TextBoxconsequence.Value
        .Cells(rowselect, 10) = Me.TextBoxmitigation.Value
        .Cells(rowselect, 11) = Me.TextBoximpact.Value
        .Cells(rowselect, 12) = Me.TextBoxlikely.Value
        .Cells(rowselect, 13) = Me.TextBoximpact.Value
    End With

End Sub

Вот как я исправляю их в приведенном выше коде:

  1. Я проверяю rowselect < 1. Это даст ошибку, если rowselect имеет строковое значение.
  2. я использую With Worksheets("Sheet 1")
Другие вопросы по тегам