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
- Некоторые проблемы с выбором.
Попробуйте это так:
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
Вот как я исправляю их в приведенном выше коде:
- Я проверяю
rowselect
< 1. Это даст ошибку, еслиrowselect
имеет строковое значение. - я использую
With Worksheets("Sheet 1")