Проблема с циклом через каждые 2 столбца, с формулой копирования вставки с другого листа

#excel #vba

#excel #vba

Вопрос:

У меня есть этот цикл, в котором я пытаюсь скопировать формулу в одну строку с одного листа на другой, а затем скопировать и вставить ту же формулу во все строки на первом листе. Цикл не копирует вставку формулы, и я думаю, что это часть копирования, где я отключаюсь.

Кто-нибудь может мне помочь?

Вот что у меня есть.

Я ожидаю, что формула из выбранного столбца в первой строке будет скопирована во все строки в том же столбце на другом листе.

 

So i've managed to create the wanted code, by the following code (without the loop):

Dim startcell, startcell2, startcell3, startcell4, startcell5 As Range, lastrow, lastrow2, lastrow3, lastrow4, lastrow5 As Long, ws As Worksheet, pastebook, formula As Worksheet


Set formula = Sheet3
Set startcellformula = formula.Range("BI8")
Set startcellformula2 = formula.Range("BK8")
Set startcellformula3 = formula.Range("BO8")
Set startcellformula4 = formula.Range("BQ8")
Set startcellformula5 = formula.Range("BS8")
Set startcellformula6 = formula.Range("BU8")
Set startcellformula7 = formula.Range("BW8")
Set startcellformula8 = formula.Range("BY8")
Set startcellformula9 = formula.Range("CA8")
Set startcellformula10 = formula.Range("CC8")
Set startcellformula11 = formula.Range("CE8")
Set startcellformula12 = formula.Range("CG8")
Set startcellformula13 = formula.Range("CI8")

lastrow = ws.Cells(ws.Rows.Count, startcell.Column).End(xlUp).Row


startcellformula.Copy
pastebook.Range("BI8:BI" amp; lastrow).PasteSpecial Paste:=xlFormulas
startcellformula.Copy
pastebook.Range("BK8:BK" amp; lastrow).PasteSpecial Paste:=xlFormulas
startcellformula.Copy
pastebook.Range("BO8:BO" amp; lastrow).PasteSpecial Paste:=xlFormulas
startcellformula.Copy
pastebook.Range("BQ8:BQ" amp; lastrow).PasteSpecial Paste:=xlFormulas
startcellformula.Copy
pastebook.Range("BS8:BS" amp; lastrow).PasteSpecial Paste:=xlFormulas
startcellformula.Copy
pastebook.Range("BU8:BU" amp; lastrow).PasteSpecial Paste:=xlFormulas
startcellformula.Copy
pastebook.Range("BW8:BW" amp; lastrow).PasteSpecial Paste:=xlFormulas
startcellformula.Copy
pastebook.Range("BY8:BY" amp; lastrow).PasteSpecial Paste:=xlFormulas
startcellformula.Copy
pastebook.Range("CA8:CA" amp; lastrow).PasteSpecial Paste:=xlFormulas
startcellformula.Copy
pastebook.Range("CC8:CC" amp; lastrow).PasteSpecial Paste:=xlFormulas
startcellformula.Copy
pastebook.Range("CE8:CE" amp; lastrow).PasteSpecial Paste:=xlFormulas
startcellformula.Copy
pastebook.Range("CG8:CG" amp; lastrow).PasteSpecial Paste:=xlFormulas
startcellformula.Copy
pastebook.Range("CI8:CI" amp; lastrow).PasteSpecial Paste:=xlFormulas

I've tried to work a bit more on the loop, and this where I am currently. I think the only steps left is some syntax. 

'Copy formulas in every other Column between BH and CI
Set startcolumn = Range("BI8").Cells
Set Endcolumn = pastebook.Column("BI")
Set startcellformula = formula.Range(startcolumn)
For currCol = pastebook.Columns("BI").Column To pastebook.Columns("CI").Column Step 2
For startcolumn = pastebook.Columns(startcolumn).Column To currCol Step 2
For Endcolumn = pastebook.Columns(Endcolumn).Column To currCol Step 2
startcellformula.Copy
pastebook.Range(startcolumn, pastebook.Range(startcolumn amp; Endcolumn amp; lastrow)).PasteSpecial Paste:=xlFormulas

Next Endcolumn
Next startcolumn
Next currCol

  

Комментарии:

1. Добро пожаловать в SO. Вы делаете Set pastebook = Sheet1 , а затем позже делаете pastbook.currCol . Вам не хватает символа e . Кроме того, всегда используйте Option Explicit в начале кодов, поэтому ваши переменные должны быть определены принудительно. Кроме того, отладьте свой код с помощью F8 и проверьте, какая строка завершается ошибкой.

Ответ №1:

Добро пожаловать!

Прежде всего, это pastbook.currCol должно быть pastebook.currCol .

Во-вторых, это currCol вернет число, так что в любом случае это pastebook.currCol не имеет никакого смысла.

Вместо pastebook.currCol , который выдаст вам сообщение об ошибке «Объект не поддерживает этот метод.», вам нужно range .

Не уверен, что range вы хотите использовать. Это зависит от того, чего именно вы пытаетесь достичь.

Комментарии:

1. Привет, большое спасибо за ваш отзыв. Я пытаюсь скопировать формулы в BI8 на другой лист, в тот же столбец (BI8), и я хочу сделать это в каждом другом столбце до столбца CI8. Но у меня есть только формула в первой строке (BI8), поэтому я просто хотел скопировать формулу BI8 в диапазон BI8 и все строки ниже (определяется lastrow ). Что я пропустил?

2. @sag Как я уже сказал, это currCol = Columns("BI").Column вернет номер типа Long . So currCol должно быть объявлено как Long . В этом случае это будет currCol =61 . Таким образом, ваш цикл в основном будет эквивалентен For currCol=61 to 87 step 2 . Теперь formula.Range() принимает два аргумента типа Range . Вы используете его с одним Range аргументом, являющимся startcellformula и одним аргументом, который вообще не имеет никакого смысла, являющимся pastebook.currCol . Это похоже на запись pastebook.61 , которая по умолчанию выдает ошибку. Вам нужно перейти pastebook.currCol на a Range .

3. @sag Кроме того, что такое startcell ? То, как вы его используете, должно быть a Range , но оно ни объявлено, ни set к чему. В вашем коде отсутствует слишком много информации. Пожалуйста, рассмотрите возможность ее пересмотра, чтобы я мог вам помочь.

4. Еще раз привет, итак, мне удалось создать требуемый код с помощью следующего кода (без цикла):