Просто дополнение к тому, что @BruceWayne уже сказал: всякий раз, когда у вас есть это типичное явление, что что-то происходит только «иногда» это часто случай с использованием ключевых слов, таких как Active
или Current
или Selection
. Они не являются конкретными, но изменяются каждый раз, когда вы вызываете макрос. Все, что вы выбрали, является отправной точкой. Возможно, вы даже начнете щелкать и, таким образом, измените Selection
во время работы макроса. Короче говоря, вы должны явно начать кодирование и не разрешать VBA/Excel принимать/принимать решение для вас.
Начнем с Range("J14").Select
. Эта строка кода просит VBA сделать уже два предположения:
- Если у вас есть несколько файлов Excel, открывайте их. С какого файла Excel он должен начинаться?
- Внутри файла может быть несколько листов. На каком из этих листов следует выбрать
J14
?
Явное кодирование означает, что вы (надеюсь, всегда) должны быть очень конкретными, о чем вы говорите. Таким образом, вместо того, чтобы просто констатирует Range("J14")
вы должны использовать:
ThisWorkbook.Worksheets("SheetNameYouWantToReferTo").Range("J14")
Но указываются, в другом ответе, это даже не нужно в этом случае. Вместо цикл строка, как показано и использование:
ThisWorkbook.Worksheets("SheetNameYouWantToReferTo").Cells(i, 10).Offset(6, 0).Formula = ThisWorkbook.Worksheets("SheetNameYouWantToReferTo").Cells(i, 10).Offset(i, 10).Formula
Поскольку это немного длительным вы можете закорачивание его с помощью With
заявления:
With ThisWorkbook.Worksheets("SheetNameYouWantToReferTo")
.Cells(i, 10).Offset(6, 0).Formula = .Cells(i, 10).Formula
End With
Не используйте 'select'. – findwindow
(см. [This] (http://stackoverflow.com/questions/10714251/how-to-avoid-using-select-in-excel-vba-macros) thread) – BruceWayne
С этим кодом много чего не так. Чего именно вы хотите достичь? Переместить целую колонку вниз на 6 ячеек? – trincot