2017-01-01 36 views
0

我的代碼有一個小問題(MS Access VBA)。這不是什麼大不了的事情,但這不是一個應該看到的取消請求。如何使用取消請求停止代碼時刪除運行時錯誤'3464'

代碼的最初部分允許我提取精美地運行的圖像的路徑和文件名。

Private Sub Image2_DblClick(Cancel As Integer) 

'Source: http://stackoverflow.com/questions/14915179/ms-access-browse-for-file-and-get-file-name-and-path 

    Dim f As Object 
    Dim strFile As String 
    Dim strFolder As String 
    Dim varItem As Variant 

    Set f = Application.FileDialog(3) 
    f.AllowMultiSelect = False 
    If f.Show Then 
     For Each varItem In f.SelectedItems 
      strFile = Dir(varItem) 
      strFolder = Left(varItem, Len(varItem) - Len(strFile)) 
      TempVars.Add "imagePath2", strFolder & strFile 

     Next 
    End If 
    Set f = Nothing 

下一部分將該字符串插入到查詢中的指定字段中。這也很好用。

With DoCmd 
    .SetWarnings False 
    .OpenQuery "updateQueryVarietiesImage2" 
    .SetWarnings True 
    DoCmd.RunCommand acCmdRefresh 
    Me.Requery 

End With 

End Sub 

我遇到的問題是如果我取消從生成的彈出窗口中選擇圖像。取消後,我獲得「運行時錯誤‘3464’:數據類型不匹配的條件表達式」

單擊「調試」凸顯

.OpenQuery "updateQueryVarietiesImage2" 

我敢肯定,在錯誤的事實,做由於取消,查詢沒有運行,但我不想顯示錯誤。如果用戶點擊取消,我應該使用什麼代碼來阻止錯誤發生?

+0

答案將取決於語言,你沒有指定。 –

+0

對不起,MS Access中的VBA。 –

回答

1

你不能只跳過代碼,如果沒有選擇文件:

If f.SelectedItems.Count > 0 Then 
    With DoCmd 
     .SetWarnings False 
     .OpenQuery "updateQueryVarietiesImage2" 
     .SetWarnings True 
     .RunCommand acCmdRefresh 
    End With 
    Me.Requery   
End If 
+0

完美!....幾乎完美。我在用您的代碼替換代碼後仍然出現錯誤,但我很快發現我只需從第一部分中刪除 「Set f = Nothing」 並且您的代碼完美工作。僅供參考 「Set f = Nothing」 從我的初始代碼中仍然產生錯誤,所以它是您的代碼執行的。 –

+0

太好了。然後請標記爲已回答。新年快樂! – Gustav