2016-08-25 45 views
0

下面的代碼工作得很好,直到我說了代號爲vbokcancel位...下面的代碼:VBA如果statment混亂

If Me.results.ListIndex = -1 Or Me.userfolder.ListIndex = -1 Or 
Me.choice.ListIndex = -1 Then   

MsgBox "Please choose something to remove" 

Else 

If MsgBox("Are you sure you want to delete this user from this folder?", vbOKCancel) = vbOK Then 

    If Me.choice.Value = "Folder" Then 

     username = Me.results.Column(0) 
     prfolder = Me.results.Column(3) 

     strSQL = "DELETE tblRelationship.*, tblPra.praNo, tblFolder.folder FROM tblPra INNER JOIN (tblFolder INNER JOIN tblRelationship ON tblFolder.folderID = tblRelationship.folderID) ON tblPra.praID = tblRelationship.praID WHERE (((tblPra.praNo)='" & username & "') AND ((tblFolder.folder)='" & prfolder & "'));" 
     CurrentDb.Execute strSQL 
     Me.results.Requery 

    ElseIf Me.choice.Value = "Username" Then 

     prfolder = Me.results.Column(0) 

     strSQL = "DELETE tblRelationship.*, tblFolder.folder FROM tblPra INNER JOIN (tblFolder INNER JOIN tblRelationship ON tblFolder.folderID = tblRelationship.folderID) ON tblPra.praID = tblRelationship.praID WHERE (((tblFolder.folder)='" & prfolder & "'));" 
     CurrentDb.Execute strSQL 
     Me.results.Requery 

    End If 
    End If 
End If 

這將激活If MsgBox("Are you sure you want to delete this user from this folder?", vbOKCancel) = vbOK部分,但如果「確定」按鈕,點擊它直接跳到End If並且不運行IF語句中的代碼。現在我認爲我所做的完全是編碼方面的「合法」,顯然不是......我有什麼想法來解決這個問題?

如果按下「取消」,它會執行我已經想要的操作,即關閉消息框並且用戶返回到同一屏幕..所以不需要Else語句,因爲它已經做了什麼我希望這樣做。

+2

'如果MsgBox'部分看起來沒問題。你確定它不是'If Me.choice.Value = ..''那些行不通的行嗎?在問題後面直接添加一行'MsgBox'點擊確定「。 – Andre

+0

嗨,我補充說,它仍然跳到第二個'結束如果'沒有顯示「點擊確定」 –

+0

嗯。這是您的原始代碼,還是您在發佈問題時是否更改了任何內容?如果MsgBox(「你確定要從這個文件夾刪除這個用戶?」,vbOKCancel)= vbOK然後MsgBox「點擊確定」 - 它應該顯示第二個MsgBox如果您單擊確定。 – Andre

回答

1

這對於評論來說太長了,它並不是一個真正的答案,但它應該引導你朝着正確的方向前進。

嘗試設置消息框的值等於一個變量。像這樣:

If Me.results.ListIndex = -1 Or Me.userfolder.ListIndex = -1 Or 
Me.choice.ListIndex = -1 Then   

MsgBox "Please choose something to remove" 

Else 

    X = MsgBox("Are you sure you want to delete this user from this folder?", vbOKCancel) 

    If X = vbOK Then 'put a breakpoint here 

     If Me.choice.Value = "Folder" Then 

      username = Me.results.Column(0) 
      prfolder = Me.results.Column(3) 

      strSQL = "DELETE tblRelationship.*, tblPra.praNo, tblFolder.folder FROM tblPra INNER JOIN (tblFolder INNER JOIN tblRelationship ON tblFolder.folderID = tblRelationship.folderID) ON tblPra.praID = tblRelationship.praID WHERE (((tblPra.praNo)='" & username & "') AND ((tblFolder.folder)='" & prfolder & "'));" 
      CurrentDb.Execute strSQL 
      Me.results.Requery 

     ElseIf Me.choice.Value = "Username" Then 

      prfolder = Me.results.Column(0) 

      strSQL = "DELETE tblRelationship.*, tblFolder.folder FROM tblPra INNER JOIN (tblFolder INNER JOIN tblRelationship ON tblFolder.folderID = tblRelationship.folderID) ON tblPra.praID = tblRelationship.praID WHERE (((tblFolder.folder)='" & prfolder & "'));" 
      CurrentDb.Execute strSQL 
      Me.results.Requery 

     End If 
    End If 

End If 

然後,檢查X的值,看看它認爲X等於。這應該讓你知道爲什麼If/Then代碼塊不起作用。

+0

它認爲X等於1,可悲的是這並不能解釋(對我來說)爲什麼它跳到最後! –

+0

您是否嘗試更改**如果X = vbOK **到**如果X = 1 **?或者,在您的原始代碼中,更改**如果MsgBox(「您確定要從此文件夾中刪除此用戶嗎?」,vbOKCancel)= vbOK **爲**如果MsgBox(「您確定要刪除此用戶從這個文件夾?「,vbOKCancel)= 1 **,看看它是否按需要行事。但是,我首先檢查確定和取消的值,看看X認爲他們是什麼,然後適當地更改您的原始(或我的版本)。 –

+0

確定改變'如果X = vbOK然後'到'如果X = 1然後'終於按照我希望的方式做到了。非常感謝你!現在看起來如此明顯.. –