Предотвращение застревания моего макроса в цикле - PullRequest
0 голосов
/ 24 октября 2019

Смысл моего макроса: сбросить мой кассовый аппарат до 200 долларов и сообщить закрывающему менеджеру номер каждого типа счета, который нужно вытащить из ящика. Прямо сейчас это будет работать большую часть времени, а затем случайным образом (я знаю, что это не случайно, но в любом случае ...), я нажму кнопку макросов, и тогда она просто даст мне вертушку смерти. Кроме того, когда он иногда «работает», он вытаскивает из ящика на одну копейку меньше, чем должен.

Я новичок в кодировании VBA - это мой первый проект. Я попытался вращать свои операторы if в цикле while и получил те же результаты, что и описанные выше в отношении циклов и отключения на пенни.

Сначала я также попытался установить цикл в то время как «this» ANDALSO », что"но это было похоже на то, что код не работал так, как написано, поэтому я отказался от ANDALSO на некоторое время со встроенным оператором if

Дубликат таблицы найден здесь:

https://tangandbiscuitcom-my.sharepoint.com/:x:/g/personal/alatham_tangandbiscuit_com/EVxTgZWgQxZElwSsiBf3oDcBWPtPggsuQq3Wr1cTRJAeBw?e=NOIFmm

* * * 101 * 101 * '* 101 * * * * * * * * * * * *1013* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

101 * 101 * 101 * 101 *'макрос работает каждый раз, когда я нажимаю кнопку, независимо от того, какие числа у меня есть в столбцах количества наименований, и независимо от того, сколько раз я запускал макрос (такое ощущение, что он ломается после 4-7 раз работы, как ожидалось), я такжеожидайте, что «Остаток до проверки» будет равняться $ 200,00 каждый раз.

1 Ответ

0 голосов
/ 25 октября 2019

Я ввел значения, как вы описываете, и с помощью отладки стало понятно, почему он попадает в бесконечный цикл. Рассмотрим ваш первый блок зацикливания кода ... С 6 X $ 50 он оставляет «tillAmount» на $ 100. Таким образом, цикл введен (tillAmount равен $ 100). Затем он сталкивается с условием 'если', которое проверяет другую переменную (HundredCount). Поскольку условие для «если» не обязательно выполняется (как это имеет место в вашем примере), никаких изменений не производится, и создается бесконечный цикл.

Простая настройка, такая как:

Do While tillAmount >= 100#
    If hundredCount = 0 Or tillAmount < 100# Then
        Exit Do
    End If
    If hundredCount > 0 Then
        hundredCount = hundredCount - 1
        tillAmount = tillAmount - 100#
        hundredResult = hundredResult + 1
    End If
Loop

для каждой петли. Это решит эту конкретную проблему, но я не могу сказать, что это единственная проблема, которая существует. Из-за того, как вы написали свой код, вам нужно будет настроить каждый цикл, что неудачно. Хорошая практика, хотя я думаю ...

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