Ошибка несоответствия типа 13 в VBA Excel

Дорогие друзья, я пытаюсь отобразить фотографии людей в соответствии с именем, выбранным в поле со списком. Мне это удается, но моя проблема в том, что при постоянном выборе разных имен в поле со списком внезапно время от времени отображается ** ошибка 13, несоответствие типов **, и мое поле со списком тоже исчезает. Но после этого видимость Mypics (имя, определенное в таблице имен людей и изображений) «ИСТИНА» появляется снова после компиляции 2-3 раза.

вот мой код

Private Sub Worksheet_Calculate()
Dim Mypics As Picture

Me.Pictures.Visible = False

 With Range("B8")

   For Each Mypics In Me.Pictures

    If (Mypics.Name = .Text) Then

      Mypics.Visible = True
      Mypics.Top = .Top
      Mypics.Left = .Left

   Exit For
    End If
  Next Mypics
 End With  
End Sub

В ячейке «B8» отображается имя изображения в соответствии с именем выбранного человека в поле со списком со ссылкой на номер индекса.


person CVD    schedule 28.10.2013    source источник
comment
Проверьте формат имен, проверьте наличие нестандартных символов или пробелов. Я не думаю, что есть проблема с вашим кодом, это скорее .Text или Mypics.Name. Сделайте Debug.print mypics.Name, .Text, и вы сможете отслеживать значения в непосредственном окне, когда ваш код выдает ошибку. Кроме того, рассмотрите возможность пошагового выполнения кода каждый раз, когда вы выбираете новые значения.   -  person    schedule 28.10.2013
comment
какая строка вызывает ошибку? Я не вижу ничего очевидного.   -  person David Zemens    schedule 28.10.2013


Ответы (1)


Часто очистка вашего кода может творить чудеса. Я искренне рекомендую избегать использования With, если вы просто хотите использовать его один раз, как в исходном коде. Как насчет того, чтобы попробовать следующее:

Private Sub Worksheet_Calculate()
    Dim Mypics As Picture
    Dim TargetName As String
    TargetName = Range("B8").Text
    Me.Pictures.Visible = False
    For Each Mypics In Me.Pictures
        If Mypics.Name = TargetName Then
            With Mypics
                .Visible = True
                .Top = .Top
                .Left = .Left
            End With
            Exit For
        End If
    Next Mypics
End Sub

Дайте нам знать, если это работает. Кроме того, постарайтесь Dim сделать все правильно Dim. Часто возникает ошибка type mismatch из-за неправильного объявления переменной в начале кода.

person NullDev    schedule 28.10.2013