2013-10-28 50 views
0

亲爱的朋友我试图根据在组合框中选择的名称显示人员的照片。 我成功地做到了这一点,但我的问题是, ,同时不断在组合框中选择不同的名称,有时突然显示**错误13,类型不匹配**和我的组合框消失。但在此之后,使Mypics(名称定义到人名和图片的表格)的可见性“真”在编译2至3次后再次出现。VBA类型13不匹配错误excel

这里是我的代码

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',当你的代码抛出错误时,你将能够在直接窗口中跟踪值。另外,请考虑每次选择新值时逐句通过代码。 – 2013-10-28 15:41:37

+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错误。