Несоответствие типа, если указано число, где требуется строка - Excel VBA - PullRequest
0 голосов
/ 26 декабря 2018

Если значение в «ComboBox1.Value» является числом, возникает ошибка времени выполнения «13»: Несовпадение типов

Я уже использовал Cstr () для преобразования его в строку, но все равно показываетошибка

Private Sub CommandButton1_Click()
Application.ScreenUpdating = False

Dim WS As Worksheet, NROW As Variant
Set WS = ThisWorkbook.Sheets("ClientList")
Dim Q As Integer

NROW = Application.Match(ComboBox1.Value, WS.Range("A:A"), 0)
    ActiveSheet.Range("A" & NROW).Select
    Q = MsgBox("Do you want to delete this record", vbQuestion + vbYesNo)

    If Q = vbYes Then
        ActiveCell.EntireRow.Delete
        MsgBox "RECORD DELETED"
    Else
        'do nothing
    End If
Application.ScreenUpdating = True
End Sub

Ответы [ 2 ]

0 голосов
/ 26 декабря 2018

Рабочий листФункция

Private Sub CommandButton1_Click()

  Application.ScreenUpdating = False

  Dim WS As Worksheet, NROW As Long
  Set WS = ThisWorkbook.Sheets("ClientList")
  Dim Q As Integer

  If IsError(WorksheetFunction.Match(ComboBox1.Value, WS.Range("A:A"), 0)) _
          Then Exit Sub
  NROW = WorksheetFunction.Match(ComboBox1.Value, WS.Range("A:A"), 0)

  Q = MsgBox("Do you want to delete this record", vbQuestion + vbYesNo)
  If Q = vbYes Then
      ActiveSheet.Range("A" & NROW).EntireRow.Delete
      MsgBox "RECORD DELETED"
    'Else
      ' do nothing
  End If

  Application.ScreenUpdating = True

End Sub
0 голосов
/ 26 декабря 2018

Вам не хватает обработки ошибок, если Application.Match не может найти значение в списке.Кроме того, нет необходимости выбирать строки для их удаления.

Private Sub CommandButton1_Click()
Application.ScreenUpdating = False

Dim WS As Worksheet, NROW As Long
Set WS = ThisWorkbook.Sheets("ClientList")
Dim Q As Integer

If Not IsError(Application.Match(ComboBox1.Value, WS.Range("A:A"), 0)) Then

    Q = MsgBox("Do you want to delete this record", vbQuestion + vbYesNo)

    If Q = vbYes Then
        NROW = Application.Match(ComboBox1.Value, WS.Range("A:A"), 0)
        WS.Range("A" & NROW).EntireRow.Delete
        MsgBox "RECORD DELETED"
    Else
        'do nothing
    End If
End If

Application.ScreenUpdating = True
End Sub
...