Я работал над сценарием, который сначала импортирует CSV, а затем добавляет значения в ячейки в зависимости от значения в столбце «материал».
Я могу заставить сценарий работать, но только если всеячейки имеют значения.
Это не всегда возможно, поскольку в некоторых импортируемых данных эти значения отсутствуют.
Я попытался добавить в код строку, которая добавила бы значение «0» в ячейку, если она была пустой. Я надеялся, что эта строка будет выполнена последовательно, но это не так. Я получаю сообщение об ошибке 1004 во время выполнения. Я знаю, что это работает, если в ячейке есть числовое значение.
Sub CostCal()
'Call load_csv
Dim Firstrow As Long
Dim lastrow As Long
Dim lRow As Long
Dim CalcMode As Long
Dim ViewMode As Long
Dim i As Long
Dim ws2 As Worksheet
Application.Volatile
'Optimize Code
Call OptimizeCode_Begin
'We use the ActiveSheet but you can replace this with
'Sheets("MySheet")if you want
With ActiveSheet
'We select the sheet so we can change the window view
.Select
'If you are in Page Break Preview Or Page Layout view go
'back to normal view, we do this for speed
'ViewMode = ActiveWindow.View
'ActiveWindow.View = xlNormalView
'Turn off Page Breaks, we do this for speed
'.DisplayPageBreaks = False
Firstrow = .UsedRange.Cells(1).Row
lastrow = .UsedRange.Rows(.UsedRange.Rows.Count).Row
For lRow = lastrow To Firstrow Step -1
Set ws2 = ThisWorkbook.Sheets("MASTER")
With .Cells(lRow, "G")
If Not IsError(.Value) Then
If Cells(lRow, "D").Value = "" Then Cells(lRow, "D").Value = ("0")
'If .Value Like ("*MS*") Then Cells(lRow, "D").Value = Cells(lRow, "E").Value * ws2.Range("H5").Value
If .Value Like ("*MS*") Then Cells(lRow, "D").Value = ("=" & Cells(lRow, "E") & "*MASTER!$H$5")
If .Value Like ("*ANGLE*") Then Cells(lRow, "D").Value = Cells(lRow, "E").Value * ws2.Range("H6").Value
If .Value Like ("*BOX SECTION*") Then Cells(lRow, "D").Value = Cells(lRow, "E").Value * ws2.Range("H6").Value
If .Value Like ("*CHANNEL*") Then Cells(lRow, "D").Value = Cells(lRow, "E").Value * ws2.Range("H6").Value
If .Value Like ("*I-BEAM*") Then Cells(lRow, "D").Value = Cells(lRow, "E").Value * ws2.Range("H6").Value
If .Value Like ("*PIPE*") Then Cells(lRow, "D").Value = Cells(lRow, "E").Value * ws2.Range("H6").Value
If .Value Like ("*ROUND-BAR*") Then Cells(lRow, "D").Value = Cells(lRow, "E").Value * ws2.Range("H6").Value
If .Value Like ("*SQUARE-BAR*") Then Cells(lRow, "D").Value = Cells(lRow, "E").Value * ws2.Range("H6").Value
If .Value Like ("*STAINLESS-STEEL*") Then Cells(lRow, "D").Value = Cells(lRow, "E").Value * ws2.Range("H7").Value
If .Value Like ("*THREADED-BAR*") Then Cells(lRow, "D").Value = Cells(lRow, "D").Value * ws2.Range("H8").Value
'If .Value Like ("*PURCHASED*") Then Cells(lRow, "D").Value = Cells(lRow, "D").Value * ws2.Range("H8").Value
If .Value Like ("*PURCHASED*") Then Cells(lRow, "D").Value = "=(RC[-6]) * (ws2.range(R8, C8)"
If .Value Like ("*POLYCARBONATE*") Then Cells(lRow, "D").Value = Cells(lRow, "D").Value * ws2.Range("H8").Value
If .Value Like ("*POLYURETHANE*") Then Cells(lRow, "D").Value = Cells(lRow, "D").Value * ws2.Range("H8").Value
If .Value Like ("*PVC*") Then Cells(lRow, "D").Value = Cells(lRow, "D").Value * ws2.Range("H8").Value
If .Value Like ("*RUBBER*") Then Cells(lRow, "D").Value = Cells(lRow, "D").Value * ws2.Range("H8").Value
If .Value Like ("*DURBAR*") Then Cells(lRow, "D").Value = Cells(lRow, "E").Value * ws2.Range("H5").Value
If .Value Like ("*1_INCH_MESH*") Then Cells(lRow, "D").Value = Cells(lRow, "D").Value * ws2.Range("H8").Value
'If .Cells.Offset(0, -6).Value Like ("*Part*") Then Cells(lRow, "J").Formula = ("=" & Cells(lRow, "D") & "*" & Cells(lRow, "C"))
If .Cells.Offset(0, -6).Value Like ("*Part*") Then Cells(lRow, "J").Value = "=(RC[-6]*RC[-7])"
End If
End With
Next lRow
End With
'Optimize Code
Call OptimizeCode_End
End Sub
Подпрограмма должна искать значение в столбце D, если значение ячейки совпадает со значением кода, то оно будет умножено на значениев конкретной ячейке в мастер-листе. У меня есть два варианта ниже, первый будет использовать только значения, а второй будет использовать местоположение ячейки, второй позволяет мне легко обновлять собственные затраты для конкретного материала.
Окончательный оператор If предоставититоговое значение в столбце J, для которого указано количество x удельная стоимость
Мне все еще необходимо указать итоговую сумму в нижней части этого столбца, но я хочу, чтобы первая часть кода работала.
Я уверен, что есть гораздо более умные и простые методы для того, что мне нужно делать. но у меня пока нет знаний ...
Большое спасибо за любую помощь.