2010-11-19 24 views
0

Aşağıda yazdığım kod yazıyor, ancak bu satırı ve yalnızca bu satırı eklediğim çizgi ile ilgili bir sorun almaya devam ediyorum. Diğer tüm satırları yorumladım ve bunu problem çizgisi olarak izole ettim, ama hayatım boyunca ve yaptığım bir saat veya daha fazla araştırma ile sorunun ne olduğunu anlayamıyorum. Muhtemelen gerçekten bariz olanı, ama gerçekten sıkışıp kaldım ve beni delirtiyor. Neyse Başka bir işlev içinde VBA İşlevi çağrılıyor Sorun

, kod vardiya süreleri ve dil yeteneği içeren bir veri Range alıp

(aşağıdaki kodda The_Time) Belirli bir zaman süresi içinde belirli bir dile sahip birçok insan mevcuttur göstermek için kullanılacak

Herhangi bir yardım büyük memnuniyetle karşılanacaktır!

stCell = c.Value 
If InStr(stCell, "Eng") > 0 Then 

Ya c.Value atama başarısız olur:

Function ReturnAvailability(The_Time As String, The_Info As Range) 

Dim The_Lang As String 
Dim The_Shift_Start As String 
Dim The_Shift_End As String 
Dim stGotIt As String 
Dim stCell As Integer 
Dim Counter As Integer 

Counter = 0 

For Each r In The_Info.Rows 
    For Each c In r.Cells 
     stCell = c.Value 
     If InStr(stCell, "Eng") > 0 Then 
      The_Lang = "Eng" 
     ElseIf InStr(c, ":") > 0 Then 
      stGotIt = StrReverse(c) 
      stGotIt = Left(c, InStr(1, c, " ", vbTextCompare)) 
      The_Shift_End = StrReverse(Trim(stGotIt)) 
      stGotIt = Left(The_Shift, InStr(1, The_Shift, " ", vbTextCompare)) 
      The_Shift_Start = stGotIt 
      stCell = ReturnAvailabilityEnglish(The_Time, The_Shift_Start, The_Shift_End) ' this is the line causing the error 
     End If 
    Next c 
Next r 

ReturnAvailability = Counter 

End Function 


Function ReturnAvailabilityEnglish(The_Time As String, The_Shift_Start As String, The_Shift_End As String) 

Dim Time_Hour As Integer 
Dim Time_Min As Integer 
Dim Start_Hour As Integer 
Dim Start_Min As Integer 
Dim End_Hour As Integer 
Dim End_Min As Integer 
Dim Available As Integer 

Available = 13 

Time_Hour = CInt(Left(The_Time, 2)) 
Time_Min = CInt(Right(The_Time, 2)) 
Start_Hour = CInt(Left(The_Shift_Start, 2)) 
Start_Min = CInt(Right(The_Shift_Start, 2)) 
End_Hour = CInt(Left(The_Shift_End, 2)) 
End_Min = CInt(Right(The_Shift_End, 2)) 

If Start_Hour <= Time_Hour And Start_Min <= Time_Min Then 
    If End_Hour > Time_Hour And End_Min > Time_Min Then 
     Available = 1 
    Else 
     Available = 0 
    End If 
End If 

ReturnAvailabilityEnglish = Available 

End Function 

sayesinde Darragh J

+0

Hata hangi hatta neden oluyor? Derleme hatası mı, çalışma zamanı hatası mı? –

+0

Üzgünüz, bu konuda yorum ekledi –

+0

Hata nedir? – BenV

cevap

1

Bu bölüm çalışmıyor demektir

Dim stCell As Integer 

ilan ettiler çünkü metin içeriyor, ya da InStr (stCell, "Eng") asla doğru olmayacak, becaus aralıktaki tüm hücreler sayısaldur.

Karşılaştırmak bir metni eksik:

If InStr(1, stCell, "Eng", vbTextCompare) > 0 Then 

Bu aynı zamanda bir sorundur gösterildiği gibi, bir çek eklemeniz gerekir:

If The_Time = vbNullString Or The_Shift_Start = vbNullString _ 
    Or The_Shift_End = vbNullString Then 
    Available = -1 
Else 

    Time_Hour = CInt(Left(The_Time, 2)) 
    Time_Min = CInt(Right(The_Time, 2)) 
    Start_Hour = CInt(Left(The_Shift_Start, 2)) 
    Start_Min = CInt(Right(The_Shift_Start, 2)) 
    End_Hour = CInt(Left(The_Shift_End, 2)) 
    End_Min = CInt(Right(The_Shift_End, 2)) 

    If Start_Hour <= Time_Hour And Start_Min <= Time_Min Then 
     If End_Hour > Time_Hour And End_Min > Time_Min Then 
      Available = 1 
     Else 
      Available = 0 
     End If 
    End If 
End If 
ReturnAvailabilityEnglish = Available 

Son olarak ve en önemlisi, fonksiyon hep seveceğim 0'ı döndür, çünkü başlangıçta sayacı 0 olarak ayarla ve asla güncelleştir.

+0

10 Tamam işlevini çağırdığımda gerçek bir değer aldım, ben sadece bu sorunu çözdüm, ama bir fark yaratmadı. Hala sadece # VALUE alıyorum! çalışma sayfamda Bunu işaret ettiğin için teşekkürler! Başka fikirlerin var mı? –

+0

Ek notlar eklendi. – Fionnuala

+0

Bu notlar için teşekkürler, daha önce bu sorunu düzeltmeye çalışırken bulunan karşılaştırmayla ilgili sorunlarım vardı, bu yüzden onları çıkardım. Onları tekrar ekledim ve herhangi bir soruna yol açmıyorlar ve her zaman geçerli olan bir değeri almadığım için önemsiz olan her zaman geri dönen 0 sorununun farkındayım. Çek için de teşekkürler. Bununla birlikte, bu hala sorunu çözmedi. –

İlgili konular