Проблемы с функциями VBA - PullRequest
       7

Проблемы с функциями VBA

0 голосов
/ 16 декабря 2010

Я работаю над проектом, в котором мне нужно проанализировать наличие персонала на основе 15-минутных периодов времени, их языковых навыков и их смен.У меня есть один лист, который выглядит так:

--Time-------English------German-----French

--06:15--------0------------0-----------0
--06:30--------0------------0-----------0
--06:45--------0------------0-----------0

И еще один лист, который выглядит следующим образом:

--Name-----Language-----Info--------Shift--------

--Joe B----English-----BlaBla---05:45 - 12:30---
--Al C-----English-----BlaBla---07:45 - 15:30---
--Jill T---English-----BlaBla---07:45 - 15:30---

Итак, мне нужно взять язык, на котором они говорят, их смещение (разделениев начальное и конечное время) и на основе языка, указанного в заголовке этого столбца (на первом приведенном выше листе), добавьте «1», если они говорят на этом языке и доступны в то время.

Нижекод, который у меня есть в настоящее время, который не делает этого для меня:

Function CalculateAvailability(The_Time As String, The_Info As Range, Current_Lang As String)

'The_Time is the current 15-minute period
'The_Info is the range of fields in sheet 2 with our information (A3:D5 above)
'Current_Lang is the current language heading

Dim The_Lang As String 'the language of the staff member
Dim The_Shift_Start As String 'obvious
Dim The_Shift_End As String 'also obvious
Dim stGotIt As String 'redundant, not used currently
Dim stCell As String 'for capturing the cell contents
Dim Counter As Integer 'our counter

Counter = 0

For Each r In The_Info.Rows
    For Each c In r.Cells
        stCell = c.Value
        If InStr(1, stCell, ":", vbTextCompare) > 0 Then
            The_Shift_Start = GetShiftStart(stCell) 'this code works
            The_Shift_End = GetShiftEnd(stCell) 'this code works
        End If
        If InStr(1, stCell, Current_Lang, vbTextCompare) > 0 Then
            The_Lang = Current_Lang 'seems redundant but how else to do the check?
            Counter = 17 'test value - doesn't seem to reach here
        End If
    Next c
    If The_Lang = Current_Lang Then
        Counter = 5 'test value - doesn't seem to reach here either
    End If
Next r

CalculateAvailability = "Time:" + The_Time + " - Start:" + The_Shift_Start + " - End:" + The_Shift_End + " - Avail. " + Counter 'for output purposes

End Function

Кажется, он не достигает важных частей моего кода, где я выполняю вычисления, которые вызывают отдельное (проверено ирабочая) функция, которая возвращает «1» или «0» на основе периода времени и времени начала и окончания смены.(Это было бы, где я указываю Counter = 5) Моя логика в приведенном выше коде неверна?Я понимаю, что тестирование языка кажется излишним и, вероятно, некорректным, но, как говорится в комментариях, я не мог переработать это более разумно.Одна вещь, которая меня интересует, заключается в том, что цикл For Loop сразу же переходит от «Next» обратно к связанному «For Each» или выполняет следующий код, и ТО затем переходит обратно?(Я знаю, что это не имеет большого смысла программно, но я не очень знаком с VB, поэтому не могу сказать наверняка, несмотря на то, насколько нелепым это кажется в свете моих знаний C / C # / C ++)

Вся помощь приветствуется!

1 Ответ

1 голос
/ 16 декабря 2010

Предполагая, что Current_Lang не отправляется как пустая строка, и код никогда не достигает строки Counter = 17, он также никогда не достигнет строки Counter = 5, поэтому я думаю, что вы можете сосредоточиться на том, почему это не такдостичь Counter = 17.

Наиболее вероятным ответом на этот вопрос может быть то, что stCell не содержит того, что вы ожидаете, и именно поэтому он не может найти Current_Lang втам.Попробуйте вывести или Watch, что в stCell, чтобы вы могли проверить, почему он не работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...