2013-10-28 3 views
0

친애하는 친구 콤보 상자에서 선택한 이름대로 사람 사진을 표시하려고합니다. 그 일을 성공적으로 수행했지만 내 문제는 입니다. 갑자기 콤보 상자에서 다른 이름을 선택하는 중에 갑자기 오류 13, 형식 불일치 ** 및 내 콤보 상자가 사라집니다. 그러나 그 후 Mypics (사람 이름과 그림의 테이블에 정의 된 이름)의 가시성을 2 ~ 3 번 컴파일 한 후에 다시 "TRUE"로 표시합니다.VBA에서 형식 13 불일치 오류가 발생했습니다.

여기 내 코드

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"입니다.

+2

이름의 형식을 확인하고 비정상적인 문자 또는 공백이 있는지 확인하십시오. 나는 당신의 코드에 문제가 있다고 생각하지 않는다. 그것은 .Text 또는 Mypics.Name이다. 'Debug.print mypics.Name, .Text'을 수행하면 코드가 오류를 던질 때 직접 창에서 값을 추적 할 수 있습니다. 또한 새 값을 선택할 때마다 코드를 단계별로 실행하는 것이 좋습니다. –

+0

어떤 줄이 오류를 제기합니까? 나는 명백한 것을 보지 못했다. –

답변

0

종종 코드를 정리하면 놀라운 결과가 발생할 수 있습니다. 원래 코드 에서처럼 한 번 사용하려는 경우 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 오류는 코드 시작 부분에 잘못 선언 된 변수로 인해 발생합니다.

관련 문제