Отчасти это мнение (которое не рекомендуется на этом сайте), но ...
"оно работает отлично, то есть последнее слово не пишется с большой буквы, если его не следует писать с заглавной буквы"
Скажем, последнее слово, которое вы можете увидеть в «Выборе», это «примерно». Однако, скажем, следующая вещь после «о» - это конец абзаца, и ваш выбор включает весь абзац. Тогда последний элемент в Selection.Words будет фактически знаком абзаца. Таким образом, слово «about» не является последним словом и не будет написано заглавными буквами.
Что касается причины, по которой автор решил поставить условие «Или я = Selection.Words.Count», это чисто предположение, но, возможно, если вы пишем заглавную букву, которую вы, возможно, захотите
История о чем-то
, но
Ничего особенного не о чем кричать.
В идеальном мире, что бы на самом деле случается так, что тот, кто определит функцию, будет точно прописывать, что она должна делать (и, возможно, почему). Да, это правда, что из кода видно, что есть особый случай, и вы можете понять, что он на самом деле делает. Но это не говорит вам о том, что должен сделать. Поэтому любой, кто пытался протестировать эту подпрограмму, не мог знать, ведет ли она себя как следует.
"И когда я удалил" i = Selection.Words.Count ", макрос вообще не работал - ничего не было написано с заглавной буквы "
Когда я сделал это здесь (удалив также предыдущее" И "), это также не удалось, за исключением того, что я понял, что ничего не выбрано. Как только я выбрал что-то, код заработал, как и ожидалось. Возможно, у вас была похожая проблема?
Не похоже, что целью данного конкретного кода было обсуждение «стиля кодирования», но лично я предпочитаю заключить отдельные термины в условие, например,
If (blnOmit = False) Or (i = 1) Or (i = Selection.Words.Count) Then
Если вы все время работаете с VBA и знаете все правила объединения операторов, правила приоритета и т. д. c., вам это может не понадобиться, но это полезно для всех кто должен погрузиться и поддержать код. Предположим, например, что кто-то случайно удалил немного больше, чем часть "Or I = Selection.Words.Count" ", и строка завершилась как
If blnOmit = False Or i Then
Интересно, сколько VBA-кодеров были бы уверены, что они поняли что это на самом деле означает без поиска правил. Это не синтаксическая ошибка!