Преобразование формулы в значения - PullRequest
0 голосов
/ 07 мая 2020

Я хочу преобразовать формулу ВПР, переданную через этот код, в значения для того же диапазона:

Dim DWR, MHR, P, D, A As Worksheet

Set A = Sheets("ALLOC")
Set DWR = Sheets("DWREP")
Set MHR = Sheets("MACH-HRS")
Set P = Sheets("PRODUCTION")
Set D = Sheets("DELAYS")

Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False

Dim last_row, last_row1, last_row2 As Long
last_row = MHR.Cells(Rows.Count, 1).End(xlUp).Row
last_row1 = P.Cells(Rows.Count, 1).End(xlUp).Row
last_row2 = D.Cells(Rows.Count, 1).End(xlUp).Row
last_row3 = A.Cells(Rows.Count, 1).End(xlUp).Row

Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False

A.Range("AI2").Formula = "=CONCATENATE(A2,B2)"
A.Range("AJ2").Formula = "=D2"
A.Range("AI2:AJ2").AutoFill Destination:=A.Range("AI2:AJ" & last_row3)


P.Range("AI2").Formula = "=CONCATENATE(A2,B2)"
P.Range("AJ2").Formula = "=VLOOKUP(AI2,ALLOC!$AI:$AJ,2,0)"
P.Range("AI2:AJ2").AutoFill Destination:=P.Range("AI2:AJ" & last_row1)
For i = 2 To last_row1
    varr = P.Cells(i, 36).Value
    P.Cells(i, 36).Value = varr
Next i

Однако я получаю # N / A Values, когда я пробовал итерацию по диапазону с .Value = .Value. Кроме того, я пробовал использовать для области спецификаций, но он возвращает тот же результат.

 P.Activate
 P.Range("AJ2:AJ" & last_row1).Select
 Selection.Copy
 Selection.PasteSpecial Paste:=xlPasteValues
 ActiveSheet.Select
 Application.CutCopyMode = False

Когда я пытался сделать то же самое вручную, проблем не было. Это ошеломляет. Ваша помощь будет оценена по достоинству.

1 Ответ

0 голосов
/ 07 мая 2020

Дело получилось следующее. Когда этот параметр подобен этому Application.Calculation = xlCalculationManual Excel не может вычислить формулу. Таким образом, установка xlCalculationAutomatic перед запуском этой конкретной строки кода решает проблему.

...