2017-01-06 30 views
0

我只是想知道是否有人可以幫忙。我已經寫了下面的VBA如果那麼聲明不起作用

  1. 最先看到的,如果用戶有足夠的假期,要求節日
  2. 要看到,如果假期他們即將帶着他們遺留下來的會帶他們到更多天內要求不是在這種情況下,25
  3. 的獲分配的時間。如果這兩個都很好,應該運行子NewBookingCheck

但發生的事情是,如果他們沒有足夠的時間就會出現,但如果它是好的它不會繼續運行「NewBookingCheck」。

任何人都可以幫助我嗎?

我還要說,這是我第一次在完全寫我自己的代碼,所以我appologise任何錯誤有可能是

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

我認爲所花費的日子和剩下的日子是一回事......關鍵之一是剩下的日子。用戶1有25個,他們試圖拿30,計算機說不,因爲它比他們分配的更多。用戶2有30,他們試圖拿30,並且計算機說不,因爲它比允許的多,所以爲什麼用戶2給了30?當然,關鍵路徑是他們的使用從他們被分配的任何數字中歸零? –

+0

一旦他們只剩下1天,他們不允許拿走它? –

回答

1

您missplaced如果結束。因此,其他語句屬於

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

我未來的建議你重新工作,你的問題在這裏重新編輯,因爲認真解答相應走近,你想你的代碼良好的代碼外觀。 至於你的問題:你沒有附加NewBookingCheck功能,所以我想這是somekind的的:私人小組NewBookingCheck(){...} 嘗試用更換您NewBookingCheck.NewBookingCheck行:

Call NewBookingCheck() 
0

嘗試下面: -

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那麼你有問題。

你也有<= 1這意味着他們不能採取有持續年假兩天(0是一個天,1是一個天)

如果退出應用程序,然後將代碼的其餘部分是不無論如何運行,如果警報需要被解僱,並且用戶不想繼續,那麼它將關閉,否則它將開始你的下一個代碼。

+0

感謝您的回答,但是您剛纔提交的子文件只是運行並刪除了NewBookingCheck所需的日期,因爲沒有要引用的值。 – bloodmilksky

+0

這是一個不同的問題... –