Как обработать эту ошибку несоответствия типов во время выполнения в VB? - PullRequest
0 голосов
/ 16 мая 2019

У меня есть таблица в MS Word, состоящая из элементов раскрывающегося списка, а также столбцов, которые отображают и выводят значения в зависимости от комбинации выбранных элементов раскрывающегося списка. Я получаю ошибку «Ошибка времени выполнения» 13 «Несоответствие типов», когда в наборе выбран только один из элементов раскрывающегося списка.

Как мне поступить с этой ошибкой?

Примечание. В каждом наборе есть два раскрывающихся списка, если выбран только один, а затем пользователь щелкает мышью. Мне бы хотелось, чтобы столбец результатов вернулся к значению по умолчанию, которое ничего не отображает.

Я знаю, что это должно быть сделано в Excel, но мне, к сожалению, приходится работать с тем, что у меня есть.

Мой код работает правильно и не выдает никаких ошибок, если перед щелчком мыши выбран элемент не по умолчанию. Однако, если выбран только элемент только из одного раскрывающегося списка, а значение другого раскрывающегося списка остается значением по умолчанию, отображается ошибка.

Ошибка также отображается, если я пытаюсь отменить выбор одного из элементов раскрывающегося списка, но не обоих.

Ошибка времени выполнения '13' Несоответствие типов

Private Sub Document_ContentControlOnExit(ByVal CC As ContentControl, Cancel As Boolean)
Dim CField As String, LField As String, RField As String, CText As String, LText As String, CRate As Double, LRate As Double, RRate As Double, RCat As String, RCatField As String
Select Case CC.Title
Case "C1", "L1"
CField = "C1"
LField = "L1"
RField = "R1"
RCatField = "RR1"

Case "C2", "L2"
CField = "C2"
LField = "L2"
RField = "R2"
RCatField = "RR2"


Case Else
Exit Sub
End Select

CText = Left(ActiveDocument.SelectContentControlsByTitle(CField).Item(1).Range.Text, 1)
LText = Left(ActiveDocument.SelectContentControlsByTitle(LField).Item(1).Range.Text, 1)
    If Not IsNumeric(CText) Then
With ActiveDocument.SelectContentControlsByTitle(RField)(1)
   .LockContents = False
   .Range.Text = ""
   .LockContents = True
End With
With ActiveDocument.SelectContentControlsByTitle(RCatField)(1)
   .LockContents = False
   .Range.Text = ""
   .LockContents = True
End With
      End If
        If Not IsNumeric(LText) Then
      Exit Sub
      End If
      LRate = LText
      CRate = CText
      RRate = ((CRate * 3) + (LRate * 2)) * 4
      Select Case RRate
      Case Is < 41
      RCat = "Low"
      Case Is < 55
      RCat = "Moderate"
      Case Is < 70
      RCat = "High"
      Case Is >= 70
        RCat = "Catastrophic"
      End Select




With ActiveDocument.SelectContentControlsByTitle(RField)(1)
   .LockContents = False
   .Range.Text = RRate
   .LockContents = True
End With
With ActiveDocument.SelectContentControlsByTitle(RCatField)(1)
   .LockContents = False
   .Range.Text = RCat
   .LockContents = True
End With
End Sub

1 Ответ

0 голосов
/ 16 мая 2019

Вы можете добавить обработчик ошибок в ваш код.Добавьте

On Error GoTo errHandlr

Где происходит ошибка.Позже определите, что должно произойти при возникновении ошибки:

errHandlr:
   Debug.Print Err.Number & ":-:" & Err.Description

If Err.Number = 13 Then
    wsChange
End if

Public Function wsChange(ByVal As Range) 

  If Target.Address ="$A$1"' range of drop down list
  Range("A1").Value = "Your default  value."    'A1 should be your drop down   list address.

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