Проблема ...
... в том, что в
GenerateCSV(Range("StartRange1"), Range("OutputFileName1"))
вы не указали точно, в каком листе находятся ваши диапазоны. Так что Excel начинает угадывать, какой лист вы имели в виду, и иногда он ошибается. Таким образом, в зависимости от того, какой лист является активным или где именно этот код написан, процедура гадания в Excel меняется, и это мешает.
Решение
Для все Range
, Cells
, Columns
, Rows
объекты (и другие объекты, расположенные на листе) всегда явно указывают, в какой книге и листе они находятся, чтобы предотвратить предположения и предположения Excel.
GenerateCSV ThisWorkbook.Worksheets("OutputCFs").Range("StartRange1"), ThisWorkbook.Worksheets("OutputCFs").Range("OutputFileName1")
Это надежно и гарантирует, что оно всегда будет работать с этой специфицированной c рабочей книгой ThisWorkbook
с указанным c рабочим листом Worksheets("OutputCFs")
. Теперь в Excel нет места угадыванию или предположениям. У Excel очень четкое утверждение, и оно будет следовать ему. Чем точнее вы будете в своем коде, тем точнее будет следовать Excel.
Настоятельно рекомендуется всегда , делайте это для всех ваших объектов, расположенных на листах, иначе вы никогда не узнаете, когда он может начать сбоить .
Если у вас есть больше кода go, проверьте его немедленно и укажите все рабочие книги правильно.
Рекомендация
Если вам нужна некоторая поддержка в этом вопросе, и вы пишете чистый и * Код 1045 * посмотрите на Rubberduck AddIn для VBA. Он может автоматически предупредить вас, если у вас есть диапазоны без указания рабочего листа. Он сказал бы, что
Член 'Range' неявно ссылается на 'ActiveSheet'.
в своем Инспекторе кода. Также в Rubberduck есть много других полезных вещей.