2017-01-06 19 views
0

誰かが助けることができるかどうか疑問に思っていました。私は、ユーザーが、彼らが残されている日に要求しようとしている休日はそれ以上にそれらを取るでしょうかどうかを確認するには休日に VBA IF THENステートメントが機能しない

  • を要求するのに十分な休日を持っている場合は最初に表示するには

    1. については、以下を書かれていますこれらの両方は、それがサブNewBookingCheck

    を実行する必要があります罰金ですしかし、何が起こることは、彼らが十分な時間を持っていけない場合、それが表示されますということですが、この場合25

  • でalloted時間よりも、それは大丈夫であればそれは "NewBookingCheck"を実行するまで続きます。

    誰でも教えてください。

    私はまた、あなたが最後の場合をmissplaced

    Sub TooMuchHoliday() 
    
    Dim daysremaining As Integer, daystaken As Integer, result As String, myValue As Variant 
    
    daystaken = Range("B13").Value 
    
    daysremaining = Range("D14").Value 
    
    If daysremaining <= 1 Then 
        Msg = " You Do Not Have Enough Holiday! Would You Like To Continue ? " & Application.UserName 
    
        Ans = MsgBox(Msg, vbYesNo) 
        If Ans = vbNo Then 
           Application.DisplayAlerts = False 
           ThisWorkbook.Save 
           Application.DisplayAlerts = True 
           Application.Quit 
           End If 
        If Ans = vbYes Then 
            Sheets("Request Form").Select 
            Range("Employee3").ClearContents 
            Range("DateRequest").ClearContents 
            Range("Employee3") = Application.UserName 
            End If 
    End If 
    
    If daystaken >= 25 Then 
        Msg = " You Do Not Have Enough Holiday! Would You Like To Continue ? " & Application.UserName 
    
        Ans = MsgBox(Msg, vbYesNo) 
        If Ans = vbNo Then 
           Application.DisplayAlerts = False 
           ThisWorkbook.Save 
           Application.DisplayAlerts = True 
           Application.Quit 
           End If 
        If Ans = vbYes Then 
            Sheets("Request Form").Select 
            Range("Employee3").ClearContents 
            Range("DateRequest").ClearContents 
            Range("Employee3") = Application.UserName 
    Else 
    
    NewBookingCheck.NewBookingCheck 
    
    End If 
    
    
    End If 
    End Sub 
    
  • +0

    私は、撮影日と残りの日が同じであると思います。クリティカルなものは残りの日です。 User1は25人、彼らは30人を奪おうとし、コンピュータは割り当てられた以上に多くの人物がいるためNoと表示します。 User2は30、彼らは30を取ろうとし、コンピュータは許可されていない以上の理由でNoと答えています。なぜUser2は30を与えられましたか?確かにクリティカルパスは、割り当てられた任意の数からのゼロへの使用です。 –

    +0

    そして1日しか残っていないと、それを取ることはできません。 –

    答えて

    1

    があるかもしれないので、私はすべてのエラーのためにappologiseこれは完全に私自身のコードを書くことで私の最初の時間であると言うでしょう。したがって、Else文は、

    If Ans = vbYes Then 
    

    if節に属します。

    変更し、次のコードの最後の部分:深刻な答えはそれに応じて近づいて、あなたのコードになりたいされているので

    If daystaken >= 25 Then 
    Msg = " You Do Not Have Enough Holiday! Would You Like To Continue ? " & Application.UserName 
    
    Ans = MsgBox(Msg, vbYesNo) 
    If Ans = vbNo Then 
          Application.DisplayAlerts = False 
          ThisWorkbook.Save 
          Application.DisplayAlerts = True 
          Application.Quit 
          End If 
    If Ans = vbYes Then 
           Sheets("Request Form").Select 
           Range("Employee3").ClearContents 
           Range("DateRequest").ClearContents 
           Range("Employee3") = Application.UserName 
           End If 
    Else 
    
    NewBookingCheck.NewBookingCheck 
    
    End If 
    
    End Sub 
    
    -2

    私の将来はあなたが、ここでの質問あなたは、再編集作業を再度お勧めしますorginizedされ、良いコードの外観を持っています。あなたの質問については :あなたはので、私はそれがあると思いNewBookingCheck機能を添付していなかったのsomekind:

    Call NewBookingCheck() 
    
    0

    てみます。Private SubはNewBookingCheck(){...}はとあなたのNewBookingCheck.NewBookingCheckラインを交換してみてください 以下: - ユーザーが自分の手当(残り)以上のものを使用していないとも(撮影)それらが許可されている以上のものを使用していないことを

    Sub TooMuchHoliday() 
    Dim result   As String 
    Dim myValue   As Variant 
    Dim StrMsg   As String 
    
    'If you have <= instead of just < it will not let them take there last day, they should be able to use down to 0 not 1 
    If Range("D14").Value < 0 Then 
        If MsgBox("You do not have enough annual leave remaining to fufil this request, would you still like to continue?", vbYesNo, "Not Enough") = vbNo Then 
         Application.DisplayAlerts = False 
         ThisWorkbook.Save 
         Application.DisplayAlerts = True 
         Application.Quit 
        End If 
    End If 
    
    Sheets("Request Form").Select 
    Range("Employee3").ClearContents 
    Range("DateRequest").ClearContents 
    Range("Employee3") = Application.UserName 
    
    NewBookingCheck.NewBookingCheck 
    
    End Sub 
    

    はあなたのチェック。これは、誰かが25日以上の年次休暇を与えられ、それを受け入れることができないことを意味します。なぜ彼らはそれを与えられますか?チェックするべき重要なものが残っています。それが0以下になると問題が発生します。

    また、あなたは、アプリケーションが終了した場合、コードの残りの部分ではない、彼らは(0日である、と1日である)年次休暇の最後の2日間そこに取ることができなかった意味どの

    <= 1を持っていましたとにかく実行してください。アラートが発せられなければならない場合、ユーザーは続行したくない場合は閉じます。そうでない場合は、次のコードを開始します。

    +0

    あなたの答えをありがとう、しかしあなたが提出したサブは、参照する値がないので、NewBookingCheck Toエラーのためだけに要求された日付を実行して削除します。 – bloodmilksky

    +0

    それは別の問題があります... –

    関連する問題