Передача вывода одного оператора Evaluate другому. Получение ошибки 2015 - PullRequest
0 голосов
/ 19 ноября 2018

Я могу заставить работать первую функцию Evaluate.Но не второй.Это выдает «Ошибка 2015» во второй Evaluate для strBulkBP.Выход первого передается второй функции.Пожалуйста, помогите исправить код.Спасибо.

Sub test1()

Dim strBulkNum as Variant
Dim strBulkBP As Variant

Set wksh3 = Workbooks("Master - Data.xlsx").Sheets("Data")
Set wksh4 = Workbooks("Warranty_Analysis.xlsm").Sheets("TTX-OWNER_data")

Set rngBulkNum = wksh3.Range("BulkNum") 'column A:A
Set rngRefNum = wksh3.Range("RefNum") 'column N:N

Set rngBPNum = wksh4.Range("BPNum") 'column A:A
Set rngBPBulkNum = wksh4.Range("BPBulkNum") 'column E:E

strRefNum = "ES80381"
' The code below works to give a value for strBulkNum = "MX12049"
strBulkNum = Evaluate("=IFERROR(INDEX('[Master - Data.xlsx]Data'!" & rngBulkNum.Address(False, True) & ", SMALL(IF('[Master - Data.xlsx]Data'!" & rngRefNum.Address(False, True) & "=""" & strRefNum & """, ROW('[Master - Data.xlsx]Data'!" & rngRefNum.Address(False, True) & "))," & 2 & ")),"""")")

' The code below does not work. Gives "Error 2015" for strBulkBP
strBulkBP = Evaluate("=IFERROR(INDEX('[Warranty_Analysis.xlsm]TTX-OWNER_data'!" & rngBPNum.Address(False, True) & ", SMALL(IF('[Warranty_Analysis.xlsm]TTX-OWNER_data'!" & rngBPBulkNum.Address(False, True) & "=""" & strBulkNum & """,ROW('[Warranty_Analysis.xlsm]TTX-OWNER_data'!" & rngBPBulkNum.Address(False, True) & "))," & 2 & ")),"""")")

'The below code works - using helper cells & then populating the variable
Set wkshCal = ThisWorkbook.Sheets("Calculation")
Dim FormulaPart1 As String 
Dim FormulaPart2 As String 

wkshCal.Range("A1") = strBulkNum
FormulaPart1 = "=IFERROR(INDEX('[Warranty_Analysis.xlsm]TTX-OWNER_data'!$A:$A, xxx()),"""")" 
FormulaPart2 = "SMALL(IF('[Warranty_Analysis.xlsm]TTX-OWNER_data'!$E:$E = $A$1, ROW('[Warranty_Analysis.xlsm]TTX-OWNER_data'!$E:$E)), 1)" 
With wkshCal.Range("B1") 
 .FormulaArray = FormulaPart1 
 .Replace "xxx()", FormulaPart2 
End With 
strBulkBP = Range("B1") 
End Sub

1 Ответ

0 голосов
/ 19 ноября 2018

'Приведенный ниже код работает - использует вспомогательные ячейки и затем заполняет переменную. Однако формулу массива нужно разделить на две части, чтобы она составляла не более 255 символов каждая. Лучшим решением может быть то, где переменная непосредственно хранит вычисление. Set wkshCal = ThisWorkbook.Sheets ("Расчет") Dim FormulaPart1 As String Dim FormulaPart2 As String

wkshCal.Range("A1") = strBulkNum
FormulaPart1 = "=IFERROR(INDEX('[Warranty_Analysis.xlsm]TTX-OWNER_data'!$A:$A, xxx()),"""")" 
FormulaPart2 = "SMALL(IF('[Warranty_Analysis.xlsm]TTX-OWNER_data'!$E:$E = $A$1, ROW('[Warranty_Analysis.xlsm]TTX-OWNER_data'!$E:$E)), 1)" 
With wkshCal.Range("B1") 
 .FormulaArray = FormulaPart1 
 .Replace "xxx()", FormulaPart2 
End With 
strBulkBP = Range("B1")
...