2013-10-28 255 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錯誤。