Создание формул, связывающих ячейки в новых листах, созданных макросом, со сводным листом - PullRequest
0 голосов
/ 17 мая 2019

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

   Sub CopyCosting()
'
Dim currentNPD As String
Dim currentCOST As String
Dim currentCALC As String
Dim NewNPD As String
Dim NewCOST As String
Dim NewCALC As String


ActiveSheet.Select
currentNPD = ActiveSheet.Name
ActiveSheet.Next.Select
currentCOST = ActiveSheet.Name
ActiveSheet.Next.Select
currentCALC = ActiveSheet.Name

 Sheets(Array(currentNPD, currentCOST, currentCALC)).Copy After:= _
        Sheets("SUMMARY")
 Worksheets("SUMMARY").Select

 ActiveSheet.Next.Select
 NewNPD = ActiveSheet.Name

 ActiveSheet.Next.Select
 NewCOST = ActiveSheet.Name

 ActiveSheet.Next.Select
 NewCALC = ActiveSheet.Name


Worksheets("SUMMARY").Select


NextFree = Range("B9:B" & Rows.Count).Cells.SpecialCells(xlCellTypeBlanks).Row
Range("A" & NextFree).EntireRow.Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
    Range("B" & NextFree).Select

ActiveCell.FormulaR1C1 = _
        "=NewCOST!R[-39]C[-1]&"" (""&NewCOST!R[-35]C[3]&""x""&NewCOST!R[-37]C[3]&""g)"""

    ActiveCell.Offset(0, 1).Activate
    ActiveCell.FormulaR1C1 = "=IF(NewCOST!R[-40]C[5]>49,""AYR"",""Seasonal"")"

End Sub

Формула Excel #REFS и в связи с первой формулой конкатенации я прошу макрос создать ее следующим образом:

=[NewCOST]NewCOST!A2&" ("&[NewCOST]NewCOST!E6&"x"&[NewCOST]NewCOST!E4&"g)"

Я ожидаю, что формула вернет текств следующем формате, когда R[-39]C[-1] = Cheese Cubes и R[-35]C[3] = 4 and R[-37]C[3] = 200

Cheese Cubes (4x200g)

Я надеюсь, что все это имеет смысл!Буду признателен за любую помощь и совет.

1 Ответ

0 голосов
/ 17 мая 2019

Во-первых, лучше использовать функции рабочей книги и рабочей таблицы вместо выбора:

Dim wb as Workbook, ws as worksheet, nws as worksheet
Set wb = ActiveWorkbook
Set ws = wb.Worksheets("wsname")
set nws = wb.Worksheets("newws")'When you create new worksheet

Тогда вам больше не нужно использовать select при определении вашего диапазона. Использование:

ws.Range("...")

Я бы также попытался использовать приведенный ниже цикл for для прохождения каждой формулы ячеек, я бы также выписал формулу в excel и скопировал / вставил в vba. Измените номер с помощью 'r':

For each r in Range("B" & NextFree)

'Formula here

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